ReactOS  0.4.14-dev-606-g14ebc0b
shimgvw.c File Reference
#include <stdarg.h>
#include <windef.h>
#include <winbase.h>
#include <winnls.h>
#include <winreg.h>
#include <wingdi.h>
#include <windowsx.h>
#include <objbase.h>
#include <commctrl.h>
#include <commdlg.h>
#include <gdiplus.h>
#include <tchar.h>
#include <strsafe.h>
#include <shlwapi.h>
#include <debug.h>
#include "shimgvw.h"
Include dependency graph for shimgvw.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COM_NO_WINDOWS_H
 
#define INITGUID
 
#define NDEBUG
 
#define MIN_ZOOM   10
 
#define MAX_ZOOM   1600
 
#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 ZoomInOrOut (BOOL bZoomIn)
 
static void ResetZoom (void)
 
static void pLoadImage (LPWSTR szOpenFileName)
 
static void pSaveImageAs (HWND hwnd)
 
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 VOID ImageView_DrawImage (HWND hwnd)
 
static BOOL ImageView_LoadSettings ()
 
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)
 
LRESULT CALLBACK ImageView_WndProc (HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
LONG WINAPI ImageView_CreateWindow (HWND hwnd, LPWSTR 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
 
WNDPROC PrevProc = NULL
 
HWND hDispWnd
 
HWND hToolBar
 
UINT ZoomPercents = 100
 
static const UINT ZoomSteps []
 
UINT m_nFrameIndex = 0
 
UINT m_nFrameCount = 0
 
UINT m_nLoopIndex = 0
 
UINT m_nLoopCount = (UINT)-1
 
PropertyItemm_pDelayItem = NULL
 
static const TBBUTTON Buttons []
 

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 59 of file shimgvw.c.

◆ COM_NO_WINDOWS_H

#define COM_NO_WINDOWS_H

Definition at line 11 of file shimgvw.c.

◆ INITGUID

#define INITGUID

Definition at line 12 of file shimgvw.c.

◆ MAX_ZOOM

#define MAX_ZOOM   1600

Definition at line 45 of file shimgvw.c.

◆ MIN_ZOOM

#define MIN_ZOOM   10

Definition at line 44 of file shimgvw.c.

◆ NDEBUG

#define NDEBUG

Definition at line 30 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 61 of file shimgvw.c.

62 {
63  if (m_pDelayItem)
64  {
67  }
68  m_nFrameIndex = 0;
69  m_nFrameCount = 0;
70  m_nLoopIndex = 0;
71  m_nLoopCount = (UINT)-1;
72 }
#define free
Definition: debug_ros.c:5
UINT m_nLoopIndex
Definition: shimgvw.c:55
smooth NULL
Definition: ftsmooth.c:416
PropertyItem * m_pDelayItem
Definition: shimgvw.c:57
UINT m_nLoopCount
Definition: shimgvw.c:56
unsigned int UINT
Definition: ndis.h:50
UINT m_nFrameIndex
Definition: shimgvw.c:53
UINT m_nFrameCount
Definition: shimgvw.c:54

Referenced by Anime_LoadInfo(), and ImageView_CreateWindow().

◆ Anime_GetFrameDelay()

DWORD Anime_GetFrameDelay ( UINT  nFrameIndex)

Definition at line 148 of file shimgvw.c.

149 {
150  if (nFrameIndex < m_nFrameCount && m_pDelayItem)
151  {
152  return ((DWORD *)m_pDelayItem->value)[m_nFrameIndex] * 10;
153  }
154  return 0;
155 }
unsigned long DWORD
Definition: ntddk_ex.h:95
PropertyItem * m_pDelayItem
Definition: shimgvw.c:57
UINT m_nFrameIndex
Definition: shimgvw.c:53
UINT m_nFrameCount
Definition: shimgvw.c:54

Referenced by Anime_Step().

◆ Anime_LoadInfo()

static BOOL Anime_LoadInfo ( void  )
static

Definition at line 74 of file shimgvw.c.

75 {
76  GUID *dims;
77  UINT nDimCount = 0;
78  UINT cbItem;
79  UINT result;
80  PropertyItem *pItem;
81 
84 
85  if (!image)
86  return FALSE;
87 
89  if (nDimCount)
90  {
91  dims = (GUID *)calloc(nDimCount, sizeof(GUID));
92  if (dims)
93  {
94  GdipImageGetFrameDimensionsList(image, dims, nDimCount);
97  free(dims);
98  }
99  }
100 
101  result = 0;
103  cbItem = result;
104  if (cbItem)
105  {
106  m_pDelayItem = (PropertyItem *)malloc(cbItem);
108  }
109 
110  result = 0;
112  cbItem = result;
113  if (cbItem)
114  {
115  pItem = (PropertyItem *)malloc(cbItem);
116  if (pItem)
117  {
118  if (GdipGetPropertyItem(image, PropertyTagLoopCount, cbItem, pItem) == Ok)
119  {
120  m_nLoopCount = *(WORD *)pItem->value;
121  }
122  free(pItem);
123  }
124  }
125 
126  if (m_pDelayItem)
127  {
129  }
130 
131  return m_pDelayItem != NULL;
132 }
#define PropertyTagLoopCount
GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image, GDIPCONST GUID *dimensionID, UINT *count)
Definition: image.c:2865
#define free
Definition: debug_ros.c:5
GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage *image, PROPID propid, UINT *size)
Definition: image.c:2488
#define ANIME_TIMER_ID
Definition: shimgvw.c:59
#define PropertyTagFrameDelay
smooth NULL
Definition: ftsmooth.c:416
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
static void Anime_FreeInfo(void)
Definition: shimgvw.c:61
unsigned short WORD
Definition: ntddk_ex.h:93
GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage *image, PROPID propid, UINT size, PropertyItem *buffer)
Definition: image.c:2634
HWND hDispWnd
Definition: shimgvw.c:41
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
PropertyItem * m_pDelayItem
Definition: shimgvw.c:57
UINT m_nLoopCount
Definition: shimgvw.c:56
unsigned int UINT
Definition: ndis.h:50
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage *image, UINT *count)
Definition: image.c:2885
#define calloc
Definition: rosglue.h:14
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage *image, GUID *dimensionIDs, UINT count)
Definition: image.c:2900
#define malloc
Definition: debug_ros.c:4
UINT m_nFrameCount
Definition: shimgvw.c:54
GLuint64EXT * result
Definition: glext.h:11304

Referenced by pLoadImage().

◆ Anime_SetFrameIndex()

static void Anime_SetFrameIndex ( UINT  nFrameIndex)
static

Definition at line 134 of file shimgvw.c.

135 {
136  if (nFrameIndex < m_nFrameCount)
137  {
138  GUID guid = FrameDimensionTime;
139  if (Ok != GdipImageSelectActiveFrame(image, &guid, nFrameIndex))
140  {
141  guid = FrameDimensionPage;
142  GdipImageSelectActiveFrame(image, &guid, nFrameIndex);
143  }
144  }
145  m_nFrameIndex = nFrameIndex;
146 }
const GUID * guid
GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image, GDIPCONST GUID *dimensionID, UINT frame)
Definition: image.c:4302
UINT m_nFrameIndex
Definition: shimgvw.c:53
UINT m_nFrameCount
Definition: shimgvw.c:54

