ReactOS 0.4.15-dev-6669-g8227c5d
shimgvw.c File Reference
#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <winnls.h>
#include <winreg.h>
#include <wingdi.h>
#include <wincon.h>
#include <windowsx.h>
#include <objbase.h>
#include <commctrl.h>
#include <commdlg.h>
#include <gdiplus.h>
#include <tchar.h>
#include <shlobj.h>
#include <strsafe.h>
#include <shlwapi.h>
#include <shellapi.h>
#include <debug.h>
#include "shimgvw.h"
Include dependency graph for shimgvw.c:

Go to the source code of this file.

Classes

struct  TB_BUTTON_CONFIG
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define INITGUID
 
#define NDEBUG
 
#define MIN_ZOOM   ZoomSteps[0]
 
#define MAX_ZOOM   ZoomSteps[_countof(ZoomSteps)-1]
 
#define DEFINE_BTN_INFO(_name)    { TBICON_##_name, IDC_##_name, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }
 
#define DEFINE_BTN_SEPARATOR    { 15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0 }
 
#define DEFINE_BTN_CONFIG(_name)   { IDB_##_name, IDS_TOOLTIP_##_name }
 
#define ANIME_TIMER_ID   9999
 

Functions

static void Anime_FreeInfo (void)
 
static BOOL Anime_LoadInfo (void)
 
static void Anime_SetFrameIndex (UINT nFrameIndex)
 
DWORD Anime_GetFrameDelay (UINT nFrameIndex)
 
BOOL Anime_Step (DWORD *pdwDelay)
 
static void UpdateZoom (UINT NewZoom)
 
static void ZoomInOrOut (BOOL bZoomIn)
 
static void ResetZoom (void)
 
static void pLoadImage (LPCWSTR szOpenFileName)
 
static void pSaveImageAs (HWND hwnd)
 
static VOID pPrintImage (HWND hwnd)
 
static VOID EnableToolBarButtons (BOOL bEnable)
 
static VOID pLoadImageFromNode (SHIMGVW_FILENODE *node, HWND hwnd)
 
static SHIMGVW_FILENODEpBuildFileList (LPWSTR szFirstFile)
 
static VOID pFreeFileList (SHIMGVW_FILENODE *root)
 
static VOID ImageView_UpdateWindow (HWND hwnd)
 
static HBRUSH CreateCheckerBoardBrush (HDC hdc)
 
static VOID ImageView_DrawImage (HWND hwnd)
 
static BOOL ImageView_LoadSettings (VOID)
 
static VOID ImageView_SaveSettings (HWND hwnd)
 
static BOOL ImageView_CreateToolBar (HWND hwnd)
 
static void ImageView_OnTimer (HWND hwnd)
 
LRESULT CALLBACK ImageView_DispWndProc (HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
static VOID ImageView_InitControls (HWND hwnd)
 
static VOID ImageView_OnMouseWheel (HWND hwnd, INT x, INT y, INT zDelta, UINT fwKeys)
 
static VOID ImageView_OnSize (HWND hwnd, UINT state, INT cx, INT cy)
 
static LRESULT ImageView_Delete (HWND hwnd)
 
static LRESULT ImageView_Modify (HWND hwnd)
 
LRESULT CALLBACK ImageView_WndProc (HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
LONG WINAPI ImageView_CreateWindow (HWND hwnd, LPCWSTR szFileName)
 
VOID WINAPI ImageView_FullscreenW (HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow)
 
VOID WINAPI ImageView_Fullscreen (HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow)
 
VOID WINAPI ImageView_FullscreenA (HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow)
 
VOID WINAPI ImageView_PrintTo (HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow)
 
VOID WINAPI ImageView_PrintToA (HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow)
 
VOID WINAPI ImageView_PrintToW (HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow)
 
BOOL WINAPI DllMain (IN HINSTANCE hinstDLL, IN DWORD dwReason, IN LPVOID lpvReserved)
 

Variables

HINSTANCE hInstance
 
SHIMGVW_SETTINGS shiSettings
 
SHIMGVW_FILENODEcurrentFile
 
GpImageimage = NULL
 
WNDPROC PrevProc = NULL
 
HWND hDispWnd
 
HWND hToolBar
 
UINT ZoomPercents = 100
 
static const UINT ZoomSteps []
 
static const TBBUTTON Buttons []
 
static const TB_BUTTON_CONFIG BtnConfig []
 
UINT m_nFrameIndex = 0
 
UINT m_nFrameCount = 0
 
UINT m_nLoopIndex = 0
 
UINT m_nLoopCount = (UINT)-1
 
PropertyItemm_pDelayItem = NULL
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 10 of file shimgvw.c.

◆ ANIME_TIMER_ID

#define ANIME_TIMER_ID   9999

Definition at line 121 of file shimgvw.c.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 11 of file shimgvw.c.

◆ DEFINE_BTN_CONFIG

#define DEFINE_BTN_CONFIG (   _name)    { IDB_##_name, IDS_TOOLTIP_##_name }

Definition at line 94 of file shimgvw.c.

◆ DEFINE_BTN_INFO

#define DEFINE_BTN_INFO (   _name)     { TBICON_##_name, IDC_##_name, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }

Definition at line 64 of file shimgvw.c.

◆ DEFINE_BTN_SEPARATOR

#define DEFINE_BTN_SEPARATOR    { 15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0 }

Definition at line 67 of file shimgvw.c.

◆ INITGUID

#define INITGUID

Definition at line 12 of file shimgvw.c.

◆ MAX_ZOOM

#define MAX_ZOOM   ZoomSteps[_countof(ZoomSteps)-1]

Definition at line 55 of file shimgvw.c.

◆ MIN_ZOOM

#define MIN_ZOOM   ZoomSteps[0]

Definition at line 54 of file shimgvw.c.

◆ NDEBUG

#define NDEBUG

Definition at line 33 of file shimgvw.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 9 of file shimgvw.c.

Function Documentation

◆ Anime_FreeInfo()

static void Anime_FreeInfo ( void  )
static

Definition at line 123 of file shimgvw.c.

124{
125 if (m_pDelayItem)
126 {
129 }
130 m_nFrameIndex = 0;
131 m_nFrameCount = 0;
132 m_nLoopIndex = 0;
133 m_nLoopCount = (UINT)-1;
134}
#define free
Definition: debug_ros.c:5
#define NULL
Definition: types.h:112
unsigned int UINT
Definition: ndis.h:50
UINT m_nLoopCount
Definition: shimgvw.c:118
UINT m_nFrameIndex
Definition: shimgvw.c:115
PropertyItem * m_pDelayItem
Definition: shimgvw.c:119
UINT m_nLoopIndex
Definition: shimgvw.c:117
UINT m_nFrameCount
Definition: shimgvw.c:116

Referenced by Anime_LoadInfo(), and ImageView_CreateWindow().

◆ Anime_GetFrameDelay()

DWORD Anime_GetFrameDelay ( UINT  nFrameIndex)

Definition at line 210 of file shimgvw.c.

211{
212 if (nFrameIndex < m_nFrameCount && m_pDelayItem)
213 {
214 return ((DWORD *)m_pDelayItem->value)[m_nFrameIndex] * 10;
215 }
216 return 0;
217}
unsigned long DWORD
Definition: ntddk_ex.h:95

Referenced by Anime_Step().

◆ Anime_LoadInfo()

static BOOL Anime_LoadInfo ( void  )
static

Definition at line 136 of file shimgvw.c.

137{
138 GUID *dims;
139 UINT nDimCount = 0;
140 UINT cbItem;
141 UINT result;
142 PropertyItem *pItem;
143
146
147 if (!image)
148 return FALSE;
149
151 if (nDimCount)
152 {
153 dims = (GUID *)calloc(nDimCount, sizeof(GUID));
154 if (dims)
155 {
156 GdipImageGetFrameDimensionsList(image, dims, nDimCount);
159 free(dims);
160 }
161 }
162
163 result = 0;
165 cbItem = result;
166 if (cbItem)
167 {
168 m_pDelayItem = (PropertyItem *)malloc(cbItem);
170 }
171
172 result = 0;
174 cbItem = result;
175 if (cbItem)
176 {
177 pItem = (PropertyItem *)malloc(cbItem);
178 if (pItem)
179 {
180 if (GdipGetPropertyItem(image, PropertyTagLoopCount, cbItem, pItem) == Ok)
181 {
182 m_nLoopCount = *(WORD *)pItem->value;
183 }
184 free(pItem);
185 }
186 }
187
188 if (m_pDelayItem)
189 {
191 }
192
193 return m_pDelayItem != NULL;
194}
#define malloc
Definition: debug_ros.c:4
#define FALSE
Definition: types.h:117
GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID *dimensionID, UINT *count)
Definition: image.c:2913
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage *image, UINT *count)
Definition: image.c:2933
GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage *image, PROPID propid, UINT size, PropertyItem *buffer)
Definition: image.c:2682
GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage *image, PROPID propid, UINT *size)
Definition: image.c:2536
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage *image, GUID *dimensionIDs, UINT count)
Definition: image.c:2948
unsigned short WORD
Definition: ntddk_ex.h:93
#define PropertyTagFrameDelay
#define PropertyTagLoopCount
@ Ok
Definition: gdiplustypes.h:26
GLuint64EXT * result
Definition: glext.h:11304
#define calloc
Definition: rosglue.h:14
HWND hDispWnd
Definition: shimgvw.c:44
static void Anime_FreeInfo(void)
Definition: shimgvw.c:123
#define ANIME_TIMER_ID
Definition: shimgvw.c:121
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)

