[commit] r1858 - in trunk: GME/Gme GME/Gme/res GME/Gme/res/icon_sources Install
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Fri Mar 9 16:29:50 CST 2012
Author: ksmyth
Date: Fri Mar 9 16:29:50 2012
New Revision: 1858
Log:
XME icon, "Open with 64bit GME" "Open with 32bit GME" options
Added:
trunk/GME/Gme/res/XME.ico
trunk/GME/Gme/res/icon_sources/
trunk/GME/Gme/res/icon_sources/extract_icons.py
trunk/GME/Gme/res/icon_sources/make_ico.py
trunk/GME/Gme/res/icon_sources/xme_16x16.xcf
trunk/GME/Gme/res/icon_sources/xme_32x32.xcf
trunk/GME/Gme/res/icon_sources/xme_48x48.xcf
Modified:
trunk/GME/Gme/GME.rc
trunk/Install/GME_bin.wxs
Modified: trunk/GME/Gme/GME.rc
==============================================================================
--- trunk/GME/Gme/GME.rc Fri Mar 9 16:29:35 2012 (r1857)
+++ trunk/GME/Gme/GME.rc Fri Mar 9 16:29:50 2012 (r1858)
@@ -71,6 +71,8 @@
IDI_TYPEMARK_ICON ICON "res\\icon1.ico"
IDI_INSTANCEMARK_ICON ICON "res\\typemark.ico"
IDI_COMPNOTFOUND ICON "res\\compnotfound.ico"
+// If this changes from ,5, change GME_bin.wxs
+ID_FILE_IMPORTXML ICON "res\\XME.ico"
/////////////////////////////////////////////////////////////////////////////
//
Added: trunk/GME/Gme/res/XME.ico
==============================================================================
Binary files /dev/null 00:00:00 1970 (empty, because file is newly added) and trunk/GME/Gme/res/XME.ico Fri Mar 9 16:29:50 2012 (r1858) differ
Added: trunk/GME/Gme/res/icon_sources/extract_icons.py
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/GME/Gme/res/icon_sources/extract_icons.py Fri Mar 9 16:29:50 2012 (r1858)
@@ -0,0 +1,115 @@
+import sys
+import struct
+
+
+#with open(r'C:\Users\ksmyth\git\GMESRC\GME\Gme\res\GME.ico', 'rb') as input:
+with open(sys.argv[1], 'rb') as input:
+ input.read(4)
+ n = struct.unpack('<h', input.read(2))[0]
+ data = []
+ for i in range(n):
+ datum = {}
+ datum['width'] = struct.unpack('<B', input.read(1))[0]
+ datum['height'] = struct.unpack('<B', input.read(1))[0]
+ datum['colors'] = struct.unpack('<B', input.read(1))[0]
+ input.read(1)
+ datum['planes'] = struct.unpack('<h', input.read(2))[0]
+ datum['bpp'] = struct.unpack('<h', input.read(2))[0]
+ datum['size'] = struct.unpack('<l', input.read(4))[0]
+ datum['offset'] = struct.unpack('<l', input.read(4))[0]
+ print datum['size'],datum['offset']
+ print datum
+ data.append(type('Data', (object,), datum))
+
+ for datum in data:
+ input.seek(datum.offset)
+ imagedata = input.read(datum.size)
+ info = str(datum.offset) + "_" + str(datum.width) + "x" + str(datum.height) + "_" + str(datum.bpp) + "bpp"
+# with open('output_' + info, 'wb') as output:
+# output.write(imagedata)
+ if imagedata[1:4] == 'PNG':
+ with open('output_' + info + ".png", 'wb') as output:
+ output.write(imagedata)
+ else:
+ with open('output_' + info + ".bmp", 'wb') as output:
+#typedef struct tagBITMAPFILEHEADER {
+# WORD bfType;
+ output.write('BM')
+# DWORD bfSize;
+ output.write(struct.pack('<L', len(imagedata) + 14))
+# WORD bfReserved1;
+ output.write(struct.pack('<H', 0))
+# WORD bfReserved2;
+ output.write(struct.pack('<H', 0))
+# DWORD bfOffBits;
+#} BITMAPFILEHEADER;
+ #output.write(struct.pack('<L', 140))
+ output.write(struct.pack('<L', 54))
+# LONG biHeight;
+#} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+ output.write(imagedata)
+ # AND/XOR transparency business (this kills the alpha mask)
+ output.seek(0x16) # sizeof(BITMAPFILEHEADER) + offsetof(BITMAPINFOHEADER, biHeight)
+ output.write(struct.pack('<L', datum.height))
+
+ with open('output_' + info + "_mask.bmp", 'wb') as output:
+#typedef struct tagBITMAPFILEHEADER {
+# WORD bfType;
+ output.write('BM')
+# DWORD bfSize;
+ output.write(struct.pack('<L', 14 + 40 + 8 + datum.width*datum.height/8 + datum.height*2))
+# WORD bfReserved1;
+ output.write(struct.pack('<H', 0))
+# WORD bfReserved2;
+ output.write(struct.pack('<H', 0))
+# DWORD bfOffBits;
+#} BITMAPFILEHEADER;
+ #output.write(struct.pack('<L', 140))
+ output.write(struct.pack('<L', 54))
+ #output.write(struct.pack('<L', 62))
+# LONG biHeight;
+#} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+#typedef struct tagBITMAPINFOHEADER {
+# DWORD biSize;
+ output.write(struct.pack('<L', 40))
+# LONG biWidth;
+ output.write(struct.pack('<L', datum.width))
+# LONG biHeight;
+ output.write(struct.pack('<L', datum.height))
+# WORD biPlanes;
+ output.write(struct.pack('<H', 1))
+# WORD biBitCount;
+ output.write(struct.pack('<H', 1))
+# DWORD biCompression;
+ output.write(struct.pack('<L', 0))
+# DWORD biSizeImage;
+ output.write(struct.pack('<L', 0))
+# LONG biXPelsPerMeter;
+ output.write(struct.pack('<L', 0))
+# LONG biYPelsPerMeter;
+ output.write(struct.pack('<L', 0))
+# DWORD biClrUsed;
+ output.write(struct.pack('<L', 2))
+# DWORD biClrImportant;
+ output.write(struct.pack('<L', 2))
+#} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+ output.write(struct.pack('<L', 0x00000000))
+ output.write(struct.pack('<L', 0x00FFFFFF))
+ #output.write(imagedata[-(datum.width*datum.height/8):])
+ #output.write(imagedata[-(datum.width*datum.height/8):])
+ for i in range(datum.height, 0, -1):
+ pad = 0
+ # The bits in the array are packed together, but each scan line must be padded with zeros to end on a LONG data-type boundary
+ if datum.width % 32 != 0: pad = 16
+ start, end = -((datum.width+pad)*i/8), -((datum.width+pad)*(i-1)/8)
+ if end == 0: end = len(imagedata)
+ print "%d %d %d" % (datum.width, start, end)
+ output.write(imagedata[start:end])
+ #if datum.width % 32 != 0:
+ # output.write(struct.pack('H', 0))
+ # AND/XOR transparency business (this kills the alpha mask)
+ #output.seek(0x16) # sizeof(BITMAPFILEHEADER) + offsetof(BITMAPINFOHEADER, biHeight)
+ #output.write(struct.pack('<L', datum.height))
+
+
+
Added: trunk/GME/Gme/res/icon_sources/make_ico.py
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/GME/Gme/res/icon_sources/make_ico.py Fri Mar 9 16:29:50 2012 (r1858)
@@ -0,0 +1,69 @@
+# python make_ico.py GME_icon.png output_10198 output_17534 output_20774
+
+import struct
+import os
+import sys
+
+class Out(object):
+ def __init__(self, output):
+ self.output = output
+ self.count = 0
+
+ def write1(self, v):
+ output.write(struct.pack('<B', v))
+
+ def write2(self, v):
+ output.write(struct.pack('<H', v))
+
+ def write4(self, v):
+ output.write(struct.pack('<L', v))
+
+ def write(self, v):
+ output.write(v)
+
+#sizes = ( (0,0), (48,48), (32,32), (16,16) )
+sizes = ( (48,48), (32,32), (16,16) )
+palettesize = ( 0, 0, 0, 0 )
+bpp = ( 32, 32, 32, 24)
+
+def roundup(x):
+ import math
+ return int(math.ceil(x / 32.0) * 32)
+
+files = []
+for (i, f) in enumerate(sys.argv[1:]):
+ with open(f, 'rb') as datafile:
+ data = datafile.read()
+ if data[0:2] == 'BM': # magic number for BMP
+ data = data[14:] # sizeof(BITMAPFILEHEADER)
+ # TODO: read mask bmp
+ # TODO: fix size
+ data += struct.pack('b', 0) * roundup(sizes[i][0]) * sizes[i][1]
+ data = list(data)
+ data[8:12] = struct.pack('<L', struct.unpack('<L', ''.join(data[8:12]))[0] * 2) # offsetof(BITMAPINFOHEADER, biHeight) == 8
+ print struct.unpack('<L', ''.join(data[8:12]))
+ data = ''.join(data)
+ files.append(data)
+
+with open('output.ico', 'wb') as output:
+ out = Out(output)
+ out.write2(0)
+ out.write2(1)
+ out.write2(len(files))
+ for i in range(len(files)):
+ out.write1(sizes[i][0])
+ out.write1(sizes[i][1])
+ print 'height ' + str(sizes[i][1])
+ out.write1(palettesize[i])
+ out.write1(0)
+ out.write2(1) # FIXME: what is color plane?
+ out.write2(bpp[i])
+ out.write4(len(files[i]))
+ print(len(files[i]))
+ print sum((len(file) for file in files[:i]))
+ out.write4(6 + 16 * len(files) + sum((len(file) for file in files[:i])))
+
+ for file in files:
+ out.write(file)
+
+
Added: trunk/GME/Gme/res/icon_sources/xme_16x16.xcf
==============================================================================
Binary files /dev/null 00:00:00 1970 (empty, because file is newly added) and trunk/GME/Gme/res/icon_sources/xme_16x16.xcf Fri Mar 9 16:29:50 2012 (r1858) differ
Added: trunk/GME/Gme/res/icon_sources/xme_32x32.xcf
==============================================================================
Binary files /dev/null 00:00:00 1970 (empty, because file is newly added) and trunk/GME/Gme/res/icon_sources/xme_32x32.xcf Fri Mar 9 16:29:50 2012 (r1858) differ
Added: trunk/GME/Gme/res/icon_sources/xme_48x48.xcf
==============================================================================
Binary files /dev/null 00:00:00 1970 (empty, because file is newly added) and trunk/GME/Gme/res/icon_sources/xme_48x48.xcf Fri Mar 9 16:29:50 2012 (r1858) differ
Modified: trunk/Install/GME_bin.wxs
==============================================================================
--- trunk/Install/GME_bin.wxs Fri Mar 9 16:29:35 2012 (r1857)
+++ trunk/Install/GME_bin.wxs Fri Mar 9 16:29:50 2012 (r1858)
@@ -72,14 +72,27 @@
<ProgId Id='GME.mgafile' Description='GME project file'>
<Extension Id='mga' ContentType='application/x-mga'>
+ <?if $(sys.BUILDARCH)=x86 ?>
<Verb Id='open' Command='Open with GME' TargetFile='GME.exe' Argument='"%1"' />
+ <Verb Id='open_x86' Command='Open with GME' TargetFile='GME.exe' Argument='"%1"' />
+ <?else?>
+ <Verb Id='open_x64' Command='Open with 64bit GME' TargetFile='GME.exe' Argument='"%1"' />
+ <?endif?>
</Extension>
</ProgId>
<ProgId Id='GME.xmefile' Description='GME XML project file'>
<Extension Id='xme' ContentType='application/x-xme'>
+ <?if $(sys.BUILDARCH)=x86 ?>
<Verb Id='open' Command='Open with GME' TargetFile='GME.exe' Argument='"%1"' />
+ <Verb Id='open_x86' Command='Open with GME' TargetFile='GME.exe' Argument='"%1"' />
+ <?else?>
+ <Verb Id='open_x64' Command='Open with 64bit GME' TargetFile='GME.exe' Argument='"%1"' />
+ <?endif?>
</Extension>
</ProgId>
+ <Registry Id='MGADesc' Root='HKCR' Key='GME.mgafile' Action='write' Type='string' Value='GME model file' />
+ <Registry Id='XMEDesc' Root='HKCR' Key='GME.xmefile' Action='write' Type='string' Value='GME XML model file' />
+ <Registry Id='XMEIcon' Root='HKCR' Key='GME.xmefile\DefaultIcon' Action='write' Type='string' Value='[#GME.exe],5' />
<?if $(sys.BUILDARCH)=x86 ?>
<Environment Id="GME_ROOT" Action="set" System="yes" Name="GME_ROOT" Value="[INSTALLDIR]" />
<?endif?>
More information about the gme-commit
mailing list