Referenced by Anime_Step().

◆ Anime_Step()

BOOL Anime_Step ( DWORD pdwDelay)

Definition at line 157 of file shimgvw.c.

158 {
159  *pdwDelay = INFINITE;
160  if (m_nLoopCount == (UINT)-1)
161  return FALSE;
162 
163  if (m_nFrameIndex + 1 < m_nFrameCount)
164  {
165  *pdwDelay = Anime_GetFrameDelay(m_nFrameIndex);
167  ++m_nFrameIndex;
168  return TRUE;
169  }
170 
171  if (m_nLoopCount == 0 || m_nLoopIndex < m_nLoopCount)
172  {
173  *pdwDelay = Anime_GetFrameDelay(m_nFrameIndex);
175  m_nFrameIndex = 0;
176  ++m_nLoopIndex;
177  return TRUE;
178  }
179 
180  return FALSE;
181 }
#define TRUE
Definition: types.h:120
UINT m_nLoopIndex
Definition: shimgvw.c:55
DWORD Anime_GetFrameDelay(UINT nFrameIndex)
Definition: shimgvw.c:148
static void Anime_SetFrameIndex(UINT nFrameIndex)
Definition: shimgvw.c:134
UINT m_nLoopCount
Definition: shimgvw.c:56
unsigned int UINT
Definition: ndis.h:50
UINT m_nFrameIndex
Definition: shimgvw.c:53
UINT m_nFrameCount
Definition: shimgvw.c:54
#define INFINITE
Definition: serial.h:102

Referenced by ImageView_OnTimer().

◆ DllMain()

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

Definition at line 1118 of file shimgvw.c.

1121 {
1122  switch (dwReason)
1123  {
1124  case DLL_PROCESS_ATTACH:
1125  case DLL_THREAD_ATTACH:
1126  hInstance = hinstDLL;
1127  break;
1128  }
1129 
1130  return TRUE;
1131 }
#define TRUE
Definition: types.h:120
#define DLL_THREAD_ATTACH
Definition: compat.h:121
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
DWORD dwReason
Definition: misc.cpp:154
HINSTANCE hInstance
Definition: shimgvw.c:35

◆ ImageView_CreateToolBar()

static BOOL ImageView_CreateToolBar ( HWND  hwnd)
static

Definition at line 710 of file shimgvw.c.

711 {
712  INT numButtons = sizeof(Buttons) / sizeof(Buttons[0]);
713 
716  0, 0, 0, 0, hwnd,
717  0, hInstance, NULL);
718  if(hToolBar != NULL)
719  {
720  HIMAGELIST hImageList;
721 
724 
726  sizeof(Buttons[0]), 0);
727 
729 
732 
735 
738 
741 
744 
747 
750 
753 
754  if (hImageList == NULL) return FALSE;
755 
757  0, (LPARAM)hImageList));
758 
760  numButtons, (LPARAM)Buttons);
761 
762  return TRUE;
763  }
764 
765  return FALSE;
766 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define TB_BUTTONSTRUCTSIZE
Definition: commctrl.h:1130
#define TRUE
Definition: types.h:120
#define IDB_PRINTICON
Definition: resource.h:15
#define TBSTYLE_EX_HIDECLIPPEDBUTTONS
Definition: commctrl.h:1009
#define IDB_NEXTICON
Definition: resource.h:11
#define WS_CHILD
Definition: pedump.c:617
int32_t INT
Definition: typedefs.h:56
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
#define TB_IMAGE_HEIGHT
Definition: shimgvw.h:4
#define IDB_PREVICON
Definition: resource.h:10
#define CreateWindowEx
Definition: winuser.h:5730
#define TOOLBARCLASSNAME
Definition: commctrl.h:942
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define CCS_BOTTOM
Definition: commctrl.h:2240
#define TB_SETIMAGELIST
Definition: commctrl.h:1146
#define ILC_COLOR24
Definition: commctrl.h:353
#define RGB(r, g, b)
Definition: wingdi.h:2939
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:985
#define TB_ADDBUTTONS
Definition: commctrl.h:1267
#define ILC_MASK
Definition: commctrl.h:347
#define IDB_ROT1ICON
Definition: resource.h:16
#define IDB_ROT2ICON
Definition: resource.h:17
#define IDB_ZOOMMICON
Definition: resource.h:13
#define IMAGE_BITMAP
Definition: winuser.h:211
HINSTANCE hInstance
Definition: shimgvw.c:35
#define IDB_SAVEICON
Definition: resource.h:14
#define SendMessage
Definition: winuser.h:5818
#define TB_IMAGE_WIDTH
Definition: shimgvw.h:3
HWND hToolBar
Definition: shimgvw.c:41
#define LoadImage
Definition: winuser.h:5790
INT WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hBitmap, COLORREF clrMask)
Definition: imagelist.c:563
static const TBBUTTON Buttons[]
Definition: shimgvw.c:274
#define IDB_ZOOMPICON
Definition: resource.h:12
#define LR_DEFAULTCOLOR
Definition: winuser.h:1077
#define WS_VISIBLE
Definition: pedump.c:620
#define TBSTYLE_FLAT
Definition: commctrl.h:988
#define TB_SETEXTENDEDSTYLE
Definition: commctrl.h:1186

Referenced by ImageView_InitControls().

◆ ImageView_CreateWindow()

LONG WINAPI ImageView_CreateWindow ( HWND  hwnd,
LPWSTR  szFileName 
)

Definition at line 999 of file shimgvw.c.