Referenced by pLoadImage().

◆ Anime_SetFrameIndex()

static void Anime_SetFrameIndex ( UINT  nFrameIndex)
static

Definition at line 196 of file shimgvw.c.

197{
198 if (nFrameIndex < m_nFrameCount)
199 {
200 GUID guid = FrameDimensionTime;
201 if (Ok != GdipImageSelectActiveFrame(image, &guid, nFrameIndex))
202 {
203 guid = FrameDimensionPage;
204 GdipImageSelectActiveFrame(image, &guid, nFrameIndex);
205 }
206 }
207 m_nFrameIndex = nFrameIndex;
208}
GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image, GDIPCONST GUID *dimensionID, UINT frame)
Definition: image.c:4350
const GUID * guid

Referenced by Anime_Step().

◆ Anime_Step()

BOOL Anime_Step ( DWORD pdwDelay)

Definition at line 219 of file shimgvw.c.

220{
221 *pdwDelay = INFINITE;
222 if (m_nLoopCount == (UINT)-1)
223 return FALSE;
224
226 {
230 return TRUE;
231 }
232
234 {
237 m_nFrameIndex = 0;
238 ++m_nLoopIndex;
239 return TRUE;
240 }
241
242 return FALSE;
243}
#define TRUE
Definition: types.h:120
#define INFINITE
Definition: serial.h:102
static void Anime_SetFrameIndex(UINT nFrameIndex)
Definition: shimgvw.c:196
DWORD Anime_GetFrameDelay(UINT nFrameIndex)
Definition: shimgvw.c:210

Referenced by ImageView_OnTimer().

◆ CreateCheckerBoardBrush()

static HBRUSH CreateCheckerBoardBrush ( HDC  hdc)
static

Definition at line 685 of file shimgvw.c.

686{
687 static const CHAR pattern[] =
688 "\x28\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x01\x00\x04\x00\x00\x00"
689 "\x00\x00\x80\x00\x00\x00\x23\x2E\x00\x00\x23\x2E\x00\x00\x10\x00\x00\x00"
690 "\x00\x00\x00\x00\x99\x99\x99\x00\xCC\xCC\xCC\x00\x00\x00\x00\x00\x00\x00"
691 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
692 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
693 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11"
694 "\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00"
695 "\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00"
696 "\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11"
697 "\x11\x11\x00\x00\x00\x00\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00"
698 "\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11"
699 "\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11"
700 "\x00\x00\x00\x00\x11\x11\x11\x11\x00\x00\x00\x00\x11\x11\x11\x11";
701
703}
GLubyte * pattern
Definition: glext.h:7787
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HBRUSH WINAPI CreateDIBPatternBrushPt(_In_ const VOID *pvPackedDIB, _In_ UINT uUsage)
char CHAR
Definition: xmlstorage.h:175

Referenced by ImageView_DrawImage().

◆ DllMain()

BOOL WINAPI DllMain ( IN HINSTANCE  hinstDLL,
IN DWORD  dwReason,
IN LPVOID  lpvReserved 
)

@DllMain

Core routine of the Utility Manager's library.

Parameters
[in]hDllInstanceThe entry point instance of the library.
[in]fdwReasonThe reason argument to indicate the motive DllMain is being called.
[in]lpvReservedReserved.
Returns
Returns TRUE when main call initialization has succeeded, FALSE otherwise.

Definition at line 1312 of file shimgvw.c.

1315{
1316 switch (dwReason)
1317 {
1318 case DLL_PROCESS_ATTACH:
1319 case DLL_THREAD_ATTACH:
1320 hInstance = hinstDLL;
1321 break;
1322 }
1323
1324 return TRUE;
1325}
DWORD dwReason
Definition: misc.cpp:154
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_THREAD_ATTACH
Definition: compat.h:132
HINSTANCE hInstance
Definition: shimgvw.c:38

◆ EnableToolBarButtons()

static VOID EnableToolBarButtons ( BOOL  bEnable)
static

Definition at line 499 of file shimgvw.c.

500{
503}
#define IDC_SAVEAS
Definition: resource.h:17
#define IDC_PRINT
Definition: fontview.h:14
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
HWND hToolBar
Definition: shimgvw.c:44
_In_ BOOL bEnable
Definition: winddi.h:3426
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by pLoadImageFromNode().

◆ ImageView_CreateToolBar()

static BOOL ImageView_CreateToolBar ( HWND  hwnd)
static

Definition at line 863 of file shimgvw.c.

864{
867 0, 0, 0, 0, hwnd,
868 0, hInstance, NULL);
869 if (hToolBar != NULL)
870 {
871 HIMAGELIST hImageList;
872
875
877 sizeof(Buttons[0]), 0);
878
880 if (hImageList == NULL) return FALSE;
881
882 for (UINT n = 0; n < _countof(BtnConfig); n++)
883 {
886 }
887
889 0, (LPARAM)hImageList));
890
892
893 return TRUE;
894 }
895
896 return FALSE;
897}
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
INT WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hBitmap, COLORREF clrMask)
Definition: imagelist.c:563
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
#define RGB(r, g, b)
Definition: precomp.h:62
GLdouble n
Definition: glext.h:7729
#define WS_CHILD
Definition: pedump.c:617
#define WS_VISIBLE
Definition: pedump.c:620
#define TB_ADDBUTTONS
Definition: commctrl.h:1271
#define TB_SETEXTENDEDSTYLE
Definition: commctrl.h:1190
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:989
#define CCS_BOTTOM
Definition: commctrl.h:2244
#define TB_BUTTONSTRUCTSIZE
Definition: commctrl.h:1134
#define TB_SETIMAGELIST
Definition: commctrl.h:1150
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS
Definition: commctrl.h:1013
#define TBSTYLE_FLAT
Definition: commctrl.h:992
#define TOOLBARCLASSNAME
Definition: commctrl.h:946
#define ILC_MASK
Definition: commctrl.h:351
#define ILC_COLOR24
Definition: commctrl.h:357
static const TBBUTTON Buttons[]
Definition: shimgvw.c:71
static const TB_BUTTON_CONFIG BtnConfig[]
Definition: shimgvw.c:96
#define TB_IMAGE_HEIGHT
Definition: shimgvw.h:4
#define TB_IMAGE_WIDTH
Definition: shimgvw.h:3
#define _countof(array)
Definition: sndvol32.h:68
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
#define CreateWindowEx
Definition: winuser.h:5745
#define IMAGE_BITMAP
Definition: winuser.h:211
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2172
#define LR_DEFAULTCOLOR
Definition: winuser.h:1081
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by ImageView_InitControls().

