Reactos
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
22typedef enum
23{
24 RAW,
25 CPI,
26 PSF
27} VGAFONT_TYPE;
28
29typedef struct _VGAFONT
30{
31 VGAFONT_TYPE FontType;
32 PVOID FontPtr;
33} VGAFONT, *PVGAFONT;
34
35// Forward declarations
36typedef struct _FONT_WND_INFO FONT_WND_INFO, *PFONT_WND_INFO;
37typedef struct _EDIT_GLYPH_INFO EDIT_GLYPH_INFO, *PEDIT_GLYPH_INFO;
38
39// Structure declarations
40typedef 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
56typedef 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
64struct _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
81struct _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
127INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
128
129// editglyphdlg.c
130INT_PTR CALLBACK EditGlyphDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
131BOOL InitEditGlyphWndClasses(VOID);
132VOID UnInitEditGlyphWndClasses(VOID);
133
134// fontboxeswnd.c
135VOID CreateFontBoxesWindow(PFONT_WND_INFO FontWndInfo);
136BOOL InitFontBoxesWndClass(VOID);
137VOID UnInitFontBoxesWndClass(VOID);
138VOID GetCharacterRect(IN UINT uFontRow, IN UINT uFontColumn, OUT LPRECT CharacterRect);
139VOID EditCurrentGlyph(PFONT_WND_INFO FontWndInfo);
140
141static __inline VOID
142GetCharacterPosition(IN UINT uCharacter, OUT PUINT uFontRow, OUT PUINT uFontColumn)
143{
144 *uFontRow = uCharacter / 16;
145 *uFontColumn = uCharacter % 16;
146}
147
148// fontwnd.c
149BOOL CreateFontWindow(PMAIN_WND_INFO MainWndInfo, PFONT_OPEN_INFO OpenInfo);
150BOOL InitFontWndClass(VOID);
151VOID UnInitFontWndClass(VOID);
152
153// main.c
154extern PWSTR szAppName;
155extern HINSTANCE hInstance;
156extern HANDLE hProcessHeap;
157extern UINT uCharacterClipboardFormat;
158
159// mainwnd.c
160BOOL CreateMainWindow(IN INT nCmdShow, OUT PMAIN_WND_INFO* Info);
161BOOL InitMainWndClass(VOID);
162VOID UnInitMainWndClass(VOID);
163VOID DoFileSave(IN PMAIN_WND_INFO Info, IN BOOL bSaveAs);
164VOID SetToolbarFileButtonState(IN PMAIN_WND_INFO Info, BOOL bEnabled);
165VOID SetPasteButtonState(IN PMAIN_WND_INFO Info);
166
167// misc.c
168INT AllocAndLoadString(OUT PWSTR *lpTarget, IN UINT uID);
169DWORD LoadAndFormatString(IN UINT uID, OUT PWSTR *lpTarget, ...);
170VOID LocalizedError(IN UINT uID, ...);
171
172// opensave.c
173VOID FileInitialize(HWND hwnd);
174BOOL DoOpenFile(OUT PWSTR pszFileName);
175BOOL DoSaveFile(IN PWSTR pszFileName);
176
177#endif