1000 {
1001  struct GdiplusStartupInput gdiplusStartupInput;
1003  WNDCLASS WndClass = {0};
1004  TCHAR szBuf[512];
1005  WCHAR szInitialFile[MAX_PATH];
1006  HWND hMainWnd;
1007  MSG msg;
1008 
1009  if (!ImageView_LoadSettings())
1010  {
1012  shiSettings.Left = 0;
1013  shiSettings.Top = 0;
1014  shiSettings.Right = 520;
1015  shiSettings.Bottom = 400;
1016  }
1017 
1018  // Initialize GDI+
1019  gdiplusStartupInput.GdiplusVersion = 1;
1020  gdiplusStartupInput.DebugEventCallback = NULL;
1021  gdiplusStartupInput.SuppressBackgroundThread = FALSE;
1022  gdiplusStartupInput.SuppressExternalCodecs = FALSE;
1023 
1024  GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
1025  pLoadImage(szFileName);
1026 
1027  // Create the window
1028  WndClass.lpszClassName = _T("shimgvw_window");
1029  WndClass.lpfnWndProc = ImageView_WndProc;
1030  WndClass.hInstance = hInstance;
1031  WndClass.style = CS_HREDRAW | CS_VREDRAW;
1033  WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
1034  WndClass.hbrBackground = NULL; /* less flicker */
1035 
1036  if (!RegisterClass(&WndClass)) return -1;
1037 
1038  LoadString(hInstance, IDS_APPTITLE, szBuf, sizeof(szBuf) / sizeof(TCHAR));
1039  hMainWnd = CreateWindow(_T("shimgvw_window"), szBuf,
1042  0, 0, NULL, NULL, hInstance, NULL);
1043 
1044  // make sure the path has no quotes on it
1045  wcscpy(szInitialFile, szFileName);
1046  PathUnquoteSpacesW(szInitialFile);
1047 
1048  currentFile = pBuildFileList(szInitialFile);
1049  if (currentFile)
1050  {
1052  }
1053 
1054  // Show it
1057 
1058  // Message Loop
1059  while(GetMessage(&msg,NULL,0,0))
1060  {
1063  }
1064 
1066 
1067  if (image)
1069 
1070  Anime_FreeInfo();
1071 
1073  return -1;
1074 }
#define MAKEINTRESOURCE
Definition: winuser.h:591
SHIMGVW_SETTINGS shiSettings
Definition: shimgvw.c:36
BOOL WINAPI TranslateMessage(_In_ const MSG *)
static BOOL ImageView_LoadSettings()
Definition: shimgvw.c:665
#define CreateWindow
Definition: winuser.h:5729
#define IDS_APPTITLE
Definition: resource.h:3
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL WINAPI UpdateWindow(_In_ HWND)
#define CS_HREDRAW
Definition: winuser.h:648
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
uint32_t ULONG_PTR
Definition: typedefs.h:63
BOOL Maximized
Definition: shimgvw.h:10
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
LRESULT CALLBACK ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: shimgvw.c:833
#define CW_USEDEFAULT
Definition: winuser.h:225
static SHIMGVW_FILENODE * pBuildFileList(LPWSTR szFirstFile)
Definition: shimgvw.c:448
smooth NULL
Definition: ftsmooth.c:416
#define SW_SHOW
Definition: winuser.h:769
SHIMGVW_FILENODE * currentFile
Definition: shimgvw.c:37
#define WS_CAPTION
Definition: pedump.c:624
static void Anime_FreeInfo(void)
Definition: shimgvw.c:61
#define CS_VREDRAW
Definition: winuser.h:653
char TCHAR
Definition: xmlstorage.h:189
static VOID pLoadImageFromNode(SHIMGVW_FILENODE *node, HWND hwnd)
Definition: shimgvw.c:420
#define _T(x)
Definition: vfdio.h:22
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
void WINAPI GdiplusShutdown(ULONG_PTR)
Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
Definition: gdiplus.c:81
static ULONG_PTR gdiplusToken
Definition: CImage.cpp:79
HWND hMainWnd
Definition: magnifier.c:32
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static VOID pFreeFileList(SHIMGVW_FILENODE *root)
Definition: shimgvw.c:561
#define IDI_APPICON
Definition: resource.h:166
#define LoadCursor
Definition: winuser.h:5787
GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
Definition: image.c:2107
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1029
static void pLoadImage(LPWSTR szOpenFileName)
Definition: shimgvw.c:289
#define GetMessage
Definition: winuser.h:5765
HINSTANCE hInstance
Definition: shimgvw.c:35
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define RegisterClass
Definition: winuser.h:5811
#define LoadIcon
Definition: winuser.h:5788
#define WS_VISIBLE
Definition: pedump.c:620
#define LoadString
Definition: winuser.h:5794
WCHAR WndClass[]
Definition: capicon.c:23

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

◆ ImageView_DispWndProc()

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

Definition at line 782 of file shimgvw.c.

783 {
784  switch (Message)
785  {
786  case WM_PAINT:
787  {
789  return 0L;
790  }
791  case WM_TIMER:
792  {
793  if (wParam == ANIME_TIMER_ID)
794  {
796  return 0;
797  }
798  break;
799  }
800  }
802 }
#define CallWindowProc
Definition: winuser.h:5710
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
WNDPROC PrevProc
Definition: shimgvw.c:39
#define ANIME_TIMER_ID
Definition: shimgvw.c:59
WPARAM wParam
Definition: combotst.c:138
#define WM_TIMER
Definition: winuser.h:1724
#define WM_PAINT
Definition: winuser.h:1602
CHAR Message[80]
Definition: alive.c:5
static const WCHAR L[]
Definition: oid.c:1250
static VOID ImageView_DrawImage(HWND hwnd)
Definition: shimgvw.c:584
static void ImageView_OnTimer(HWND hwnd)
Definition: shimgvw.c:768
LPARAM lParam
Definition: combotst.c:139

Referenced by ImageView_InitControls().

◆ ImageView_DrawImage()

static VOID ImageView_DrawImage ( HWND  hwnd)
static

Definition at line 584 of file shimgvw.c.

585 {
586  GpGraphics *graphics;
587  UINT ImageWidth, ImageHeight;
588  INT ZoomedWidth, ZoomedHeight, x, y;
589  PAINTSTRUCT ps;
590  RECT rect, margin;
591  HDC hdc;
592  HBRUSH white;
593  HGDIOBJ hbrOld;
594 
595  hdc = BeginPaint(hwnd, &ps);
596  if (!hdc)
597  {
598  DPRINT1("BeginPaint() failed\n");
599  return;
600  }
601 
602  GdipCreateFromHDC(hdc, &graphics);
603  if (!graphics)
604  {
605  DPRINT1("GdipCreateFromHDC() failed\n");
606  return;
607  }
608 
609  GdipGetImageWidth(image, &ImageWidth);
610  GdipGetImageHeight(image, &ImageHeight);
611 
612  if (GetClientRect(hwnd, &rect))
613  {
614  ZoomedWidth = (ImageWidth * ZoomPercents) / 100;
615  ZoomedHeight = (ImageHeight * ZoomPercents) / 100;
616 
617  x = (rect.right - ZoomedWidth) / 2;
618  y = (rect.bottom - ZoomedHeight) / 2;
619 
620  white = GetStockObject(WHITE_BRUSH);
621  // Fill top part
622  margin = rect;
623  margin.bottom = y - 1;
624  FillRect(hdc, &margin, white);
625  // Fill bottom part
626  margin.top = y + ZoomedHeight + 1;
627  margin.bottom = rect.bottom;
628  FillRect(hdc, &margin, white);
629  // Fill left part
630  margin.top = y - 1;
631  margin.bottom = y + ZoomedHeight + 1;
632  margin.right = x - 1;
633  FillRect(hdc, &margin, white);
634  // Fill right part
635  margin.left = x + ZoomedWidth + 1;
636  margin.right = rect.right;
637  FillRect(hdc, &margin, white);
638 
639  DPRINT("x = %d, y = %d, ImageWidth = %u, ImageHeight = %u\n");
640  DPRINT("rect.right = %ld, rect.bottom = %ld\n", rect.right, rect.bottom);
641  DPRINT("ZoomPercents = %d, ZoomedWidth = %d, ZoomedHeight = %d\n",
642  ZoomPercents, ZoomedWidth, ZoomedWidth);
643 
644  if (ZoomPercents % 100 == 0)
645  {
648  }
649  else
650  {
653  }
654 
656  Rectangle(hdc, x - 1, y - 1, x + ZoomedWidth + 1, y + ZoomedHeight + 1);
657  SelectObject(hdc, hbrOld);
658  GdipDrawImageRectI(graphics, image, x, y, ZoomedWidth, ZoomedHeight);
659  }
660  GdipDeleteGraphics(graphics);
661  EndPaint(hwnd, &ps);
662 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width)
Definition: image.c:2342
#define NULL_BRUSH
Definition: wingdi.h:900
UINT ZoomPercents
Definition: shimgvw.c:46
static HDC
Definition: imagelist.c:92
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define WHITE_BRUSH
Definition: wingdi.h:901
LONG left
Definition: windef.h:306
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
LONG right
Definition: windef.h:308
int32_t INT
Definition: typedefs.h:56
& rect
Definition: startmenu.cpp:1413
GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height)
Definition: image.c:2239
GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics *graphics, SmoothingMode mode)
Definition: graphics.c:6289
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
Definition: graphics.c:2581
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
void DPRINT(...)
Definition: polytest.cpp:61
GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics *graphics, GpImage *image, INT x, INT y, INT width, INT height)
Definition: graphics.c:3561
GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics *graphics, InterpolationMode mode)
Definition: graphics.c:6143
HDC hdc
Definition: main.c:9
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
Definition: graphics.c:2395
unsigned int UINT
Definition: ndis.h:50
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define DPRINT1
Definition: precomp.h:8
LONG bottom
Definition: windef.h:309
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)