◆ ImageView_CreateWindow()

LONG WINAPI ImageView_CreateWindow ( HWND  hwnd,
LPCWSTR  szFileName 
)

Definition at line 1162 of file shimgvw.c.

1163{
1164 struct GdiplusStartupInput gdiplusStartupInput;
1165 ULONG_PTR gdiplusToken;
1166 WNDCLASSW WndClass = {0};
1167 WCHAR szBuf[512];
1168 WCHAR szInitialFile[MAX_PATH];
1169 HWND hMainWnd;
1170 MSG msg;
1171 HACCEL hKbdAccel;
1172 HRESULT hComRes;
1173 INITCOMMONCONTROLSEX Icc = { .dwSize = sizeof(Icc), .dwICC = ICC_WIN95_CLASSES };
1174
1176
1178 if (hComRes != S_OK && hComRes != S_FALSE)
1179 {
1180 DPRINT1("Warning, CoInitializeEx failed with code=%08X\n", (int)hComRes);
1181 }
1182
1184 {
1186 shiSettings.Left = 0;
1187 shiSettings.Top = 0;
1188 shiSettings.Right = 520;
1189 shiSettings.Bottom = 400;
1190 }
1191
1192 // Initialize GDI+
1193 gdiplusStartupInput.GdiplusVersion = 1;
1194 gdiplusStartupInput.DebugEventCallback = NULL;
1195 gdiplusStartupInput.SuppressBackgroundThread = FALSE;
1196 gdiplusStartupInput.SuppressExternalCodecs = FALSE;
1197
1198 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
1199 pLoadImage(szFileName);
1200
1201 // Create the window
1202 WndClass.lpszClassName = L"shimgvw_window";
1203 WndClass.lpfnWndProc = ImageView_WndProc;
1204 WndClass.hInstance = hInstance;
1205 WndClass.style = CS_HREDRAW | CS_VREDRAW;
1207 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
1208 WndClass.hbrBackground = NULL; /* less flicker */
1209
1210 if (!RegisterClassW(&WndClass)) return -1;
1211
1212 LoadStringW(hInstance, IDS_APPTITLE, szBuf, _countof(szBuf));
1213 hMainWnd = CreateWindowExW(0, L"shimgvw_window", szBuf,
1216 0, 0, NULL, NULL, hInstance, NULL);
1217
1218 // make sure the path has no quotes on it
1219 StringCbCopyW(szInitialFile, sizeof(szInitialFile), szFileName);
1220 PathUnquoteSpacesW(szInitialFile);
1221
1222 currentFile = pBuildFileList(szInitialFile);
1223 if (currentFile)
1224 {
1226 }
1227
1228 /* Create accelerator table for keystrokes */
1230
1231 // Show it
1234
1235 // Message Loop
1236 for (;;)
1237 {
1238 if (GetMessageW(&msg, NULL, 0, 0) <= 0)
1239 break;
1240
1241 if (!TranslateAcceleratorW(hMainWnd, hKbdAccel, &msg))
1242 {
1245 }
1246 }
1247
1248 /* Destroy accelerator table */
1249 DestroyAcceleratorTable(hKbdAccel);
1250
1252
1253 if (image)
1254 {
1256 image = NULL;
1257 }
1258
1260
1261 GdiplusShutdown(gdiplusToken);
1262
1263 /* Release COM resources */
1264 if (SUCCEEDED(hComRes))
1266
1267 return -1;
1268}
#define msg(x)
Definition: auth_time.c:54
#define IDS_APPTITLE
Definition: resource.h:3
#define DPRINT1
Definition: precomp.h:8
WCHAR WndClass[]
Definition: capicon.c:23
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
#define MAX_PATH
Definition: compat.h:34
GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
Definition: image.c:2155
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
#define IDI_APP_ICON
Definition: resource.h:4
#define IDR_ACCELERATOR
Definition: resource.h:91
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1034
Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
Definition: gdiplus.c:81
void WINAPI GdiplusShutdown(ULONG_PTR)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HWND hMainWnd
Definition: magnifier.c:32
#define L(x)
Definition: ntvdm.h:50
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_DISABLE_OLE1DDE
Definition: objbase.h:280
#define WS_CAPTION
Definition: pedump.c:624
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define ICC_WIN95_CLASSES
Definition: commctrl.h:66
SHIMGVW_SETTINGS shiSettings
Definition: shimgvw.c:39
LRESULT CALLBACK ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: shimgvw.c:1032
static BOOL ImageView_LoadSettings(VOID)
Definition: shimgvw.c:821
static SHIMGVW_FILENODE * pBuildFileList(LPWSTR szFirstFile)
Definition: shimgvw.c:547
SHIMGVW_FILENODE * currentFile
Definition: shimgvw.c:40
static void pLoadImage(LPCWSTR szOpenFileName)
Definition: shimgvw.c:359
static VOID pLoadImageFromNode(SHIMGVW_FILENODE *node, HWND hwnd)
Definition: shimgvw.c:506
static VOID pFreeFileList(SHIMGVW_FILENODE *root)
Definition: shimgvw.c:660
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
BOOL Maximized
Definition: shimgvw.h:10
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define S_FALSE
Definition: winerror.h:2357
#define CS_VREDRAW
Definition: winuser.h:653
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define CS_HREDRAW
Definition: winuser.h:648
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define IDC_ARROW
Definition: winuser.h:682
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI UpdateWindow(_In_ HWND)
#define LoadCursor
Definition: winuser.h:5802
#define CW_USEDEFAULT
Definition: winuser.h:225
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define SW_SHOW
Definition: winuser.h:769
BOOL WINAPI DestroyAcceleratorTable(_In_ HACCEL)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2044
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ImageView_Fullscreen(), ImageView_FullscreenA(), and ImageView_FullscreenW().

◆ ImageView_Delete()

static LRESULT ImageView_Delete ( HWND  hwnd)
static

Definition at line 983 of file shimgvw.c.

984{
985 DPRINT1("ImageView_Delete: unimplemented.\n");
986 return 0;
987}

Referenced by ImageView_WndProc().

◆ ImageView_DispWndProc()

