1 /*
2  * PROJECT:     ReactOS VGA Font Editor
3  * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4  * PURPOSE:     Main header
5  * COPYRIGHT:   Copyright 2008 Colin Finck (colin@reactos.org)
6  */
7 
8 #ifndef __PRECOMP_H
9 #define __PRECOMP_H
10 
11 #include <windows.h>
12 #include <windowsx.h>
13 #include <commctrl.h>
14 #include <strsafe.h>
15 #include "resource.h"
16 #include "customwndclasses.h"
17 
18 #include "raw.h"
19 #include "cpi.h"
20 #include "psf.h"
21 
22 typedef enum
23 {
24     RAW,
25     CPI,
26     PSF
27 } VGAFONT_TYPE;
28 
29 typedef struct _VGAFONT
30 {
31     VGAFONT_TYPE FontType;
32     PVOID        FontPtr;
33 } VGAFONT, *PVGAFONT;
34 
35 // Forward declarations
36 typedef struct _FONT_WND_INFO FONT_WND_INFO, *PFONT_WND_INFO;
37 typedef struct _EDIT_GLYPH_INFO EDIT_GLYPH_INFO, *PEDIT_GLYPH_INFO;
38 
39 // Structure declarations
40 typedef struct _MAIN_WND_INFO
41 {
42     HWND hMainWnd;
43     HWND hMdiClient;
44     HMENU hMenu;
45     HWND hToolbar;
46     INT nCmdShow;
47 
48     HBITMAP hBoxBmp;
49     PFONT_WND_INFO CurrentFontWnd;
50     ULONG uDocumentCounter;
51 
52     PFONT_WND_INFO FirstFontWnd;
53     PFONT_WND_INFO LastFontWnd;
54 } MAIN_WND_INFO, *PMAIN_WND_INFO;
55 
56 typedef struct _FONT_OPEN_INFO
57 {
58     BOOL bCreateNew;
59     BOOL bBinaryFileOpened;
60     BOOL bModified;
61     PWSTR pszFileName;
62 } FONT_OPEN_INFO, *PFONT_OPEN_INFO;
63 
64 struct _FONT_WND_INFO
65 {
66     PMAIN_WND_INFO MainWndInfo;
67     PFONT_OPEN_INFO OpenInfo;
68     PBITMAP_FONT Font;
69 
70     HWND hSelf;
71     HWND hFontBoxesWnd;
72     UINT uSelectedCharacter;
73 
74     PFONT_WND_INFO PrevFontWnd;
75     PFONT_WND_INFO NextFontWnd;
76 
77     PEDIT_GLYPH_INFO FirstEditGlyphWnd;
78     PEDIT_GLYPH_INFO LastEditGlyphWnd;
79 };
80 
81 struct _EDIT_GLYPH_INFO
82 {
83     PFONT_WND_INFO FontWndInfo;
84 
85     UINT uCharacter;
86     UCHAR CharacterBits[8];
87 
88     HWND hSelf;
89     HWND hEdit;
90     HWND hPreview;
91     LONG lEditSpacing;
92 
93     PEDIT_GLYPH_INFO PrevEditGlyphWnd;
94     PEDIT_GLYPH_INFO NextEditGlyphWnd;
95 };
96 
97 #define ID_MDI_FIRSTCHILD             50000
98 
99 // Dimensions of the visual elements
100 #define CHARACTER_INFO_BOX_WIDTH      55
101 #define CHARACTER_INFO_BOX_HEIGHT     16
102 #define CHARACTER_BITMAP_BOX_HEIGHT   14
103 #define CHARACTER_BOX_WIDTH           (CHARACTER_INFO_BOX_WIDTH)
104 #define CHARACTER_BOX_HEIGHT          (CHARACTER_INFO_BOX_HEIGHT + CHARACTER_BITMAP_BOX_HEIGHT)
105 #define CHARACTER_BOX_PADDING         5
106 #define FONT_BOXES_WND_WIDTH          (CHARACTER_BOX_WIDTH * 16 + CHARACTER_BOX_PADDING * 15)
107 #define FONT_BOXES_WND_HEIGHT         (CHARACTER_BOX_HEIGHT * 16 + CHARACTER_BOX_PADDING * 15)
108 #define FONT_WND_MIN_WIDTH            (FONT_BOXES_WND_WIDTH + 25)
109 #define FONT_WND_MIN_HEIGHT           (FONT_BOXES_WND_HEIGHT + GetSystemMetrics(SM_CYCAPTION) + 25)
110 
111 // Custom return values
112 #define HITTEST_SEPARATOR             -1
113 
114 // Custom window messages
115 #define WM_USER_APPCLOSE              (WM_USER + 1)
116 
117 // Bitmap numbers
118 #define TOOLBAR_EDIT_GLYPH            0
119 #define TOOLBOX_PEN                   0
120 
121 
122 //
123 // Function prototypes
124 //
125 
126 // aboutdlg.c
127 INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
128 
129 // editglyphdlg.c
130 INT_PTR CALLBACK EditGlyphDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
131 BOOL InitEditGlyphWndClasses(VOID);
132 VOID UnInitEditGlyphWndClasses(VOID);
133 
134 // fontboxeswnd.c
135 VOID CreateFontBoxesWindow(PFONT_WND_INFO FontWndInfo);
136 BOOL InitFontBoxesWndClass(VOID);
137 VOID UnInitFontBoxesWndClass(VOID);
138 VOID GetCharacterRect(IN UINT uFontRow, IN UINT uFontColumn, OUT LPRECT CharacterRect);
139 VOID EditCurrentGlyph(PFONT_WND_INFO FontWndInfo);
140 
141 static __inline VOID
GetCharacterPosition(IN UINT uCharacter,OUT PUINT uFontRow,OUT PUINT uFontColumn)142 GetCharacterPosition(IN UINT uCharacter, OUT PUINT uFontRow, OUT PUINT uFontColumn)
143 {
144     *uFontRow = uCharacter / 16;
145     *uFontColumn = uCharacter % 16;
146 }
147 
148 // fontwnd.c
149 BOOL CreateFontWindow(PMAIN_WND_INFO MainWndInfo, PFONT_OPEN_INFO OpenInfo);
150 BOOL InitFontWndClass(VOID);
151 VOID UnInitFontWndClass(VOID);
152 
153 // main.c
154 extern PWSTR szAppName;
155 extern HINSTANCE hInstance;
156 extern HANDLE hProcessHeap;
157 extern UINT uCharacterClipboardFormat;
158 
159 // mainwnd.c
160 BOOL CreateMainWindow(IN INT nCmdShow, OUT PMAIN_WND_INFO* Info);
161 BOOL InitMainWndClass(VOID);
162 VOID UnInitMainWndClass(VOID);
163 VOID DoFileSave(IN PMAIN_WND_INFO Info, IN BOOL bSaveAs);
164 VOID SetToolbarFileButtonState(IN PMAIN_WND_INFO Info, BOOL bEnabled);
165 VOID SetPasteButtonState(IN PMAIN_WND_INFO Info);
166 
167 // misc.c
168 INT AllocAndLoadString(OUT PWSTR *lpTarget, IN UINT uID);
169 DWORD LoadAndFormatString(IN UINT uID, OUT PWSTR *lpTarget, ...);
170 VOID LocalizedError(IN UINT uID, ...);
171 
172 // opensave.c
173 VOID FileInitialize(HWND hwnd);
174 BOOL DoOpenFile(OUT PWSTR pszFileName);
175 BOOL DoSaveFile(IN PWSTR pszFileName);
176 
177 #endif
178