Referenced by ImageView_DispWndProc().

◆ ImageView_Fullscreen()

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

Definition at line 1083 of file shimgvw.c.

1084 {
1086 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName)
Definition: shimgvw.c:999
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ ImageView_FullscreenA()

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

Definition at line 1089 of file shimgvw.c.

1090 {
1091  WCHAR szFile[MAX_PATH];
1092 
1093  if (MultiByteToWideChar(CP_ACP, 0, (char*)path, strlen((char*)path)+1, szFile, MAX_PATH))
1094  {
1096  }
1097 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define CP_ACP
Definition: compat.h:99
LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName)
Definition: shimgvw.c:999
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ ImageView_FullscreenW()

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

Definition at line 1077 of file shimgvw.c.

1078 {
1080 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName)
Definition: shimgvw.c:999
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ ImageView_InitControls()

static VOID ImageView_InitControls ( HWND  hwnd)
static

Definition at line 805 of file shimgvw.c.

806 {
810 
812 
815  0, 0, 0, 0, hwnd, NULL, hInstance, NULL);
816 
819 
821 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
SHIMGVW_SETTINGS shiSettings
Definition: shimgvw.c:36
#define TRUE
Definition: types.h:120
WNDPROC PrevProc
Definition: shimgvw.c:39
#define CS_HREDRAW
Definition: winuser.h:648
#define WS_CHILD
Definition: pedump.c:617
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LRESULT CALLBACK ImageView_DispWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: shimgvw.c:782
#define SetWindowLongPtr
Definition: treelist.c:70
static BOOL ImageView_CreateToolBar(HWND hwnd)
Definition: shimgvw.c:710
#define GCL_STYLE
Definition: winuser.h:665
BOOL Maximized
Definition: shimgvw.h:10
#define WC_STATIC
Definition: commctrl.h:4678
#define CreateWindowEx
Definition: winuser.h:5730
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define SetClassLongPtr
Definition: winuser.h:5823
#define CS_VREDRAW
Definition: winuser.h:653
#define _T(x)
Definition: vfdio.h:22
HWND hDispWnd
Definition: shimgvw.c:41
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define GWLP_WNDPROC
Definition: treelist.c:66
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
HINSTANCE hInstance
Definition: shimgvw.c:35
#define WS_VISIBLE
Definition: pedump.c:620
#define SW_MAXIMIZE
Definition: winuser.h:766

Referenced by ImageView_WndProc().

◆ ImageView_LoadSettings()

static BOOL ImageView_LoadSettings ( )
static

Definition at line 665 of file shimgvw.c.

666 {
667  HKEY hKey;
668  DWORD dwSize;
669 
670  if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\ReactOS\\shimgvw"), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
671  {
672  dwSize = sizeof(SHIMGVW_SETTINGS);
673  if (RegQueryValueEx(hKey, _T("Settings"), NULL, NULL, (LPBYTE)&shiSettings, &dwSize) == ERROR_SUCCESS)
674  {
675  RegCloseKey(hKey);
676  return TRUE;
677  }
678 
679  RegCloseKey(hKey);
680  }
681 
682  return FALSE;
683 }
#define RegQueryValueEx
Definition: winreg.h:524
SHIMGVW_SETTINGS shiSettings
Definition: shimgvw.c:36
#define TRUE
Definition: types.h:120
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
#define HKEY_CURRENT_USER
Definition: winreg.h:11
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
smooth NULL
Definition: ftsmooth.c:416
#define _T(x)
Definition: vfdio.h:22
unsigned long DWORD
Definition: ntddk_ex.h:95
#define RegOpenKeyEx
Definition: winreg.h:520
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54

Referenced by ImageView_CreateWindow().

◆ ImageView_OnMouseWheel()

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

Definition at line 824 of file shimgvw.c.

825 {
826  if (zDelta != 0)
827  {
828  ZoomInOrOut(zDelta > 0);
829  }
830 }
static void ZoomInOrOut(BOOL bZoomIn)
Definition: shimgvw.c:183

Referenced by ImageView_WndProc().

◆ ImageView_OnTimer()

static void ImageView_OnTimer ( HWND  hwnd)
static

Definition at line 768 of file shimgvw.c.

769 {
770  DWORD dwDelay;
771 
774 
775  if (Anime_Step(&dwDelay))
776  {
777  SetTimer(hwnd, ANIME_TIMER_ID, dwDelay, NULL);
778  }
779 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
BOOL Anime_Step(DWORD *pdwDelay)
Definition: shimgvw.c:157
#define ANIME_TIMER_ID
Definition: shimgvw.c:59
smooth NULL
Definition: ftsmooth.c:416
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)

Referenced by ImageView_DispWndProc().

◆ ImageView_PrintTo()

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

Definition at line 1100 of file shimgvw.c.

1101 {
1102  DPRINT("ImageView_PrintTo() not implemented\n");
1103 }
void DPRINT(...)
Definition: polytest.cpp:61

◆ ImageView_PrintToA()

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

Definition at line 1106 of file shimgvw.c.

1107 {
1108  DPRINT("ImageView_PrintToA() not implemented\n");
1109 }
void DPRINT(...)
Definition: polytest.cpp:61

◆ ImageView_PrintToW()

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

Definition at line 1112 of file shimgvw.c.

1113 {
1114  DPRINT("ImageView_PrintToW() not implemented\n");
1115 }
void DPRINT(...)
Definition: polytest.cpp:61

◆ ImageView_SaveSettings()

static VOID ImageView_SaveSettings ( HWND  hwnd)
static

Definition at line 686 of file shimgvw.c.