LRESULT CALLBACK ImageView_DispWndProc ( HWND  hwnd,
UINT  Message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 913 of file shimgvw.c.

914{
915 switch (Message)
916 {
917 case WM_PAINT:
918 {
920 return 0L;
921 }
922 case WM_TIMER:
923 {
924 if (wParam == ANIME_TIMER_ID)
925 {
927 return 0;
928 }
929 break;
930 }
931 }
933}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static const WCHAR Message[]
Definition: register.c:74
WNDPROC PrevProc
Definition: shimgvw.c:42
static VOID ImageView_DrawImage(HWND hwnd)
Definition: shimgvw.c:706
static void ImageView_OnTimer(HWND hwnd)
Definition: shimgvw.c:899
#define WM_PAINT
Definition: winuser.h:1610
#define WM_TIMER
Definition: winuser.h:1732
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by ImageView_InitControls().

◆ ImageView_DrawImage()

static VOID ImageView_DrawImage ( HWND  hwnd)
static

Definition at line 706 of file shimgvw.c.

707{
708 GpGraphics *graphics;
709 UINT ImageWidth, ImageHeight;
710 INT ZoomedWidth, ZoomedHeight, x, y;
711 PAINTSTRUCT ps;
712 RECT rect, margin;
713 HDC hdc;
714 HBRUSH white;
715 HGDIOBJ hbrOld;
716 UINT uFlags;
717 WCHAR szText[128];
718 HGDIOBJ hFontOld;
719
720 hdc = BeginPaint(hwnd, &ps);
721 if (!hdc)
722 {
723 DPRINT1("BeginPaint() failed\n");
724 return;
725 }
726
727 GdipCreateFromHDC(hdc, &graphics);
728 if (!graphics)
729 {
730 DPRINT1("GdipCreateFromHDC() failed\n");
731 return;
732 }
733
736
737 if (image == NULL)
738 {
739 FillRect(hdc, &rect, white);
740
741 LoadStringW(hInstance, IDS_NOPREVIEW, szText, _countof(szText));
742
743 SetTextColor(hdc, RGB(0, 0, 0));
745
749 SelectObject(hdc, hFontOld);
750 }
751 else
752 {
753 GdipGetImageWidth(image, &ImageWidth);
754 GdipGetImageHeight(image, &ImageHeight);
755
756 ZoomedWidth = (ImageWidth * ZoomPercents) / 100;
757 ZoomedHeight = (ImageHeight * ZoomPercents) / 100;
758
759 x = (rect.right - ZoomedWidth) / 2;
760 y = (rect.bottom - ZoomedHeight) / 2;
761
762 // Fill top part
763 margin = rect;
764 margin.bottom = y - 1;
765 FillRect(hdc, &margin, white);
766 // Fill bottom part
767 margin.top = y + ZoomedHeight + 1;
768 margin.bottom = rect.bottom;
769 FillRect(hdc, &margin, white);
770 // Fill left part
771 margin.top = y - 1;
772 margin.bottom = y + ZoomedHeight + 1;
773 margin.right = x - 1;
774 FillRect(hdc, &margin, white);
775 // Fill right part
776 margin.left = x + ZoomedWidth + 1;
777 margin.right = rect.right;
778 FillRect(hdc, &margin, white);
779
780 DPRINT("x = %d, y = %d, ImageWidth = %u, ImageHeight = %u\n");
781 DPRINT("rect.right = %ld, rect.bottom = %ld\n", rect.right, rect.bottom);
782 DPRINT("ZoomPercents = %d, ZoomedWidth = %d, ZoomedHeight = %d\n",
783 ZoomPercents, ZoomedWidth, ZoomedWidth);
784
785 if (ZoomPercents % 100 == 0)
786 {
789 }
790 else
791 {
794 }
795
796 uFlags = 0;
798
800 {
801 HBRUSH hbr = CreateCheckerBoardBrush(hdc);
802 hbrOld = SelectObject(hdc, hbr);
803 Rectangle(hdc, x - 1, y - 1, x + ZoomedWidth + 1, y + ZoomedHeight + 1);
804 SelectObject(hdc, hbrOld);
805 DeleteObject(hbr);
806 }
807 else
808 {
810 Rectangle(hdc, x - 1, y - 1, x + ZoomedWidth + 1, y + ZoomedHeight + 1);
811 SelectObject(hdc, hbrOld);
812 }
813
814 GdipDrawImageRectI(graphics, image, x, y, ZoomedWidth, ZoomedHeight);
815 }
816 GdipDeleteGraphics(graphics);
817 EndPaint(hwnd, &ps);
818}
UINT uFlags
Definition: api.c:59
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
Definition: graphics.c:2395
GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics *graphics, GpImage *image, INT x, INT y, INT width, INT height)
Definition: graphics.c:3561
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
Definition: graphics.c:2581
GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics *graphics, InterpolationMode mode)
Definition: graphics.c:6143
GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode mode)
Definition: graphics.c:6289
GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags)
Definition: image.c:5314
GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width)
Definition: image.c:2390
GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height)
Definition: image.c:2287
#define IDS_NOPREVIEW
Definition: resource.h:62
pKey DeleteObject()
@ SmoothingModeNone
Definition: gdiplusenums.h:126
@ SmoothingModeHighQuality
Definition: gdiplusenums.h:125
@ ImageFlagsHasTranslucent
Definition: gdiplusenums.h:336
@ ImageFlagsHasAlpha
Definition: gdiplusenums.h:335
@ InterpolationModeHighQualityBilinear
Definition: gdiplusenums.h:149
@ InterpolationModeNearestNeighbor
Definition: gdiplusenums.h:148
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:16
UINT ZoomPercents
Definition: shimgvw.c:47
static HBRUSH CreateCheckerBoardBrush(HDC hdc)
Definition: shimgvw.c:685
#define DPRINT
Definition: sndvol32.h:71
& rect
Definition: startmenu.cpp:1413
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int32_t INT
Definition: typedefs.h:58
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define DEFAULT_GUI_FONT
Definition: wingdi.h:909
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
#define TRANSPARENT
Definition: wingdi.h:950
#define WHITE_BRUSH
Definition: wingdi.h:902
#define NULL_BRUSH
Definition: wingdi.h:901
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
#define DT_NOPREFIX
Definition: winuser.h:537
#define DT_CENTER
Definition: winuser.h:527
#define DT_SINGLELINE
Definition: winuser.h:540
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define DT_VCENTER
Definition: winuser.h:543
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)

Referenced by ImageView_DispWndProc().

◆ ImageView_Fullscreen()

VOID WINAPI ImageView_Fullscreen ( HWND  hwnd,
HINSTANCE  hInst,
LPCWSTR  path,
int  nShow 
)

Definition at line 1277 of file shimgvw.c.

1278{
1280}
LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPCWSTR szFileName)
Definition: shimgvw.c:1162

◆ ImageView_FullscreenA()

VOID WINAPI ImageView_FullscreenA ( HWND  hwnd,
HINSTANCE  hInst,
LPCSTR  path,
int  nShow 
)

Definition at line 1283 of file shimgvw.c.

1284{
1285 WCHAR szFile[MAX_PATH];
1286
1287 if (MultiByteToWideChar(CP_ACP, 0, path, -1, szFile, _countof(szFile)))
1288 {
1290 }
1291}
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110

◆ ImageView_FullscreenW()

VOID WINAPI ImageView_FullscreenW ( HWND  hwnd,
HINSTANCE  hInst,
LPCWSTR  path,
int  nShow 
)

Definition at line 1271 of file shimgvw.c.

1272{
1274}

◆ ImageView_InitControls()

static VOID ImageView_InitControls ( HWND  hwnd)
static

Definition at line 936 of file shimgvw.c.

937{
941
943
946 0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
947
950
952}
#define WC_STATIC
Definition: commctrl.h:4682
static BOOL ImageView_CreateToolBar(HWND hwnd)
Definition: shimgvw.c:863
LRESULT CALLBACK ImageView_DispWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: shimgvw.c:913
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
#define SetClassLongPtr
Definition: winuser.h:5838
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2896
#define SW_MAXIMIZE
Definition: winuser.h:766
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define GCL_STYLE
Definition: winuser.h:665

Referenced by ImageView_WndProc().

◆ ImageView_LoadSettings()

static BOOL ImageView_LoadSettings ( VOID  )
static

Definition at line 821 of file shimgvw.c.

822{
823 HKEY hKey;
825 LONG nError;
826
827 nError = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\ReactOS\\shimgvw", 0, KEY_READ, &hKey);
828 if (nError)
829 return FALSE;
830
831 dwSize = sizeof(shiSettings);
832 nError = RegQueryValueExW(hKey, L"Settings", NULL, NULL, (LPBYTE)&shiSettings, &dwSize);
834
835 return !nError;
836}
#define RegCloseKey(hKey)
Definition: registry.h:47
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3353
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4118
FxAutoRegKey hKey
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_READ
Definition: nt_native.h:1023
long LONG
Definition: pedump.c:60
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by ImageView_CreateWindow().

