|
|
1.1 root 1: /****************************************************************************/
2: /* */
3: /* Microsoft Confidential */
4: /* */
5: /* Copyright (c) Microsoft Corp. 1987, 1991 */
6: /* All Rights Reserved */
7: /* */
8: /****************************************************************************/
9: /****************************** Module Header *******************************
10: * Module Name: globals.c
11: *
12: * Global data for the image editor.
13: *
14: * History:
15: *
16: ****************************************************************************/
17:
18: #include "imagedit.h"
19: #include "dialogs.h"
20: #include "iehelp.h"
21: #include "ids.h"
22:
23:
24: /*
25: * Initialized data and structures -----------------------------------------
26: */
27:
28: /*
29: * Initialization data structure. This describes each profile entry
30: * that is contained in the initialization file.
31: */
32: INIENTRY gaie[] = {
33: { "fGrid", &gfGrid, FALSE, 0 },
34: { "fShowColor", &gfShowColor, TRUE, 0 },
35: { "fShowView", &gfShowView, TRUE, 0 },
36: { "fShowToolbox", &gfShowToolbox, TRUE, 0 },
37: { "nBrushSize", &gnBrushSize, 3, 0 },
38: { NULL, NULL, 0, 0 }
39: };
40:
41: BOOL gfGrid; // TRUE if the grid is on.
42: BOOL gfShowColor; // TRUE if Color palette is to be shown.
43: BOOL gfShowView; // TRUE if View window is to be shown.
44: BOOL gfShowToolbox; // TRUE if Toolbox is to be shown.
45: INT gnBrushSize; // Current brush size.
46:
47: CHAR szAppPos[] = "AppPos"; // App window's position keyname.
48: CHAR szTBPos[] = "TBPos"; // Toolbox window's position keyname.
49: CHAR szViewPos[] = "ViewPos"; // View window's position keyname.
50: CHAR szColorPos[] = "ColorPos"; // Color palette window's position keyname.
51: CHAR szrgbScreen[] = "rgbScreen"; // Screen color keyname.
52:
53:
54: /*
55: * Instance handles, window handles and class strings ----------------------
56: */
57:
58: HANDLE ghInst; // App instance handle.
59: HANDLE haccelTbl; // Accelerator table handle.
60: HCURSOR hcurWait; // Standard hourglass cursor.
61:
62: HWND ghwndMain; // Main app window handle.
63: HWND ghwndWork; // Workspace window handle.
64: HWND ghwndPropBar; // Properties Bar window handle.
65: HWND ghwndToolbox; // Toolbox window handle.
66: HWND ghwndView; // View window handle.
67: HWND ghwndColor; // Color palette window handle.
68:
69: CHAR szMainClass[] = "ImagEdit"; // Main window class.
70: CHAR szWorkClass[] = "Work"; // Work window class.
71: CHAR szToolboxClass[] = "Toolbox"; // Toolbox window class.
72: CHAR szToolBtnClass[] = "ToolBtn"; // Toolbox button window class.
73: CHAR szViewClass[] = "View"; // View window class.
74: CHAR szColorBoxClass[] = "ColorBox";// Color box window class.
75: CHAR szColorLRClass[] = "ColorLR"; // Color Left-Right sample class.
76:
77:
78: /*
79: * Device list globals -----------------------------------------------------
80: */
81:
82: PDEVICE gpIconDeviceHead = NULL; // Head of icon device list.
83: INT gnIconDevices = 0; // Number of icon devices.
84: PDEVICE gpCursorDeviceHead = NULL; // Head of cursor device list.
85: INT gnCursorDevices = 0; // Number of cursor devices.
86:
87:
88: /*
89: * Globals that describe the current file and image being edited -----------
90: */
91:
92: CHAR gszFullFileName[CCHMAXPATH]; // Full path name of current file.
93: PSTR gpszFileName = NULL; // Current file name (or NULL).
94: INT giType = FT_BITMAP; // Type of object being edited currently.
95: PIMAGEINFO gpImageHead = NULL; // Head of image linked list.
96: INT gnImages = 0; // Number of images in the file.
97: BOOL fFileDirty; // TRUE if the file is dirty.
98:
99: PIMAGEINFO gpImageCur = NULL; // Pointer to current image.
100: INT gcxImage; // Width of the image.
101: INT gcyImage; // Height of the image.
102: INT gnColors = 16; // Number of colors of current image.
103: BOOL fImageDirty; // TRUE if the image is dirty.
104:
105:
106: /*
107: * Drawing DC's and bitmaps ------------------------------------------------
108: */
109:
110: HDC ghdcImage = NULL; // Image XOR DC.
111: HBITMAP ghbmImage = NULL; // Image XOR bitmap.
112:
113: HDC ghdcANDMask = NULL; // Image AND mask DC.
114: HBITMAP ghbmANDMask = NULL; // Image AND mask bitmap.
115:
116: HBITMAP ghbmUndo = NULL; // Backup of XOR bitmap for undo.
117: HBITMAP ghbmUndoMask = NULL; // Backup of AND mask bitmap for undo.
118:
119:
120: /*
121: * Globals for the color palette and drawing -------------------------------
122: */
123:
124: INT giColorLeft; // Index to the left color in gargbCurrent.
125: INT giColorRight; // Index to the right color in gargbCurrent.
126: INT gfModeLeft; // Mode of the left color brush.
127: INT gfModeRight; // Mode of the right color brush.
128: HBRUSH ghbrLeft = NULL; // Brush with left mouse button color.
129: HBRUSH ghbrLeftSolid = NULL; // Brush with solid left button color.
130: HBRUSH ghbrRight = NULL; // Brush with right mouse button color.
131: HBRUSH ghbrRightSolid = NULL; // Brush with solid right button color.
132: HBRUSH ghbrScreen = NULL; // Brush with screen color.
133: HBRUSH ghbrInverse = NULL; // Brush with inverse screen color.
134: HPEN ghpenLeft = NULL; // Left color pen.
135: HPEN ghpenRight = NULL; // Right color pen.
136: DWORD grgbScreenDefault; // Default screen color.
137: DWORD grgbScreen; // RGB of screen color.
138: DWORD grgbInverse; // RGB of inverse screen color.
139: DWORD *gargbCurrent; // Points to the current color table.
140: DWORD gargbColor[COLORSMAX]; // Current color color table.
141: DWORD gargbMono[COLORSMAX]; // Current monochrome color table.
142: HPEN hpenDarkGray = NULL; // A dark gray pen.
143:
144: DRAWPROC gpfnDrawProc; // Current drawing functions.
145: INT gCurTool = -1; // Current tool (TOOL_* define).
146: HBRUSH ghbrDraw = NULL; // Current drawing brush.
147: HBRUSH ghbrDrawSolid = NULL; // Current solid drawing brush.
148: HPEN ghpenDraw = NULL; // Current drawing pen.
149: INT gfDrawMode; // Mode of current drawing brush.
150:
151: /*
152: * The default color palette.
153: */
154: DWORD gargbDefaultColor[] = {
155: RGB(255, 255, 255), RGB(0, 0, 0),
156: RGB(192, 192, 192), RGB(128, 128, 128),
157: RGB(255, 0, 0), RGB(128, 0, 0),
158: RGB(255, 255, 0), RGB(128, 128, 0),
159: RGB(0, 255, 0), RGB(0, 128, 0),
160: RGB(0, 255, 255), RGB(0, 128, 128),
161: RGB(0, 0, 255), RGB(0, 0, 128),
162: RGB(255, 0, 255), RGB(128, 0, 128),
163: RGB(255, 255, 128), RGB(128, 128, 64),
164: RGB(0, 255, 128), RGB(0, 64, 64),
165: RGB(128, 255, 255), RGB(0, 128, 255),
166: RGB(128, 128, 255), RGB(0, 64, 128),
167: RGB(255, 0, 128), RGB(64, 0, 128),
168: RGB(255, 128, 64), RGB(128, 64, 0)
169: };
170:
171: /*
172: * The default monochrome palette.
173: */
174: DWORD gargbDefaultMono[] = {
175: RGB(255, 255, 255), RGB(0, 0, 0),
176: RGB(128, 128, 128), RGB(9, 9, 9),
177: RGB(137, 137, 137), RGB(18, 18, 18),
178: RGB(146, 146, 146), RGB(27, 27, 27),
179: RGB(155, 155, 155), RGB(37, 37, 37),
180: RGB(164, 164, 164), RGB(46, 46, 46),
181: RGB(173, 173, 173), RGB(55, 55, 55),
182: RGB(182, 182, 182), RGB(63, 63, 63),
183: RGB(191, 191, 191), RGB(73, 73, 73),
184: RGB(201, 201, 201), RGB(82, 82, 82),
185: RGB(212, 212, 212), RGB(92, 92, 92),
186: RGB(222, 222, 222), RGB(101, 101, 101),
187: RGB(231, 231, 231), RGB(110, 110, 110),
188: RGB(245, 245, 245), RGB(119, 119, 119)
189: };
190:
191: /*
192: * Color table for monochrome DIB's.
193: */
194: DWORD gargbColorTable2[] = {
195: RGB(0, 0, 0),
196: RGB(255, 255, 255)
197: };
198:
199: /*
200: * Array that describes each tool used in the editor. This table
201: * is indexed by the TOOL_* defines.
202: */
203: TOOLS gaTools[] = {
204: { PencilDP, NULL, IDBM_TUPENCIL, NULL, IDBM_TDPENCIL, NULL,
205: TRUE, FALSE },
206: { BrushDP, NULL, IDBM_TUBRUSH, NULL, IDBM_TDBRUSH, NULL,
207: TRUE, FALSE },
208: { PickDP, NULL, IDBM_TUSELECT, NULL, IDBM_TDSELECT, NULL,
209: FALSE, FALSE },
210: { LineDP, NULL, IDBM_TULINE, NULL, IDBM_TDLINE, NULL,
211: FALSE, TRUE },
212: { RectDP, NULL, IDBM_TURECT, NULL, IDBM_TDRECT, NULL,
213: FALSE, TRUE },
214: { RectDP, NULL, IDBM_TUSRECT, NULL, IDBM_TDSRECT, NULL,
215: FALSE, TRUE },
216: { CircleDP, NULL, IDBM_TUCIRCLE, NULL, IDBM_TDCIRCLE, NULL,
217: FALSE, TRUE },
218: { CircleDP, NULL, IDBM_TUSCIRCL, NULL, IDBM_TDSCIRCL, NULL,
219: FALSE, TRUE },
220: { FloodDP, NULL, IDBM_TUFLOOD, NULL, IDBM_TDFLOOD, NULL,
221: TRUE, FALSE },
222: { HotSpotDP, NULL, IDBM_TUHOTSPT, NULL, IDBM_TDHOTSPT, NULL,
223: FALSE, FALSE }
224: };
225:
226:
227: /*
228: * Globals and tables for messages and help --------------------------------
229: */
230:
231: /*
232: * Message box messages, for the Message() function.
233: */
234: MESSAGEDATA gamdMessages[] = {
235: { IDS_OUTOFMEMORY, MB_OK | MB_ICONHAND },
236: { IDS_MEMERROR, MB_OK | MB_ICONHAND },
237: { IDS_BADBMPFILE, MB_OK | MB_ICONEXCLAMATION },
238: { IDS_BADICOCURFILE, MB_OK | MB_ICONEXCLAMATION },
239: { IDS_BADPALFILE, MB_OK | MB_ICONEXCLAMATION },
240: { IDS_CANTOPEN, MB_OK | MB_ICONEXCLAMATION },
241: { IDS_READERROR, MB_OK | MB_ICONEXCLAMATION },
242: { IDS_WRITEERROR, MB_OK | MB_ICONEXCLAMATION },
243: { IDS_CANTCREATE, MB_OK | MB_ICONEXCLAMATION },
244: { IDS_NOCLIPBOARDFORMAT, MB_OK | MB_ICONEXCLAMATION },
245: { IDS_NOCLIPBOARD, MB_OK | MB_ICONEXCLAMATION },
246: { IDS_CANTEDITIMAGE, MB_OK | MB_ICONEXCLAMATION },
247: { IDS_SAVEFILE, MB_YESNOCANCEL | MB_ICONEXCLAMATION },
248: { IDS_ENTERANUMBER, MB_OK | MB_ICONEXCLAMATION },
249: { IDS_BADDEVICESIZE, MB_OK | MB_ICONEXCLAMATION },
250: { IDS_BADDEVICECOLORS, MB_OK | MB_ICONEXCLAMATION },
251: { IDS_NOTSUPPORT, MB_OK | MB_ICONEXCLAMATION },
252: { IDS_NOIMAGES, MB_OK | MB_ICONEXCLAMATION },
253: { IDS_BADBMPSIZE, MB_OK | MB_ICONEXCLAMATION }
254: };
255:
256: INT gidCurrentDlg = 0; // Current dialog id (null if none).
257: INT gMenuSelected = 0; // Currently selected menu item.
258: CHAR gszHelpFile[CCHMAXPATH]; // Path to the help file.
259: HHOOK ghhkMsgFilter; // Hook handle for message filter func.
260: FARPROC lpfnMsgFilterHookFunc; // The message filter proc instance.
261:
262: /*
263: * Table that maps menu items to help context id's for them.
264: */
265: HELPMAP gahmapMenu[] = {
266: {MENU_FILE_NEW, HELPID_FILE_NEW },
267: {MENU_FILE_OPEN, HELPID_FILE_OPEN },
268: {MENU_FILE_SAVE, HELPID_FILE_SAVE },
269: {MENU_FILE_SAVEAS, HELPID_FILE_SAVEAS },
270: {MENU_FILE_LOADCOLORS, HELPID_FILE_LOADCOLORS },
271: {MENU_FILE_SAVECOLORS, HELPID_FILE_SAVECOLORS },
272: {MENU_FILE_DEFAULTCOLORS, HELPID_FILE_DEFAULTCOLORS },
273: {MENU_FILE_EXIT, HELPID_FILE_EXIT },
274:
275: {MENU_EDIT_UNDO, HELPID_EDIT_UNDO },
276: {MENU_EDIT_RESTORE, HELPID_EDIT_RESTORE },
277: {MENU_EDIT_COPY, HELPID_EDIT_COPY },
278: {MENU_EDIT_PASTE, HELPID_EDIT_PASTE },
279: {MENU_EDIT_CLEAR, HELPID_EDIT_CLEAR },
280: {MENU_EDIT_NEWIMAGE, HELPID_EDIT_NEWIMAGE },
281: {MENU_EDIT_SELECTIMAGE, HELPID_EDIT_SELECTIMAGE },
282: {MENU_EDIT_DELETEIMAGE, HELPID_EDIT_DELETEIMAGE },
283:
284: {MENU_OPTIONS_GRID, HELPID_OPTIONS_GRID },
285: {MENU_OPTIONS_BRUSH2, HELPID_OPTIONS_BRUSH2 },
286: {MENU_OPTIONS_BRUSH3, HELPID_OPTIONS_BRUSH3 },
287: {MENU_OPTIONS_BRUSH4, HELPID_OPTIONS_BRUSH4 },
288: {MENU_OPTIONS_BRUSH5, HELPID_OPTIONS_BRUSH5 },
289: {MENU_OPTIONS_SHOWCOLOR, HELPID_OPTIONS_SHOWCOLOR },
290: {MENU_OPTIONS_SHOWVIEW, HELPID_OPTIONS_SHOWVIEW },
291: {MENU_OPTIONS_SHOWTOOLBOX, HELPID_OPTIONS_SHOWTOOLBOX },
292:
293: {MENU_HELP_CONTENTS, HELPID_HELP_CONTENTS },
294: {MENU_HELP_SEARCH, HELPID_HELP_SEARCH },
295: // No help for the About menu command.
296:
297: {0, 0 }
298: };
299:
300: /*
301: * Table that maps dialog ids to help context id's for them.
302: */
303: HELPMAP gahmapDialog[] = {
304: // No help for the About dialog.
305: {DID_BITMAPSIZE, HELPID_BITMAPSIZE },
306: {DID_PASTEOPTIONS, HELPID_PASTEOPTIONS },
307: {DID_NEWCURSORIMAGE, HELPID_NEWCURSORIMAGE },
308: {DID_NEWICONIMAGE, HELPID_NEWICONIMAGE },
309: {DID_SELECTCURSORIMAGE, HELPID_SELECTCURSORIMAGE },
310: {DID_SELECTICONIMAGE, HELPID_SELECTICONIMAGE },
311: {DID_RESOURCETYPE, HELPID_RESOURCETYPE },
312:
313: {DID_COMMONFILEOPEN, HELPID_COMMONFILEOPEN },
314: {DID_COMMONFILESAVE, HELPID_COMMONFILESAVE },
315: {DID_COMMONFILEOPENPAL, HELPID_COMMONFILEOPENPAL },
316: {DID_COMMONFILESAVEPAL, HELPID_COMMONFILESAVEPAL },
317: {DID_COMMONFILECHOOSECOLOR, HELPID_COMMONFILECHOOSECOLOR },
318:
319: {DID_TOOLBOX, HELPID_TOOLBOX },
320: {DID_PROPBAR, HELPID_PROPERTIESBAR },
321: {DID_COLOR, HELPID_COLORPALETTE },
322: {DID_VIEW, HELPID_VIEW },
323:
324: {0, 0 }
325: };
326:
327:
328: /*
329: * Misc. globals -----------------------------------------------------------
330: */
331:
332: INT gcxWorkSpace; // Width of workspace window.
333: INT gcyWorkSpace; // Height of workspace window.
334: INT gZoomFactor; // Magnification factor of image.
335:
336: RECT grcPick; // The current picking rectangle.
337: INT gcxPick; // Width of picking rectangle.
338: INT gcyPick; // Height of picking rectangle.
339:
340: UINT ClipboardFormat; // ID of private clipboard format.
341: BOOL fStretchClipboardData = TRUE; // TRUE to default to stretch on paste.
342:
343: INT iNewFileType; // New file type the user selected.
344:
345: INT gcyBorder; // System border height.
346: INT gcyPropBar; // Height of PropBar window.
347:
348: WNDPROC lpfnPropBarDlgProc = NULL; // Proc inst. of PropBar dialog proc.
349: WNDPROC lpfnColorDlgProc = NULL; // Proc inst. of Color palette dlg proc.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.