687 {
688  WINDOWPLACEMENT wp;
689  HKEY hKey;
690 
692  wp.length = sizeof(WINDOWPLACEMENT);
693  GetWindowPlacement(hwnd, &wp);
694 
700 
701  if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\ReactOS\\shimgvw"), 0, NULL,
703  {
704  RegSetValueEx(hKey, _T("Settings"), 0, REG_BINARY, (LPBYTE)&shiSettings, sizeof(SHIMGVW_SETTINGS));
705  RegCloseKey(hKey);
706  }
707 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
SHIMGVW_SETTINGS shiSettings
Definition: shimgvw.c:36
struct _WINDOWPLACEMENT WINDOWPLACEMENT
#define ERROR_SUCCESS
Definition: deptool.c:10
#define REG_BINARY
Definition: nt_native.h:1496
#define SW_HIDE
Definition: winuser.h:762
#define HKEY_CURRENT_USER
Definition: winreg.h:11
LONG top
Definition: windef.h:307
#define WPF_RESTORETOMAXIMIZED
Definition: winuser.h:2507
LONG left
Definition: windef.h:306
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LONG right
Definition: windef.h:308
BOOL Maximized
Definition: shimgvw.h:10
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
#define _T(x)
Definition: vfdio.h:22
BOOL WINAPI IsZoomed(_In_ HWND)
RECT rcNormalPosition
Definition: winuser.h:3270
LONG bottom
Definition: windef.h:309
#define RegSetValueEx
Definition: winreg.h:533
#define RegCreateKeyEx
Definition: winreg.h:501

Referenced by ImageView_WndProc().

◆ ImageView_UpdateWindow()

static VOID ImageView_UpdateWindow ( HWND  hwnd)
static

Definition at line 577 of file shimgvw.c.

578 {
581 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
BOOL WINAPI UpdateWindow(_In_ HWND)
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)

Referenced by ImageView_WndProc().

◆ ImageView_WndProc()

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

Definition at line 833 of file shimgvw.c.

834 {
835  switch (Message)
836  {
837  case WM_CREATE:
838  {
840  return 0L;
841  }
842 
843  case WM_KEYDOWN:
844  switch (LOWORD(wParam))
845  {
846  case VK_LEFT:
848  break;
849 
850  case VK_RIGHT:
852  break;
853  }
854  break;
855 
856  case WM_COMMAND:
857  {
858  switch (wParam)
859  {
860  case IDC_PREV:
861  {
864  }
865 
866  break;
867  case IDC_NEXT:
868  {
871  }
872 
873  break;
874  case IDC_ZOOMP:
875  {
876  ZoomInOrOut(TRUE);
877  }
878  break;
879  case IDC_ZOOMM:
880  {
882  }
883  break;
884  case IDC_SAVE:
886 
887  break;
888  case IDC_PRINT:
889 
890  break;
891  case IDC_ROT1:
892  {
895  }
896 
897  break;
898  case IDC_ROT2:
899  {
902  }
903 
904  break;
905  }
906  }
907  break;
908 
909  case WM_MOUSEWHEEL:
913  break;
914 
915  case WM_NOTIFY:
916  {
917  LPNMHDR pnmhdr = (LPNMHDR)lParam;
918 
919  switch (pnmhdr->code)
920  {
921  case TTN_GETDISPINFO:
922  {
923  LPTOOLTIPTEXT lpttt;
924  UINT idButton;
925 
926  lpttt = (LPTOOLTIPTEXT)lParam;
927  idButton = (UINT)lpttt->hdr.idFrom;
928  lpttt->hinst = hInstance;
929 
930  switch (idButton)
931  {
932  case IDC_PREV:
933  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PREV_PIC);
934  break;
935  case IDC_NEXT:
936  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEXT_PIC);
937  break;
938  case IDC_ZOOMP:
939  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ZOOM_IN);
940  break;
941  case IDC_ZOOMM:
942  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ZOOM_OUT);
943  break;
944  case IDC_SAVE:
945  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_SAVEAS);
946  break;
947  case IDC_PRINT:
948  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PRINT);
949  break;
950  case IDC_ROT1:
951  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ROT_COUNCW);
952  break;
953  case IDC_ROT2:
954  lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_ROT_CLOCKW);
955  break;
956  }
957  return TRUE;
958  }
959  }
960  break;
961  }
962  case WM_SIZING:
963  {
964  LPRECT pRect = (LPRECT)lParam;
965  if (pRect->right-pRect->left < 350)
966  pRect->right = pRect->left + 350;
967 
968  if (pRect->bottom-pRect->top < 290)
969  pRect->bottom = pRect->top + 290;
970  return TRUE;
971  }
972  case WM_SIZE:
973  {
974  RECT rc;
976  GetWindowRect(hToolBar, &rc);
977  MoveWindow(hDispWnd, 1, 1, LOWORD(lParam) - 1, HIWORD(lParam) - (rc.bottom - rc.top) - 1, TRUE);
978  /* is it maximized or restored? */
980  {
981  /* reset zoom */
982  ResetZoom();
983  }
984  return 0L;
985  }
986  case WM_DESTROY:
987  {
990  PostQuitMessage(0);
991  break;
992  }
993  }
994 
996 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define IDS_TOOLTIP_ROT_COUNCW
Definition: resource.h:58
#define TRUE
Definition: types.h:120
#define MAKEWPARAM(l, h)
Definition: winuser.h:3984
#define IDC_ZOOMM
Definition: resource.h:23
static void ResetZoom(void)
Definition: shimgvw.c:233
WNDPROC PrevProc
Definition: shimgvw.c:39
#define SIZE_MAXIMIZED
Definition: winuser.h:2482
#define IDS_TOOLTIP_NEXT_PIC
Definition: resource.h:53
#define WM_MOUSEWHEEL
Definition: treelist.c:96
#define SIZE_RESTORED
Definition: winuser.h:2480
LONG top
Definition: windef.h:307
#define GET_X_LPARAM(lp)
Definition: windowsx.h:274
#define VK_LEFT
Definition: winuser.h:2199
#define IDC_NEXT
Definition: fontview.h:17
LONG left
Definition: windef.h:306
struct SHIMGVW_FILENODE_INTERNAL * Next
Definition: shimgvw.h:21
#define IDC_ROT2
Definition: resource.h:27
LONG right
Definition: windef.h:308
#define IDC_SAVE
Definition: resource.h:16
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
struct tagNMHDR * LPNMHDR
#define IDS_TOOLTIP_PREV_PIC
Definition: resource.h:54
UINT code
Definition: winuser.h:3134
#define IDC_ROT1
Definition: resource.h:26
GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage *image, RotateFlipType type)
Definition: image.c:5358
#define IDS_TOOLTIP_ZOOM_OUT
Definition: resource.h:56
#define TB_AUTOSIZE
Definition: commctrl.h:1133
short SHORT
Definition: pedump.c:59
#define TTN_GETDISPINFO
Definition: commctrl.h:1874
#define WM_SIZING
Definition: winuser.h:1789
smooth NULL
Definition: ftsmooth.c:416
#define WM_KEYDOWN
Definition: winuser.h:1697
LONG_PTR LPARAM
Definition: windef.h:208
#define LPRECT
Definition: precomp.h:28
switch(r->id)
Definition: btrfs.c:2904
static VOID ImageView_UpdateWindow(HWND hwnd)
Definition: shimgvw.c:577
#define DefWindowProc
Definition: ros2win.h:31
#define WM_DESTROY
Definition: winuser.h:1591
#define PostMessage
Definition: winuser.h:5807
SHIMGVW_FILENODE * currentFile
Definition: shimgvw.c:37
#define LPTOOLTIPTEXT
Definition: commctrl.h:1886
static VOID pLoadImageFromNode(SHIMGVW_FILENODE *node, HWND hwnd)
Definition: shimgvw.c:420
#define IDS_TOOLTIP_ZOOM_IN
Definition: resource.h:55
#define WM_SIZE
Definition: winuser.h:1593
#define IDC_PREV
Definition: fontview.h:16
static void ZoomInOrOut(BOOL bZoomIn)
Definition: shimgvw.c:183
#define BN_CLICKED
Definition: winuser.h:1907
HWND hDispWnd
Definition: shimgvw.c:41
CHAR Message[80]
Definition: alive.c:5
#define IDC_ZOOMP
Definition: resource.h:22
static const WCHAR L[]
Definition: oid.c:1250
static VOID ImageView_OnMouseWheel(HWND hwnd, INT x, INT y, INT zDelta, UINT fwKeys)
Definition: shimgvw.c:824
#define WM_COMMAND
Definition: winuser.h:1722
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define GWLP_WNDPROC
Definition: treelist.c:66
#define IDS_TOOLTIP_SAVEAS
Definition: resource.h:60
#define VK_RIGHT
Definition: winuser.h:2201
struct SHIMGVW_FILENODE_INTERNAL * Prev
Definition: shimgvw.h:20
unsigned int UINT
Definition: ndis.h:50
HINSTANCE hInstance
Definition: shimgvw.c:35
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:275
#define SendMessage
Definition: winuser.h:5818
#define WM_CREATE
Definition: winuser.h:1590
HWND hToolBar
Definition: shimgvw.c:41
#define HIWORD(l)
Definition: typedefs.h:246
static void pSaveImageAs(HWND hwnd)
Definition: shimgvw.c:314
LONG bottom
Definition: windef.h:309
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
static VOID ImageView_InitControls(HWND hwnd)
Definition: shimgvw.c:805
static VOID ImageView_SaveSettings(HWND hwnd)
Definition: shimgvw.c:686
#define IDC_PRINT
Definition: fontview.h:14
LPARAM lParam
Definition: combotst.c:139
#define IDS_TOOLTIP_ROT_CLOCKW
Definition: resource.h:57
#define LOWORD(l)
Definition: pedump.c:82
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_NOTIFY
Definition: richedit.h:61
#define IDS_TOOLTIP_PRINT
Definition: resource.h:59