◆ ImageView_Modify()

static LRESULT ImageView_Modify ( HWND  hwnd)
static

Definition at line 990 of file shimgvw.c.

991{
992 int nChars = GetFullPathNameW(currentFile->FileName, 0, NULL, NULL);
993 LPWSTR pszPathName;
995
996 if (!nChars)
997 {
998 DPRINT1("ImageView_Modify: failed to get full path name.\n");
999 return 1;
1000 }
1001
1002 pszPathName = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, nChars * sizeof(WCHAR));
1003 if (pszPathName == NULL)
1004 {
1005 DPRINT1("HeapAlloc() failed in ImageView_Modify()\n");
1006 return 1;
1007 }
1008
1009 GetFullPathNameW(currentFile->FileName, nChars, pszPathName, NULL);
1010
1011 sei.cbSize = sizeof(sei);
1012 sei.fMask = 0;
1013 sei.hwnd = NULL;
1014 sei.lpVerb = L"edit";
1015 sei.lpFile = pszPathName;
1016 sei.lpParameters = NULL;
1017 sei.lpDirectory = NULL;
1018 sei.nShow = SW_SHOWNORMAL;
1019 sei.hInstApp = NULL;
1020
1021 if (!ShellExecuteExW(&sei))
1022 {
1023 DPRINT1("ImageView_Modify: ShellExecuteExW() failed with code %08X\n", (int)GetLastError());
1024 }
1025
1026 HeapFree(GetProcessHeap(), 0, pszPathName);
1027
1028 return 0;
1029}
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2368
WCHAR FileName[MAX_PATH]
Definition: shimgvw.h:19
LPCWSTR lpDirectory
Definition: shellapi.h:331
HINSTANCE hInstApp
Definition: shellapi.h:333
LPCWSTR lpParameters
Definition: shellapi.h:330
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define SW_SHOWNORMAL
Definition: winuser.h:764
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by ImageView_WndProc().

◆ ImageView_OnMouseWheel()

static VOID ImageView_OnMouseWheel ( HWND  hwnd,
INT  x,
INT  y,
INT  zDelta,
UINT  fwKeys 
)
static

Definition at line 955 of file shimgvw.c.

956{
957 if (zDelta != 0)
958 {
959 ZoomInOrOut(zDelta > 0);
960 }
961}
static void ZoomInOrOut(BOOL bZoomIn)
Definition: shimgvw.c:275

Referenced by ImageView_WndProc().

◆ ImageView_OnSize()

static VOID ImageView_OnSize ( HWND  hwnd,
UINT  state,
INT  cx,
INT  cy 
)
static

Definition at line 964 of file shimgvw.c.

965{
966 RECT rc;
967
969
971
972 MoveWindow(hDispWnd, 0, 0, cx, cy - (rc.bottom - rc.top), TRUE);
973
974 /* is it maximized or restored? */
976 {
977 /* reset zoom */
978 ResetZoom();
979 }
980}
static int state
Definition: maze.c:121
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
#define TB_AUTOSIZE
Definition: commctrl.h:1137
_Out_opt_ int * cx
Definition: commctrl.h:585
static void ResetZoom(void)
Definition: shimgvw.c:314
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define SIZE_MAXIMIZED
Definition: winuser.h:2497
#define SIZE_RESTORED
Definition: winuser.h:2495

Referenced by ImageView_WndProc().

◆ ImageView_OnTimer()

static void ImageView_OnTimer ( HWND  hwnd)
static

Definition at line 899 of file shimgvw.c.

900{
901 DWORD dwDelay;
902
905
906 if (Anime_Step(&dwDelay))
907 {
908 SetTimer(hwnd, ANIME_TIMER_ID, dwDelay, NULL);
909 }
910}
BOOL Anime_Step(DWORD *pdwDelay)
Definition: shimgvw.c:219
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)

Referenced by ImageView_DispWndProc().

◆ ImageView_PrintTo()

VOID WINAPI ImageView_PrintTo ( HWND  hwnd,
HINSTANCE  hInst,
LPCWSTR  path,
int  nShow 
)

Definition at line 1294 of file shimgvw.c.

1295{
1296 DPRINT("ImageView_PrintTo() not implemented\n");
1297}

◆ ImageView_PrintToA()

VOID WINAPI ImageView_PrintToA ( HWND  hwnd,
HINSTANCE  hInst,
LPCSTR  path,
int  nShow 
)

Definition at line 1300 of file shimgvw.c.

1301{
1302 DPRINT("ImageView_PrintToA() not implemented\n");
1303}

◆ ImageView_PrintToW()

VOID WINAPI ImageView_PrintToW ( HWND  hwnd,
HINSTANCE  hInst,
LPCWSTR  path,
int  nShow 
)

Definition at line 1306 of file shimgvw.c.

1307{
1308 DPRINT("ImageView_PrintToW() not implemented\n");
1309}

◆ ImageView_SaveSettings()

static VOID ImageView_SaveSettings ( HWND  hwnd)
static

Definition at line 839 of file shimgvw.c.

840{
842 HKEY hKey;
843
845 wp.length = sizeof(WINDOWPLACEMENT);
847
853
854 if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\ReactOS\\shimgvw"), 0, NULL,
856 {
857 RegSetValueEx(hKey, _T("Settings"), 0, REG_BINARY, (LPBYTE)&shiSettings, sizeof(SHIMGVW_SETTINGS));
859 }
860}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define REG_BINARY
Definition: nt_native.h:1496
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
RECT rcNormalPosition
Definition: winuser.h:3285
#define _T(x)
Definition: vfdio.h:22
#define RegSetValueEx
Definition: winreg.h:533
#define RegCreateKeyEx
Definition: winreg.h:501
#define SW_HIDE
Definition: winuser.h:762
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
BOOL WINAPI IsZoomed(_In_ HWND)
#define WPF_RESTORETOMAXIMIZED
Definition: winuser.h:2522
struct _WINDOWPLACEMENT WINDOWPLACEMENT

Referenced by ImageView_WndProc().

◆ ImageView_UpdateWindow()

static VOID ImageView_UpdateWindow ( HWND  hwnd)
static

Definition at line 679 of file shimgvw.c.

680{
683}

Referenced by ImageView_WndProc().

◆ ImageView_WndProc()

