[CRT] Massively improve performance of rand_s
[reactos.git] / base / applications / mspaint / precomp.h
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: The precompiled header
5 * COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
6 * Copyright 2018 Stanislav Motylkov <x86corez@gmail.com>
7 * Copyright 2021-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
8 */
9
10 #pragma once
11
12 #ifdef NDEBUG
13 #undef DBG
14 #undef _DEBUG
15 #endif
16
17 #include <windef.h>
18 #include <winbase.h>
19 #include <winuser.h>
20 #include <wingdi.h>
21 #include <tchar.h>
22 #include <atlbase.h>
23 #include <atlcom.h>
24 #include <atlpath.h>
25 #include <atlstr.h>
26 #include <atlwin.h>
27 #include <atltypes.h>
28 #include <windowsx.h>
29 #include <commdlg.h>
30 #include <commctrl.h>
31 #include <stdlib.h>
32 #define _USE_MATH_DEFINES /* for M_PI */
33 #include <math.h>
34 #include <shellapi.h>
35 #include <htmlhelp.h>
36 #include <strsafe.h>
37 #include <ui/CWaitCursor.h>
38
39 #include <debug.h>
40
41 /* CONSTANTS *******************************************************/
42
43 #define GRIP_SIZE 3
44 #define MIN_ZOOM 125
45 #define MAX_ZOOM 8000
46
47 #define MAX_LONG_PATH 512
48
49 #define WM_TOOLSMODELTOOLCHANGED (WM_APP + 0)
50 #define WM_TOOLSMODELSETTINGSCHANGED (WM_APP + 1)
51 #define WM_TOOLSMODELZOOMCHANGED (WM_APP + 2)
52 #define WM_PALETTEMODELCOLORCHANGED (WM_APP + 3)
53
54 enum HITTEST // hit
55 {
56 HIT_NONE = 0, // Nothing hit or outside
57 HIT_UPPER_LEFT,
58 HIT_UPPER_CENTER,
59 HIT_UPPER_RIGHT,
60 HIT_MIDDLE_LEFT,
61 HIT_MIDDLE_RIGHT,
62 HIT_LOWER_LEFT,
63 HIT_LOWER_CENTER,
64 HIT_LOWER_RIGHT,
65 HIT_BORDER,
66 HIT_INNER,
67 };
68
69 /* COMMON FUNCTIONS *************************************************/
70
71 void ShowOutOfMemory(void);
72 BOOL nearlyEqualPoints(INT x0, INT y0, INT x1, INT y1);
73 BOOL OpenMailer(HWND hWnd, LPCWSTR pszPathName);
74 void getBoundaryOfPtStack(RECT& rcBoundary, INT cPoints, const POINT *pPoints);
75
76 #define DEG2RAD(degree) (((degree) * M_PI) / 180)
77 #define RAD2DEG(radian) ((LONG)(((radian) * 180) / M_PI))
78
79 /* This simplifies checking and unchecking menu items */
80 #define CHECKED_IF(bChecked) \
81 ((bChecked) ? (MF_CHECKED | MF_BYCOMMAND) : (MF_UNCHECKED | MF_BYCOMMAND))
82
83 /* This simplifies enabling or graying menu items */
84 #define ENABLED_IF(bEnabled) \
85 ((bEnabled) ? (MF_ENABLED | MF_BYCOMMAND) : (MF_GRAYED | MF_BYCOMMAND))
86
87 template <typename T>
88 inline void Swap(T& a, T& b)
89 {
90 T tmp = a;
91 a = b;
92 b = tmp;
93 }
94
95 /* LOCAL INCLUDES ***************************************************/
96
97 #include "resource.h"
98 #include "drawing.h"
99 #include "dib.h"
100 #include "fullscreen.h"
101 #include "history.h"
102 #include "miniature.h"
103 #include "palette.h"
104 #include "palettemodel.h"
105 #include "registry.h"
106 #include "selectionmodel.h"
107 #include "sizebox.h"
108 #include "canvas.h"
109 #include "textedit.h"
110 #include "toolbox.h"
111 #include "toolsettings.h"
112 #include "toolsmodel.h"
113 #include "main.h"
114 #include "dialogs.h"
115 #include "atlimagedx.h"
116
117 /* GLOBAL VARIABLES *************************************************/
118
119 extern HINSTANCE g_hinstExe;
120
121 extern WCHAR g_szFileName[MAX_LONG_PATH];
122 extern BOOL g_isAFile;
123 extern BOOL g_imageSaved;
124 extern BOOL g_showGrid;
125 extern BOOL g_askBeforeEnlarging;
126
127 extern CMainWindow mainWindow;
128
129 extern CMirrorRotateDialog mirrorRotateDialog;
130 extern CAttributesDialog attributesDialog;
131 extern CStretchSkewDialog stretchSkewDialog;
132 extern CFontsDialog fontsDialog;
133
134 extern RegistrySettings registrySettings;
135 extern ImageModel imageModel;
136 extern ToolsModel toolsModel;
137 extern SelectionModel selectionModel;
138 extern PaletteModel paletteModel;
139
140 extern HWND g_hStatusBar;
141 extern float g_xDpi;
142 extern float g_yDpi;
143 extern INT g_fileSize;
144 extern SYSTEMTIME g_fileTime;
145
146 extern CFullscreenWindow fullscreenWindow;
147 extern CMiniatureWindow miniature;
148 extern CToolBox toolBoxContainer;
149 extern CToolSettingsWindow toolSettingsWindow;
150 extern CPaletteWindow paletteWindow;
151 extern CCanvasWindow canvasWindow;
152 extern CTextEditWindow textEditWindow;