Referenced by ImageView_CreateWindow().

◆ pBuildFileList()

static SHIMGVW_FILENODE* pBuildFileList ( LPWSTR  szFirstFile)
static

Definition at line 448 of file shimgvw.c.

449 {
450  HANDLE hFindHandle;
451  WCHAR *extension;
452  WCHAR szSearchPath[MAX_PATH];
453  WCHAR szSearchMask[MAX_PATH];
454  WCHAR szFileTypes[MAX_PATH];
455  WIN32_FIND_DATAW findData;
456  SHIMGVW_FILENODE *currentNode = NULL;
458  SHIMGVW_FILENODE *conductor = NULL;
459  ImageCodecInfo *codecInfo;
460  UINT num;
461  UINT size;
462  UINT j;
463 
464  StringCbCopyW(szSearchPath, sizeof(szSearchPath), szFirstFile);
465  PathRemoveFileSpecW(szSearchPath);
466 
468  codecInfo = malloc(size);
469  if (!codecInfo)
470  {
471  DPRINT1("malloc() failed in pLoadFileList()\n");
472  return NULL;
473  }
474 
475  GdipGetImageDecoders(num, size, codecInfo);
476 
477  root = malloc(sizeof(SHIMGVW_FILENODE));
478  if (!root)
479  {
480  DPRINT1("malloc() failed in pLoadFileList()\n");
481  free(codecInfo);
482  return NULL;
483  }
484 
485  conductor = root;
486 
487  for (j = 0; j < num; ++j)
488  {
489  StringCbCopyW(szFileTypes, sizeof(szFileTypes), codecInfo[j].FilenameExtension);
490 
491  extension = wcstok(szFileTypes, L";");
492  while (extension != NULL)
493  {
494  PathCombineW(szSearchMask, szSearchPath, extension);
495 
496  hFindHandle = FindFirstFileW(szSearchMask, &findData);
497  if (hFindHandle != INVALID_HANDLE_VALUE)
498  {
499  do
500  {
501  PathCombineW(conductor->FileName, szSearchPath, findData.cFileName);
502 
503  // compare the name of the requested file with the one currently found.
504  // if the name matches, the current node is returned by the function.
505  if (wcscmp(szFirstFile, conductor->FileName) == 0)
506  {
507  currentNode = conductor;
508  }
509 
510  conductor->Next = malloc(sizeof(SHIMGVW_FILENODE));
511 
512  // if malloc fails, make circular what we have and return it
513  if (!conductor->Next)
514  {
515  DPRINT1("malloc() failed in pLoadFileList()\n");
516 
517  conductor->Next = root;
518  root->Prev = conductor;
519 
520  FindClose(hFindHandle);
521  free(codecInfo);
522  return conductor;
523  }
524 
525  conductor->Next->Prev = conductor;
526  conductor = conductor->Next;
527  }
528  while (FindNextFileW(hFindHandle, &findData) != 0);
529 
530  FindClose(hFindHandle);
531  }
532 
533  extension = wcstok(NULL, L";");
534  }
535  }
536 
537  // we now have a node too much in the list. In case the requested file was not found,
538  // we use this node to store the name of it, otherwise we free it.
539  if (currentNode == NULL)
540  {
541  StringCchCopyW(conductor->FileName, MAX_PATH, szFirstFile);
542  currentNode = conductor;
543  }
544  else
545  {
546  conductor = conductor->Prev;
547  free(conductor->Next);
548  }
549 
550  // link the last node with the first one to make the list circular
551  conductor->Next = root;
552  root->Prev = conductor;
553  conductor = currentNode;
554 
555  free(codecInfo);
556 
557  return conductor;
558 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
Definition: path.c:624
#define free
Definition: debug_ros.c:5
struct _root root
_Check_return_ _CRTIMP wchar_t *__cdecl wcstok(_Inout_opt_z_ wchar_t *_Str, _In_z_ const wchar_t *_Delim)
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
struct SHIMGVW_FILENODE_INTERNAL * Next
Definition: shimgvw.h:21
GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT *numDecoders, UINT *size)
Definition: image.c:4946
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipGetImageDecoders(UINT numDecoders, UINT size, ImageCodecInfo *decoders)
Definition: image.c:4970
WCHAR FileName[MAX_PATH]
Definition: shimgvw.h:19
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
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
GLuint GLuint num
Definition: glext.h:9618
static const WCHAR L[]
Definition: oid.c:1250
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
struct SHIMGVW_FILENODE_INTERNAL * Prev
Definition: shimgvw.h:20
unsigned int UINT
Definition: ndis.h:50
#define DPRINT1
Definition: precomp.h:8
#define malloc
Definition: debug_ros.c:4
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:189
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by ImageView_CreateWindow().

◆ pFreeFileList()

static VOID pFreeFileList ( SHIMGVW_FILENODE root)
static

Definition at line 561 of file shimgvw.c.

562 {
563  SHIMGVW_FILENODE *conductor;
564 
565  root->Prev->Next = NULL;
566  root->Prev = NULL;
567 
568  while (root)
569  {
570  conductor = root;
571  root = conductor->Next;
572  free(conductor);
573  }
574 }
#define free
Definition: debug_ros.c:5
struct _root root
struct SHIMGVW_FILENODE_INTERNAL * Next
Definition: shimgvw.h:21
smooth NULL
Definition: ftsmooth.c:416