LRESULT CALLBACK ImageView_WndProc ( HWND  hwnd,
UINT  Message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1032 of file shimgvw.c.

1033{
1034 switch (Message)
1035 {
1036 case WM_CREATE:
1037 {
1039 return 0L;
1040 }
1041
1042 case WM_COMMAND:
1043 {
1044 switch (LOWORD(wParam))
1045 {
1046 case IDC_PREV_PIC:
1049 break;
1050
1051 case IDC_NEXT_PIC:
1054 break;
1055
1056 case IDC_BEST_FIT:
1057 DPRINT1("IDC_BEST_FIT unimplemented\n");
1058 break;
1059
1060 case IDC_REAL_SIZE:
1061 UpdateZoom(100);
1062 return 0;
1063
1064 case IDC_SLIDE_SHOW:
1065 DPRINT1("IDC_SLIDE_SHOW unimplemented\n");
1066 break;
1067
1068 case IDC_ZOOM_IN:
1070 break;
1071
1072 case IDC_ZOOM_OUT:
1074 break;
1075
1076 case IDC_SAVEAS:
1078 break;
1079
1080 case IDC_PRINT:
1082 break;
1083
1084 case IDC_ROT_CLOCKW:
1085 if (image)
1086 {
1089 }
1090 break;
1091
1092 case IDC_ROT_COUNCW:
1093 if (image)
1094 {
1097 }
1098 break;
1099
1100 case IDC_DELETE:
1101 return ImageView_Delete(hwnd);
1102
1103 case IDC_MODIFY:
1104 return ImageView_Modify(hwnd);
1105 }
1106 }
1107 break;
1108
1109 case WM_MOUSEWHEEL:
1113 break;
1114
1115 case WM_NOTIFY:
1116 {
1117 LPNMHDR pnmhdr = (LPNMHDR)lParam;
1118
1119 switch (pnmhdr->code)
1120 {
1121 case TTN_GETDISPINFO:
1122 {
1123 LPTOOLTIPTEXTW lpttt;
1124
1125 lpttt = (LPTOOLTIPTEXTW)lParam;
1126 lpttt->hinst = hInstance;
1127
1128 lpttt->lpszText = MAKEINTRESOURCEW(BtnConfig[lpttt->hdr.idFrom - IDC_TOOL_BASE].ids);
1129 return 0;
1130 }
1131 }
1132 break;
1133 }
1134 case WM_SIZING:
1135 {
1136 LPRECT pRect = (LPRECT)lParam;
1137 if (pRect->right-pRect->left < 350)
1138 pRect->right = pRect->left + 350;
1139
1140 if (pRect->bottom-pRect->top < 290)
1141 pRect->bottom = pRect->top + 290;
1142 return TRUE;
1143 }
1144 case WM_SIZE:
1145 {
1147 return 0;
1148 }
1149 case WM_DESTROY:
1150 {
1153 PostQuitMessage(0);
1154 break;
1155 }
1156 }
1157
1159}
GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage *image, RotateFlipType type)
Definition: image.c:5406
#define IDC_ZOOM_IN
Definition: resource.h:34
#define IDC_SLIDE_SHOW
Definition: resource.h:33
#define IDC_ROT_COUNCW
Definition: resource.h:37
#define IDC_REAL_SIZE
Definition: resource.h:32
#define IDC_MODIFY
Definition: resource.h:41
#define IDC_NEXT_PIC
Definition: resource.h:30
#define IDC_PREV_PIC
Definition: resource.h:29
#define IDC_BEST_FIT
Definition: resource.h:31
#define IDC_DELETE
Definition: resource.h:38
#define IDC_ZOOM_OUT
Definition: resource.h:35
#define IDC_ROT_CLOCKW
Definition: resource.h:36
#define IDC_TOOL_BASE
Definition: resource.h:27
@ Rotate270FlipNone
@ Rotate90FlipNone
#define LOWORD(l)
Definition: pedump.c:82
short SHORT
Definition: pedump.c:59
#define LPTOOLTIPTEXTW
Definition: commctrl.h:1887
#define TTN_GETDISPINFO
Definition: commctrl.h:1878
#define WM_NOTIFY
Definition: richedit.h:61
static VOID ImageView_InitControls(HWND hwnd)
Definition: shimgvw.c:936
static LRESULT ImageView_Modify(HWND hwnd)
Definition: shimgvw.c:990
static VOID ImageView_SaveSettings(HWND hwnd)
Definition: shimgvw.c:839
static VOID ImageView_OnSize(HWND hwnd, UINT state, INT cx, INT cy)
Definition: shimgvw.c:964
static void pSaveImageAs(HWND hwnd)
Definition: shimgvw.c:384
static LRESULT ImageView_Delete(HWND hwnd)
Definition: shimgvw.c:983
static VOID ImageView_UpdateWindow(HWND hwnd)
Definition: shimgvw.c:679
static VOID ImageView_OnMouseWheel(HWND hwnd, INT x, INT y, INT zDelta, UINT fwKeys)
Definition: shimgvw.c:955
static void UpdateZoom(UINT NewZoom)
Definition: shimgvw.c:245
static VOID pPrintImage(HWND hwnd)
Definition: shimgvw.c:493
struct SHIMGVW_FILENODE_INTERNAL * Prev
Definition: shimgvw.h:20
struct SHIMGVW_FILENODE_INTERNAL * Next
Definition: shimgvw.h:21
UINT code
Definition: winuser.h:3149
#define WM_MOUSEWHEEL
Definition: treelist.c:96
#define HIWORD(l)
Definition: typedefs.h:247
#define LPRECT
Definition: precomp.h:28
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1598
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1601
#define WM_COMMAND
Definition: winuser.h:1730
struct tagNMHDR * LPNMHDR
#define WM_SIZING
Definition: winuser.h:1797
#define WM_DESTROY
Definition: winuser.h:1599

Referenced by ImageView_CreateWindow().

◆ pBuildFileList()

static SHIMGVW_FILENODE * pBuildFileList ( LPWSTR  szFirstFile)
static

Definition at line 547 of file shimgvw.c.

548{
549 HANDLE hFindHandle;
550 WCHAR *extension;
551 WCHAR szSearchPath[MAX_PATH];
552 WCHAR szSearchMask[MAX_PATH];
553 WCHAR szFileTypes[MAX_PATH];
554 WIN32_FIND_DATAW findData;
555 SHIMGVW_FILENODE *currentNode = NULL;
557 SHIMGVW_FILENODE *conductor = NULL;
558 ImageCodecInfo *codecInfo;
559 UINT num;
560 UINT size;
561 UINT j;
562
563 StringCbCopyW(szSearchPath, sizeof(szSearchPath), szFirstFile);
564 PathRemoveFileSpecW(szSearchPath);
565
567 codecInfo = malloc(size);
568 if (!codecInfo)
569 {
570 DPRINT1("malloc() failed in pLoadFileList()\n");
571 return NULL;
572 }
573
574 GdipGetImageDecoders(num, size, codecInfo);
575
576 root = malloc(sizeof(SHIMGVW_FILENODE));
577 if (!root)
578 {
579 DPRINT1("malloc() failed in pLoadFileList()\n");
580 free(codecInfo);
581 return NULL;
582 }
583
584 conductor = root;
585
586 for (j = 0; j < num; ++j)
587 {
588 StringCbCopyW(szFileTypes, sizeof(szFileTypes), codecInfo[j].FilenameExtension);
589
590 extension = wcstok(szFileTypes, L";");
591 while (extension != NULL)
592 {
593 PathCombineW(szSearchMask, szSearchPath, extension);
594
595 hFindHandle = FindFirstFileW(szSearchMask, &findData);
596 if (hFindHandle != INVALID_HANDLE_VALUE)
597 {
598 do
599 {
600 PathCombineW(conductor->FileName, szSearchPath, findData.cFileName);
601
602 // compare the name of the requested file with the one currently found.
603 // if the name matches, the current node is returned by the function.
604 if (wcscmp(szFirstFile, conductor->FileName) == 0)
605 {
606 currentNode = conductor;
607 }
608
609 conductor->Next = malloc(sizeof(SHIMGVW_FILENODE));
610
611 // if malloc fails, make circular what we have and return it
612 if (!conductor->Next)
613 {
614 DPRINT1("malloc() failed in pLoadFileList()\n");
615
616 conductor->Next = root;
617 root->Prev = conductor;
618
619 FindClose(hFindHandle);
620 free(codecInfo);
621 return conductor;
622 }
623
624 conductor->Next->Prev = conductor;
625 conductor = conductor->Next;
626 }
627 while (FindNextFileW(hFindHandle, &findData) != 0);
628
629 FindClose(hFindHandle);
630 }
631
632 extension = wcstok(NULL, L";");
633 }
634 }
635
636 // we now have a node too much in the list. In case the requested file was not found,
637 // we use this node to store the name of it, otherwise we free it.
638 if (currentNode == NULL)
639 {
640 StringCchCopyW(conductor->FileName, MAX_PATH, szFirstFile);
641 currentNode = conductor;
642 }
643 else
644 {
645 conductor = conductor->Prev;
646 free(conductor->Next);
647 }
648
649 // link the last node with the first one to make the list circular
650 conductor->Next = root;
651 root->Prev = conductor;
652 conductor = currentNode;
653
654 free(codecInfo);
655
656 return conductor;
657}
struct _root root
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT *numDecoders, UINT *size)
Definition: image.c:4994
GpStatus WINGDIPAPI GdipGetImageDecoders(UINT numDecoders, UINT size, ImageCodecInfo *decoders)
Definition: image.c:5018
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:629
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194
GLsizeiptr size
Definition: glext.h:5919
GLuint GLuint num
Definition: glext.h:9618
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP wchar_t *__cdecl wcstok(_Inout_opt_z_ wchar_t *_Str, _In_z_ const wchar_t *_Delim)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149

