1 /*
2 * PROJECT: ReactOS Picture and Fax Viewer
3 * LICENSE: GPL-2.0 (https://spdx.org/licenses/GPL-2.0)
4 * PURPOSE: Image file browsing and manipulation
5 * COPYRIGHT: Copyright Dmitry Chapyshev (dmitry@reactos.org)
6 * Copyright 2018-2023 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
7 */
8
9 #pragma once
10
11 #define WIN32_NO_STATUS
12 #define _INC_WINDOWS
13 #define COM_NO_WINDOWS_H
14 #define INITGUID
15
16 #include <windef.h>
17 #include <winbase.h>
18 #include <winnls.h>
19 #include <winreg.h>
20 #include <wingdi.h>
21 #include <wincon.h>
22 #include <objbase.h>
23 #include <gdiplus.h>
24 #include <shlwapi.h>
25 #include <strsafe.h>
26
27 #include <debug.h>
28
29 #include "resource.h"
30
31 extern HINSTANCE g_hInstance;
32 extern GpImage *g_pImage;
33
34 typedef struct
35 {
36 BOOL Maximized;
37 INT X;
38 INT Y;
39 INT Width;
40 INT Height;
41 } SHIMGVW_SETTINGS;
42
43 typedef struct tagSHIMGVW_FILENODE
44 {
45 WCHAR FileName[MAX_PATH];
46 struct tagSHIMGVW_FILENODE *Prev;
47 struct tagSHIMGVW_FILENODE *Next;
48 } SHIMGVW_FILENODE;
49
50 #define WC_PREVIEW L"ShImgVw:CPreviewWnd"
51 #define WC_ZOOM L"ShImgVw:CZoomWnd"
52
53 /* Animation */
54 typedef struct tagANIME
55 {
56 UINT m_nFrameIndex;
57 UINT m_nFrameCount;
58 UINT m_nLoopIndex;
59 UINT m_nLoopCount;
60 PropertyItem *m_pDelayItem;
61 HWND m_hwndTimer;
62 } ANIME, *PANIME;
63
64 void Anime_FreeInfo(PANIME pAnime);
65 BOOL Anime_LoadInfo(PANIME pAnime);
66 void Anime_SetTimerWnd(PANIME pAnime, HWND hwndTimer);
67 void Anime_SetFrameIndex(PANIME pAnime, UINT nFrameIndex);
68 void Anime_Start(PANIME pAnime, DWORD dwDelay);
69 void Anime_Pause(PANIME pAnime);
70 BOOL Anime_OnTimer(PANIME pAnime, WPARAM wParam);
71
QuickAlloc(SIZE_T cbSize,BOOL bZero)72 static inline LPVOID QuickAlloc(SIZE_T cbSize, BOOL bZero)
73 {
74 return HeapAlloc(GetProcessHeap(), (bZero ? HEAP_ZERO_MEMORY : 0), cbSize);
75 }
76
QuickFree(LPVOID ptr)77 static inline VOID QuickFree(LPVOID ptr)
78 {
79 HeapFree(GetProcessHeap(), 0, ptr);
80 }
81