Referenced by ImageView_CreateWindow().

◆ pLoadImage()

static void pLoadImage ( LPWSTR  szOpenFileName)
static

Definition at line 289 of file shimgvw.c.

290 {
291  /* check file presence */
292  if (GetFileAttributesW(szOpenFileName) == 0xFFFFFFFF)
293  {
294  DPRINT1("File %s not found!\n", szOpenFileName);
295  return;
296  }
297 
298  /* load now */
299  GdipLoadImageFromFile(szOpenFileName, &image);
300  if (!image)
301  {
302  DPRINT1("GdipLoadImageFromFile() failed\n");
303  return;
304  }
305  Anime_LoadInfo();
306 
307  /* reset zoom */
308  ResetZoom();
309 
310  /* redraw */
312 }
#define TRUE
Definition: types.h:120
static void ResetZoom(void)
Definition: shimgvw.c:233
GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR *filename, GpImage **image)
Definition: image.c:2928
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:802
smooth NULL
Definition: ftsmooth.c:416
static BOOL Anime_LoadInfo(void)
Definition: shimgvw.c:74
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HWND hDispWnd
Definition: shimgvw.c:41
#define DPRINT1
Definition: precomp.h:8

Referenced by ImageView_CreateWindow(), and pLoadImageFromNode().

◆ pLoadImageFromNode()

static VOID pLoadImageFromNode ( SHIMGVW_FILENODE node,
HWND  hwnd 
)
static

Definition at line 420 of file shimgvw.c.

421 {
422  WCHAR szTitleBuf[800];
423  WCHAR szResStr[512];
424  WCHAR *c;
425 
426  if (node)
427  {
428  c = wcsrchr(node->FileName, '\\');
429  if (c)
430  {
431  c++;
432  }
433 
434  LoadStringW(hInstance, IDS_APPTITLE, szResStr, ARRAYSIZE(szResStr));
435  StringCbPrintfW(szTitleBuf, sizeof(szTitleBuf), L"%ls%ls%ls", szResStr, L" - ", c);
436  SetWindowTextW(hwnd, szTitleBuf);
437 
438  if (image)
439  {
441  }
442 
443  pLoadImage(node->FileName);
444  }
445 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define IDS_APPTITLE
Definition: resource.h:3
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
__wchar_t WCHAR
Definition: xmlstorage.h:180
const GLubyte * c
Definition: glext.h:8905
static const WCHAR L[]
Definition: oid.c:1250
GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
Definition: image.c:2107
static void pLoadImage(LPWSTR szOpenFileName)
Definition: shimgvw.c:289
HINSTANCE hInstance
Definition: shimgvw.c:35
#define c
Definition: ke_i.h:80
Definition: dlist.c:348

Referenced by ImageView_CreateWindow(), and ImageView_WndProc().

◆ pSaveImageAs()

static void pSaveImageAs ( HWND  hwnd)
static

Definition at line 314 of file shimgvw.c.

315 {
317  ImageCodecInfo *codecInfo;
318  WCHAR szSaveFileName[MAX_PATH];
319  WCHAR *szFilterMask;
320  GUID rawFormat;
321  UINT num;
322  UINT size;
323  size_t sizeRemain;
324  UINT j;
325  WCHAR *c;
326 
328  codecInfo = malloc(size);
329  if (!codecInfo)
330  {
331  DPRINT1("malloc() failed in pSaveImageAs()\n");
332  return;
333  }
334 
335  GdipGetImageEncoders(num, size, codecInfo);
336  GdipGetImageRawFormat(image, &rawFormat);
337 
338  sizeRemain = 0;
339 
340  for (j = 0; j < num; ++j)
341  {
342  // 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.
343  sizeRemain = sizeRemain + (((wcslen(codecInfo[j].FormatDescription) + (wcslen(codecInfo[j].FilenameExtension) * 2) + 5) * sizeof(WCHAR)));
344  }
345 
346  /* Add two more chars for the last terminator */
347  sizeRemain = sizeRemain + (sizeof(WCHAR) * 2);
348 
349  szFilterMask = malloc(sizeRemain);
350  if (!szFilterMask)
351  {
352  DPRINT1("cannot allocate memory for filter mask in pSaveImageAs()");
353  free(codecInfo);
354  return;
355  }
356 
357  ZeroMemory(szSaveFileName, sizeof(szSaveFileName));
358  ZeroMemory(szFilterMask, sizeRemain);
359  ZeroMemory(&sfn, sizeof(sfn));
360  sfn.lStructSize = sizeof(sfn);
361  sfn.hwndOwner = hwnd;
363  sfn.lpstrFile = szSaveFileName;
364  sfn.lpstrFilter = szFilterMask;
367 
368  c = szFilterMask;
369 
370  for (j = 0; j < num; ++j)
371  {
372  StringCbPrintfExW(c, sizeRemain, &c, &sizeRemain, 0, L"%ls (%ls)", codecInfo[j].FormatDescription, codecInfo[j].FilenameExtension);
373 
374  /* Skip the NULL character */
375  c++;
376  sizeRemain -= sizeof(*c);
377 
378  StringCbPrintfExW(c, sizeRemain, &c, &sizeRemain, 0, L"%ls", codecInfo[j].FilenameExtension);
379 
380  /* Skip the NULL character */
381  c++;
382  sizeRemain -= sizeof(*c);
383 
384  if (IsEqualGUID(&rawFormat, &codecInfo[j].FormatID) != FALSE)
385  {
386  sfn.nFilterIndex = j + 1;
387  }
388  }
389 
390  if (GetSaveFileNameW(&sfn))
391  {
392  if (m_pDelayItem)
393  {
394  /* save animation */
396 
397  DPRINT1("FIXME: save animation\n");
398  if (GdipSaveImageToFile(image, szSaveFileName, &codecInfo[sfn.nFilterIndex - 1].Clsid, NULL) != Ok)
399  {
400  DPRINT1("GdipSaveImageToFile() failed\n");
401  }
402 
404  }
405  else
406  {
407  /* save non-animation */
408  if (GdipSaveImageToFile(image, szSaveFileName, &codecInfo[sfn.nFilterIndex - 1].Clsid, NULL) != Ok)
409  {
410  DPRINT1("GdipSaveImageToFile() failed\n");
411  }
412  }
413  }
414 
415  free(szFilterMask);
416  free(codecInfo);
417 }
HINSTANCE hInstance
Definition: commdlg.h:362
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
DWORD Flags
Definition: commdlg.h:373
GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders)
Definition: image.c:5021
LPCWSTR lpstrFilter
Definition: commdlg.h:363
#define free
Definition: debug_ros.c:5
LPWSTR lpstrFile
Definition: commdlg.h:367
#define ZeroMemory
Definition: winbase.h:1642
GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage *image, GDIPCONST WCHAR *filename, GDIPCONST CLSID *clsidEncoder, GDIPCONST EncoderParameters *encoderParams)
Definition: image.c:4428
#define ANIME_TIMER_ID
Definition: shimgvw.c:59
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4630
DWORD lStructSize
Definition: commdlg.h:360
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage *image, GUID *format)
Definition: image.c:2306
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
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
DWORD nFilterIndex
Definition: commdlg.h:366
GLsizeiptr size
Definition: glext.h:5919
OPENFILENAMEW sfn
Definition: eventvwr.c:118
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
const GLubyte * c
Definition: glext.h:8905
GLuint GLuint num
Definition: glext.h:9618
DWORD nMaxFile
Definition: commdlg.h:368
HWND hDispWnd
Definition: shimgvw.c:41
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
HWND hwndOwner
Definition: commdlg.h:361
static const WCHAR L[]
Definition: oid.c:1250
PropertyItem * m_pDelayItem
Definition: shimgvw.c:57
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size)
Definition: image.c:4997
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
STRSAFEAPI StringCbPrintfExW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:623
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
HINSTANCE hInstance
Definition: shimgvw.c:35
#define DPRINT1
Definition: precomp.h:8
#define c
Definition: ke_i.h:80
#define malloc
Definition: debug_ros.c:4
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