Referenced by ImageView_CreateWindow().

◆ pFreeFileList()

static VOID pFreeFileList ( SHIMGVW_FILENODE root)
static

Definition at line 660 of file shimgvw.c.

661{
662 SHIMGVW_FILENODE *conductor;
663
664 if (!root)
665 return;
666
667 root->Prev->Next = NULL;
668 root->Prev = NULL;
669
670 while (root)
671 {
672 conductor = root;
673 root = conductor->Next;
674 free(conductor);
675 }
676}

Referenced by ImageView_CreateWindow().

◆ pLoadImage()

static void pLoadImage ( LPCWSTR  szOpenFileName)
static

Definition at line 359 of file shimgvw.c.

360{
361 /* check file presence */
362 if (GetFileAttributesW(szOpenFileName) == 0xFFFFFFFF)
363 {
364 DPRINT1("File %s not found!\n", szOpenFileName);
365 return;
366 }
367
368 /* load now */
369 GdipLoadImageFromFile(szOpenFileName, &image);
370 if (!image)
371 {
372 DPRINT1("GdipLoadImageFromFile() failed\n");
373 return;
374 }
376
377 if (szOpenFileName && szOpenFileName[0])
378 SHAddToRecentDocs(SHARD_PATHW, szOpenFileName);
379
380 /* Reset zoom and redraw display */
381 ResetZoom();
382}
GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR *filename, GpImage **image)
Definition: image.c:2976
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:809
static BOOL Anime_LoadInfo(void)
Definition: shimgvw.c:136
#define SHARD_PATHW
Definition: shlobj.h:1107

Referenced by ImageView_CreateWindow(), and pLoadImageFromNode().

◆ pLoadImageFromNode()

static VOID pLoadImageFromNode ( SHIMGVW_FILENODE node,
HWND  hwnd 
)
static

Definition at line 506 of file shimgvw.c.

507{
508 WCHAR szTitleBuf[800];
509 WCHAR szResStr[512];
510 LPWSTR pchFileTitle;
511
512 if (image)
513 {
515 image = NULL;
516 }
517
518 if (node == NULL)
519 {
521 return;
522 }
523
524 pLoadImage(node->FileName);
525
526 LoadStringW(hInstance, IDS_APPTITLE, szResStr, _countof(szResStr));
527
528 pchFileTitle = PathFindFileNameW(node->FileName);
529 if (pchFileTitle && *pchFileTitle)
530 {
531 StringCbPrintfW(szTitleBuf, sizeof(szTitleBuf),
532 L"%ls%ls%ls", szResStr, L" - ", pchFileTitle);
533 SetWindowTextW(hwnd, szTitleBuf);
534 }
535 else
536 {
537 SetWindowTextW(hwnd, szResStr);
538 }
539
541
542 /* Redraw the display window */
544}
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
static VOID EnableToolBarButtons(BOOL bEnable)
Definition: shimgvw.c:499
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
Definition: dlist.c:348
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)

Referenced by ImageView_CreateWindow(), and ImageView_WndProc().

◆ pPrintImage()

static VOID pPrintImage ( HWND  hwnd)
static

Definition at line 493 of file shimgvw.c.

494{
495 /* FIXME */
496}

Referenced by ImageView_WndProc().

◆ pSaveImageAs()

static void pSaveImageAs ( HWND  hwnd)
static

Definition at line 384 of file shimgvw.c.

385{
387 ImageCodecInfo *codecInfo;
388 WCHAR szSaveFileName[MAX_PATH];
389 WCHAR *szFilterMask;
390 GUID rawFormat;
391 UINT num;
392 UINT size;
393 size_t sizeRemain;
394 UINT j;
395 WCHAR *c;
396
397 if (image == NULL)
398 return;
399
401 codecInfo = malloc(size);
402 if (!codecInfo)
403 {
404 DPRINT1("malloc() failed in pSaveImageAs()\n");
405 return;
406 }
407
408 GdipGetImageEncoders(num, size, codecInfo);
409 GdipGetImageRawFormat(image, &rawFormat);
410
411 sizeRemain = 0;
412
413 for (j = 0; j < num; ++j)
414 {
415 // Every pair needs space for the Description, twice the Extensions, 1 char for the space, 2 for the braces and 2 for the NULL terminators.
416 sizeRemain = sizeRemain + (((wcslen(codecInfo[j].FormatDescription) + (wcslen(codecInfo[j].FilenameExtension) * 2) + 5) * sizeof(WCHAR)));
417 }
418
419 /* Add two more chars for the last terminator */
420 sizeRemain = sizeRemain + (sizeof(WCHAR) * 2);
421
422 szFilterMask = malloc(sizeRemain);
423 if (!szFilterMask)
424 {
425 DPRINT1("cannot allocate memory for filter mask in pSaveImageAs()");
426 free(codecInfo);
427 return;
428 }
429
430 ZeroMemory(szSaveFileName, sizeof(szSaveFileName));
431 ZeroMemory(szFilterMask, sizeRemain);
432 ZeroMemory(&sfn, sizeof(sfn));
433 sfn.lStructSize = sizeof(sfn);
436 sfn.lpstrFile = szSaveFileName;
437 sfn.lpstrFilter = szFilterMask;
440
441 c = szFilterMask;
442
443 for (j = 0; j < num; ++j)
444 {
445 StringCbPrintfExW(c, sizeRemain, &c, &sizeRemain, 0, L"%ls (%ls)", codecInfo[j].FormatDescription, codecInfo[j].FilenameExtension);
446
447 /* Skip the NULL character */
448 c++;
449 sizeRemain -= sizeof(*c);
450
451 StringCbPrintfExW(c, sizeRemain, &c, &sizeRemain, 0, L"%ls", codecInfo[j].FilenameExtension);
452
453 /* Skip the NULL character */
454 c++;
455 sizeRemain -= sizeof(*c);
456
457 if (IsEqualGUID(&rawFormat, &codecInfo[j].FormatID) != FALSE)
458 {
459 sfn.nFilterIndex = j + 1;
460 }
461 }
462
463 if (GetSaveFileNameW(&sfn))
464 {
465 if (m_pDelayItem)
466 {
467 /* save animation */
469
470 DPRINT1("FIXME: save animation\n");
471 if (GdipSaveImageToFile(image, szSaveFileName, &codecInfo[sfn.nFilterIndex - 1].Clsid, NULL) != Ok)
472 {
473 DPRINT1("GdipSaveImageToFile() failed\n");
474 }
475
477 }
478 else
479 {
480 /* save non-animation */
481 if (GdipSaveImageToFile(image, szSaveFileName, &codecInfo[sfn.nFilterIndex - 1].Clsid, NULL) != Ok)
482 {
483 DPRINT1("GdipSaveImageToFile() failed\n");
484 }
485 }
486 }
487
488 free(szFilterMask);
489 free(codecInfo);
490}
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define OFN_EXPLORER
Definition: commdlg.h:104
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4801
GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage *image, GUID *format)
Definition: image.c:2354
GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size)
Definition: image.c:5045
GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR *filename, GDIPCONST CLSID *clsidEncoder, GDIPCONST EncoderParameters *encoderParams)
Definition: image.c:4476
GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders)
Definition: image.c:5069
OPENFILENAMEW sfn
Definition: eventvwr.c:101
const GLubyte * c
Definition: glext.h:8905
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define c
Definition: ke_i.h:80
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
STRSAFEAPI StringCbPrintfExW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:623
HINSTANCE hInstance
Definition: commdlg.h:362
HWND hwndOwner
Definition: commdlg.h:361
DWORD Flags
Definition: commdlg.h:373
LPWSTR lpstrFile
Definition: commdlg.h:367
DWORD lStructSize
Definition: commdlg.h:360
DWORD nMaxFile
Definition: commdlg.h:368
LPCWSTR lpstrFilter
Definition: commdlg.h:363
DWORD nFilterIndex
Definition: commdlg.h:366
#define ZeroMemory
Definition: winbase.h:1700

