Reactos
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
54enum 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
71void ShowOutOfMemory(void);
72BOOL nearlyEqualPoints(INT x0, INT y0, INT x1, INT y1);
73BOOL OpenMailer(HWND hWnd, LPCWSTR pszPathName);
74void 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
87template <typename T>
88inline 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
119extern HINSTANCE g_hinstExe;
120
121extern WCHAR g_szFileName[MAX_LONG_PATH];
122extern BOOL g_isAFile;
123extern BOOL g_imageSaved;
124extern BOOL g_showGrid;
125extern BOOL g_askBeforeEnlarging;
126
127extern CMainWindow mainWindow;
128
129extern CMirrorRotateDialog mirrorRotateDialog;
130extern CAttributesDialog attributesDialog;
131extern CStretchSkewDialog stretchSkewDialog;
132extern CFontsDialog fontsDialog;
133
134extern RegistrySettings registrySettings;
135extern ImageModel imageModel;
136extern ToolsModel toolsModel;
137extern SelectionModel selectionModel;
138extern PaletteModel paletteModel;
139
140extern HWND g_hStatusBar;
141extern float g_xDpi;
142extern float g_yDpi;
143extern INT g_fileSize;
144extern SYSTEMTIME g_fileTime;
145
146extern CFullscreenWindow fullscreenWindow;
147extern CMiniatureWindow miniature;
148extern CToolBox toolBoxContainer;
149extern CToolSettingsWindow toolSettingsWindow;
150extern CPaletteWindow paletteWindow;
151extern CCanvasWindow canvasWindow;
152extern CTextEditWindow textEditWindow;