Referenced by ImageView_WndProc().

◆ ResetZoom()

static void ResetZoom ( void  )
static

Definition at line 233 of file shimgvw.c.

234 {
235  RECT Rect;
236  UINT ImageWidth, ImageHeight;
237 
238  /* get disp window size and image size */
240  GdipGetImageWidth(image, &ImageWidth);
241  GdipGetImageHeight(image, &ImageHeight);
242 
243  /* compare two aspect rates. same as
244  (ImageHeight / ImageWidth < Rect.bottom / Rect.right) in real */
245  if (ImageHeight * Rect.right < Rect.bottom * ImageWidth)
246  {
247  if (Rect.right < ImageWidth)
248  {
249  /* it's large, shrink it */
250  ZoomPercents = (Rect.right * 100) / ImageWidth;
251  }
252  else
253  {
254  /* it's small. show as original size */
255  ZoomPercents = 100;
256  }
257  }
258  else
259  {
260  if (Rect.bottom < ImageHeight)
261  {
262  /* it's large, shrink it */
263  ZoomPercents = (Rect.bottom * 100) / ImageHeight;
264  }
265  else
266  {
267  /* it's small. show as original size */
268  ZoomPercents = 100;
269  }
270  }
271 }
GpStatus WINGDIPAPI GdipGetImageWidth(GpImage *image, UINT *width)
Definition: image.c:2342
UINT ZoomPercents
Definition: shimgvw.c:46
GpStatus WINGDIPAPI GdipGetImageHeight(GpImage *image, UINT *height)
Definition: image.c:2239
HWND hDispWnd
Definition: shimgvw.c:41
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
unsigned int UINT
Definition: ndis.h:50
struct Rect Rect

Referenced by ImageView_WndProc(), and pLoadImage().

◆ ZoomInOrOut()

static void ZoomInOrOut ( BOOL  bZoomIn)
static

Definition at line 183 of file shimgvw.c.

184 {
185  INT i;
186 
187  if (bZoomIn) /* zoom in */
188  {
189  /* find next step */
190  for (i = 0; i < ARRAYSIZE(ZoomSteps); ++i)
191  {
192  if (ZoomPercents < ZoomSteps[i])
193  break;
194  }
195  if (i == ARRAYSIZE(ZoomSteps))
197  else
199 
200  /* update tool bar buttons */
202  if (ZoomPercents >= MAX_ZOOM)
204  else
206  }
207  else /* zoom out */
208  {
209  /* find previous step */
210  for (i = ARRAYSIZE(ZoomSteps); i > 0; )
211  {
212  --i;
213  if (ZoomSteps[i] < ZoomPercents)
214  break;
215  }
216  if (i < 0)
218  else
220 
221  /* update tool bar buttons */
223  if (ZoomPercents <= MIN_ZOOM)
225  else
227  }
228 
229  /* redraw */
231 }
#define TRUE
Definition: types.h:120
#define IDC_ZOOMM
Definition: resource.h:23
UINT ZoomPercents
Definition: shimgvw.c:46
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define MAX_ZOOM
Definition: shimgvw.c:45
int32_t INT
Definition: typedefs.h:56
static const UINT ZoomSteps[]
Definition: shimgvw.c:47
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
#define TB_ENABLEBUTTON
Definition: commctrl.h:1038
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
HWND hDispWnd
Definition: shimgvw.c:41
#define IDC_ZOOMP
Definition: resource.h:22
#define MIN_ZOOM
Definition: shimgvw.c:44
#define SendMessage
Definition: winuser.h:5818
HWND hToolBar
Definition: shimgvw.c:41

Referenced by ImageView_OnMouseWheel(), and ImageView_WndProc().

Variable Documentation

◆ Buttons

const TBBUTTON Buttons[]
static
Initial value:
=
{
{15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
{15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
{15, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
}
#define TBICON_SAVE
Definition: resource.h:33
#define IDC_ZOOMM
Definition: resource.h:23
#define IDC_NEXT
Definition: fontview.h:17
#define IDC_ROT2
Definition: resource.h:27
#define IDC_SAVE
Definition: resource.h:16
#define TBICON_ROT2
Definition: resource.h:36
#define IDC_ROT1
Definition: resource.h:26
#define BTNS_BUTTON
Definition: commctrl.h:994
#define TBICON_PRINT
Definition: resource.h:34
#define BTNS_SEP
Definition: commctrl.h:995
#define IDC_PREV
Definition: fontview.h:16
#define TBICON_ZOOMM
Definition: resource.h:32
#define IDC_ZOOMP
Definition: resource.h:22
#define TBICON_PREV
Definition: resource.h:29
#define TBICON_ROT1
Definition: resource.h:35
#define TBICON_ZOOMP
Definition: resource.h:31
#define TBICON_NEXT
Definition: resource.h:30
#define TBSTATE_ENABLED
Definition: commctrl.h:970
#define IDC_PRINT
Definition: fontview.h:14

Definition at line 274 of file shimgvw.c.

Referenced by ImageView_CreateToolBar().

◆ currentFile

SHIMGVW_FILENODE* currentFile

Definition at line 37 of file shimgvw.c.

Referenced by ImageView_CreateWindow(), and ImageView_WndProc().

◆ hDispWnd

◆ hInstance

◆ hToolBar

HWND hToolBar

Definition at line 41 of file shimgvw.c.

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

◆ image

Definition at line 38 of file shimgvw.c.

◆ m_nFrameCount

UINT m_nFrameCount = 0

◆ m_nFrameIndex

UINT m_nFrameIndex = 0

Definition at line 53 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 56 of file shimgvw.c.

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

◆ m_nLoopIndex

UINT m_nLoopIndex = 0

Definition at line 55 of file shimgvw.c.

Referenced by Anime_FreeInfo(), and Anime_Step().

◆ m_pDelayItem

PropertyItem* m_pDelayItem = NULL

Definition at line 57 of file shimgvw.c.

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

◆ PrevProc

WNDPROC PrevProc = NULL

Definition at line 39 of file shimgvw.c.

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

◆ shiSettings

◆ ZoomPercents

UINT ZoomPercents = 100

Definition at line 46 of file shimgvw.c.

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

◆ ZoomSteps

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

Definition at line 47 of file shimgvw.c.

Referenced by ZoomInOrOut().