Referenced by ImageView_WndProc().

◆ ResetZoom()

static void ResetZoom ( void  )
static

Definition at line 314 of file shimgvw.c.

315{
316 RECT Rect;
317 UINT ImageWidth, ImageHeight, NewZoom;
318
319 if (image == NULL)
320 return;
321
322 /* get disp window size and image size */
324 GdipGetImageWidth(image, &ImageWidth);
325 GdipGetImageHeight(image, &ImageHeight);
326
327 /* compare two aspect rates. same as
328 (ImageHeight / ImageWidth < Rect.bottom / Rect.right) in real */
329 if (ImageHeight * Rect.right < Rect.bottom * ImageWidth)
330 {
331 if (Rect.right < ImageWidth)
332 {
333 /* it's large, shrink it */
334 NewZoom = (Rect.right * 100) / ImageWidth;
335 }
336 else
337 {
338 /* it's small. show as original size */
339 NewZoom = 100;
340 }
341 }
342 else
343 {
344 if (Rect.bottom < ImageHeight)
345 {
346 /* it's large, shrink it */
347 NewZoom = (Rect.bottom * 100) / ImageHeight;
348 }
349 else
350 {
351 /* it's small. show as original size */
352 NewZoom = 100;
353 }
354 }
355
356 UpdateZoom(NewZoom);
357}

Referenced by ImageView_OnSize(), and pLoadImage().

◆ UpdateZoom()

static void UpdateZoom ( UINT  NewZoom)
static

Definition at line 245 of file shimgvw.c.

246{
247 BOOL bEnableZoomIn, bEnableZoomOut;
248
249 /* If zoom has not been changed, ignore it */
250 if (ZoomPercents == NewZoom)
251 return;
252
253 ZoomPercents = NewZoom;
254
255 /* Check if a zoom button of the toolbar must be grayed */
256 bEnableZoomIn = bEnableZoomOut = TRUE;
257
258 if (NewZoom >= MAX_ZOOM)
259 {
260 bEnableZoomIn = FALSE;
261 }
262 else if (NewZoom <= MIN_ZOOM)
263 {
264 bEnableZoomOut = FALSE;
265 }
266
267 /* Update the state of the zoom buttons */
270
271 /* Redraw the display window */
273}
unsigned int BOOL
Definition: ntddk_ex.h:94
#define MAX_ZOOM
Definition: shimgvw.c:55
#define MIN_ZOOM
Definition: shimgvw.c:54

Referenced by ImageView_WndProc(), ResetZoom(), and ZoomInOrOut().

◆ ZoomInOrOut()

static void ZoomInOrOut ( BOOL  bZoomIn)
static

Definition at line 275 of file shimgvw.c.

276{
277 UINT i, NewZoom;
278
279 if (image == NULL)
280 return;
281
282 if (bZoomIn) /* zoom in */
283 {
284 /* find next step */
285 for (i = 0; i < _countof(ZoomSteps); ++i)
286 {
287 if (ZoomPercents < ZoomSteps[i])
288 break;
289 }
290 if (i == _countof(ZoomSteps))
291 NewZoom = MAX_ZOOM;
292 else
293 NewZoom = ZoomSteps[i];
294 }
295 else /* zoom out */
296 {
297 /* find previous step */
298 for (i = _countof(ZoomSteps); i > 0; )
299 {
300 --i;
301 if (ZoomSteps[i] < ZoomPercents)
302 break;
303 }
304 if (i < 0)
305 NewZoom = MIN_ZOOM;
306 else
307 NewZoom = ZoomSteps[i];
308 }
309
310 /* Update toolbar and refresh screen */
311 UpdateZoom(NewZoom);
312}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const UINT ZoomSteps[]
Definition: shimgvw.c:49

Referenced by ImageView_OnMouseWheel(), and ImageView_WndProc().

Variable Documentation

◆ BtnConfig

const TB_BUTTON_CONFIG BtnConfig[]
static
Initial value:
=
{
DEFINE_BTN_CONFIG(PREV_PIC),
DEFINE_BTN_CONFIG(NEXT_PIC),
DEFINE_BTN_CONFIG(BEST_FIT),
DEFINE_BTN_CONFIG(REAL_SIZE),
DEFINE_BTN_CONFIG(ZOOM_OUT),
DEFINE_BTN_CONFIG(ROT_CLOCKW),
DEFINE_BTN_CONFIG(ROT_COUNCW),
}
#define SLIDE_SHOW
#define MODIFY(p, i, v)
Definition: check.c:44
#define DELETE
Definition: nt_native.h:57
#define DEFINE_BTN_CONFIG(_name)
Definition: shimgvw.c:94

Definition at line 96 of file shimgvw.c.

Referenced by ImageView_CreateToolBar(), and ImageView_WndProc().

◆ Buttons

const TBBUTTON Buttons[]
static
Initial value:

Definition at line 71 of file shimgvw.c.

Referenced by ImageView_CreateToolBar().

◆ currentFile

SHIMGVW_FILENODE* currentFile

Definition at line 40 of file shimgvw.c.

Referenced by ImageView_CreateWindow(), ImageView_Modify(), and ImageView_WndProc().

◆ hDispWnd

◆ hInstance

◆ hToolBar

HWND hToolBar

◆ image

Definition at line 41 of file shimgvw.c.

◆ m_nFrameCount

UINT m_nFrameCount = 0

◆ m_nFrameIndex

UINT m_nFrameIndex = 0

Definition at line 115 of file shimgvw.c.

Referenced by Anime_FreeInfo(), Anime_GetFrameDelay(), Anime_SetFrameIndex(), and Anime_Step().

◆ m_nLoopCount

UINT m_nLoopCount = (UINT)-1

Definition at line 118 of file shimgvw.c.

Referenced by Anime_FreeInfo(), Anime_LoadInfo(), and Anime_Step().

◆ m_nLoopIndex

UINT m_nLoopIndex = 0

Definition at line 117 of file shimgvw.c.

Referenced by Anime_FreeInfo(), and Anime_Step().

◆ m_pDelayItem

PropertyItem* m_pDelayItem = NULL

Definition at line 119 of file shimgvw.c.

Referenced by Anime_FreeInfo(), Anime_GetFrameDelay(), Anime_LoadInfo(), and pSaveImageAs().

◆ PrevProc

WNDPROC PrevProc = NULL

Definition at line 42 of file shimgvw.c.

Referenced by ImageView_DispWndProc(), ImageView_InitControls(), and ImageView_WndProc().

◆ shiSettings

◆ ZoomPercents

UINT ZoomPercents = 100

Definition at line 47 of file shimgvw.c.

Referenced by ImageView_DrawImage(), UpdateZoom(), and ZoomInOrOut().

◆ ZoomSteps

const UINT ZoomSteps[]
static
Initial value:
=
{
10, 25, 50, 100, 200, 400, 800, 1600
}

Definition at line 49 of file shimgvw.c.

Referenced by ZoomInOrOut().