1ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*------------------------------------ 2ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * VisualPng.C -- Shows a PNG image 3ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *------------------------------------ 4ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 5ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * Copyright 2000, Willem van Schaik. 6ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 7ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * This code is released under the libpng license. 8ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * For conditions of distribution and use, see the disclaimer 9ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * and license in png.h 10ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 11893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 12ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* switches */ 13a0bb96c34e65378853ee518bac502842d26c2d1aPatrick Scott 14ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* defines */ 15893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 16893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define PROGNAME "VisualPng" 17893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define LONGNAME "Win32 Viewer for PNG-files" 18893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define VERSION "1.0 of 2000 June 07" 19893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* constants */ 21893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 22893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define MARGIN 8 23893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 24ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* standard includes */ 25893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 26893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include <stdio.h> 27893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include <stdlib.h> 28893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include <string.h> 29893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include <windows.h> 30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#include <zlib.h> 31893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 32ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* application includes */ 33893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 34893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include "png.h" 35893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include "pngfile.h" 36893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include "resource.h" 37893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* macros */ 39893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* function prototypes */ 41893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 42893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectLRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 43893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; 44893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 45893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL CenterAbout (HWND hwndChild, HWND hwndParent); 46893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 47893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL BuildPngList (PTSTR pstrPathName, TCHAR **ppFileList, int *pFileCount, 48893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int *pFileIndex); 49893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 50893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL SearchPngList (TCHAR *pFileList, int FileCount, int *pFileIndex, 51893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PTSTR pstrPrevName, PTSTR pstrNextName); 52893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 53893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL LoadImageFile(HWND hwnd, PTSTR pstrPathName, 54893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte **ppbImage, int *pxImgSize, int *pyImgSize, int *piChannels, 55893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_color *pBkgColor); 56893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 57893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL DisplayImage (HWND hwnd, BYTE **ppDib, 58893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE **ppDiData, int cxWinSize, int cyWinSize, 59893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels, 60893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bStretched); 61893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 62893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL InitBitmap ( 63893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pDiData, int cxWinSize, int cyWinSize); 64893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 65893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL FillBitmap ( 66893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pDiData, int cxWinSize, int cyWinSize, 67893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels, 68893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bStretched); 69893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* a few global variables */ 71893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 72893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic char *szProgName = PROGNAME; 73893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic char *szAppName = LONGNAME; 74893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic char *szIconName = PROGNAME; 75893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic char szCmdFileName [MAX_PATH]; 76893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 77ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* MAIN routine */ 78893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 79893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 80893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PSTR szCmdLine, int iCmdShow) 81893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 82893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project HACCEL hAccel; 83893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project HWND hwnd; 84893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project MSG msg; 85893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WNDCLASS wndclass; 86893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int ixBorders, iyBorders; 87893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 88893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.style = CS_HREDRAW | CS_VREDRAW; 89893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.lpfnWndProc = WndProc; 90893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.cbClsExtra = 0; 91893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.cbWndExtra = 0; 92893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.hInstance = hInstance; 93893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.hIcon = LoadIcon (hInstance, szIconName) ; 94893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); 95ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik wndclass.hbrBackground = NULL; /* (HBRUSH) GetStockObject (GRAY_BRUSH); */ 96893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.lpszMenuName = szProgName; 97893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wndclass.lpszClassName = szProgName; 98893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 99893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!RegisterClass (&wndclass)) 100893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 101893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project MessageBox (NULL, TEXT ("Error: this program requires Windows NT!"), 102893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project szProgName, MB_ICONERROR); 103893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 104893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 105893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* if filename given on commandline, store it */ 107893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ((szCmdLine != NULL) && (*szCmdLine != '\0')) 108893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (szCmdLine[0] == '"') 109893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strncpy (szCmdFileName, szCmdLine + 1, strlen(szCmdLine) - 2); 110893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 111893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szCmdFileName, szCmdLine); 112893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 113893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szCmdFileName, ""); 114893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* calculate size of window-borders */ 116893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ixBorders = 2 * (GetSystemMetrics (SM_CXBORDER) + 117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetSystemMetrics (SM_CXDLGFRAME)); 118893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project iyBorders = 2 * (GetSystemMetrics (SM_CYBORDER) + 119893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetSystemMetrics (SM_CYDLGFRAME)) + 120893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetSystemMetrics (SM_CYCAPTION) + 121893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetSystemMetrics (SM_CYMENUSIZE) + 122ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 1; /* WvS: don't ask me why? */ 123893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 124893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hwnd = CreateWindow (szProgName, szAppName, 125893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WS_OVERLAPPEDWINDOW, 126893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project CW_USEDEFAULT, CW_USEDEFAULT, 127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 512 + 2 * MARGIN + ixBorders, 384 + 2 * MARGIN + iyBorders, 128ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* CW_USEDEFAULT, CW_USEDEFAULT, */ 129893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project NULL, NULL, hInstance, NULL); 130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 131893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowWindow (hwnd, iCmdShow); 132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project UpdateWindow (hwnd); 133893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 134893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hAccel = LoadAccelerators (hInstance, szProgName); 135893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 136893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project while (GetMessage (&msg, NULL, 0, 0)) 137893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 138893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!TranslateAccelerator (hwnd, hAccel, &msg)) 139893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 140893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project TranslateMessage (&msg); 141893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DispatchMessage (&msg); 142893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 143893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 144893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return msg.wParam; 145893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 146893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 147893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectLRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, 148893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project LPARAM lParam) 149893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 150893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static HINSTANCE hInstance ; 151893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static HDC hdc; 152893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static PAINTSTRUCT ps; 153893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static HMENU hMenu; 154893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 155893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BITMAPFILEHEADER *pbmfh; 156893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BITMAPINFOHEADER *pbmih; 157893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BYTE *pbImage; 158893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static int cxWinSize, cyWinSize; 159893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static int cxImgSize, cyImgSize; 160893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static int cImgChannels; 161893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static png_color bkgColor = {127, 127, 127}; 162893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 163893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BOOL bStretched = TRUE; 164893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 165893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BYTE *pDib = NULL; 166893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static BYTE *pDiData = NULL; 167893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 168893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szImgPathName [MAX_PATH]; 169893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szTitleName [MAX_PATH]; 170893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 171893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR *pPngFileList = NULL; 172893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static int iPngFileCount; 173893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static int iPngFileIndex; 174893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 175893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bOk; 176893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 177893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project switch (message) 178893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 179893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_CREATE: 180893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; 181893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PngFileInitialize (hwnd); 182893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 183893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szImgPathName, ""); 184893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 185ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* in case we process file given on command-line */ 186893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 187893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (szCmdFileName[0] != '\0') 188893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 189893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szImgPathName, szCmdFileName); 190893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 191ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* read the other png-files in the directory for later */ 192ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* next/previous commands */ 193893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 194893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount, 195893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &iPngFileIndex); 196893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 197ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* load the image from file */ 198893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 199893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!LoadImageFile (hwnd, szImgPathName, 200893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor)) 201893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 202893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 203ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 204893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 205893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 206893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 207ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 208893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 209893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 210893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 211893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 212893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 213893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 214893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 215893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_SIZE: 216893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxWinSize = LOWORD (lParam); 217893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyWinSize = HIWORD (lParam); 218893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 219ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 220893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 221893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 222893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 223ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 224893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 225893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 226893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 227893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 228893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 229893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 230893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_INITMENUPOPUP: 231893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hMenu = GetMenu (hwnd); 232893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 233893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pbImage) 234893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_ENABLED); 235893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 236893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project EnableMenuItem (hMenu, IDM_FILE_SAVE, MF_GRAYED); 237893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 238893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 239893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 240893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_COMMAND: 241893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hMenu = GetMenu (hwnd); 242893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 243893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project switch (LOWORD (wParam)) 244893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 245893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_FILE_OPEN: 246893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 247ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* show the File Open dialog box */ 248893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 249893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!PngFileOpenDlg (hwnd, szImgPathName, szTitleName)) 250893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 251893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 252ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* read the other png-files in the directory for later */ 253ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* next/previous commands */ 254893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 255893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BuildPngList (szImgPathName, &pPngFileList, &iPngFileCount, 256893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &iPngFileIndex); 257893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 258ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* load the image from file */ 259893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 260893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!LoadImageFile (hwnd, szImgPathName, 261893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &pbImage, &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor)) 262893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 263893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 264ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 265893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 266893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 267893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 268ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 269893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 270893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 271893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 272893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 273893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 274893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 275893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_FILE_SAVE: 276893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 277ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* show the File Save dialog box */ 278893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 279893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!PngFileSaveDlg (hwnd, szImgPathName, szTitleName)) 280893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 281893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 282ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* save the PNG to a disk file */ 283893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 284893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetCursor (LoadCursor (NULL, IDC_WAIT)); 285893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowCursor (TRUE); 286893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 287893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bOk = PngSaveImage (szImgPathName, pDiData, cxWinSize, cyWinSize, 288893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bkgColor); 289893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 290893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowCursor (FALSE); 291893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetCursor (LoadCursor (NULL, IDC_ARROW)); 292893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 293893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!bOk) 294893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project MessageBox (hwnd, TEXT ("Error in saving the PNG image"), 295893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project szProgName, MB_ICONEXCLAMATION | MB_OK); 296893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 297893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 298893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_FILE_NEXT: 299893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 300ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* read next entry in the directory */ 301893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 302893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex, 303893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project NULL, szImgPathName)) 304893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 305893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (strcmp (szImgPathName, "") == 0) 306893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 307ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 308ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* load the image from file */ 309ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 310893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!LoadImageFile (hwnd, szImgPathName, &pbImage, 311893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &cxImgSize, &cyImgSize, &cImgChannels, &bkgColor)) 312893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 313ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 314ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 315ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 316893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 317ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 318ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 319ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 320893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 321893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 322893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 323ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 324893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 325893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 326893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_FILE_PREVIOUS: 327893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 328ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* read previous entry in the directory */ 329893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 330893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (SearchPngList (pPngFileList, iPngFileCount, &iPngFileIndex, 331893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project szImgPathName, NULL)) 332893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 333ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 334893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (strcmp (szImgPathName, "") == 0) 335893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 336ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 337ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* load the image from file */ 338ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 339893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!LoadImageFile (hwnd, szImgPathName, &pbImage, &cxImgSize, 340893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &cyImgSize, &cImgChannels, &bkgColor)) 341893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 342ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 343ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 344ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 345893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 346ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 347ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 348ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 349893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 350893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 351893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 352893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 353893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 354893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 355893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_FILE_EXIT: 356893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 357ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* more cleanup needed... */ 358893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 359ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* free image buffer */ 360893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 361893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pDib != NULL) 362893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 363893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (pDib); 364893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pDib = NULL; 365893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 366893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 367ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* free file-list */ 368893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 369893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pPngFileList != NULL) 370893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 371893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (pPngFileList); 372893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pPngFileList = NULL; 373893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 374893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 375ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* let's go ... */ 376893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 377893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project exit (0); 378893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 379893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 380893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 381893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_OPTIONS_STRETCH: 382893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bStretched = !bStretched; 383893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (bStretched) 384893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_CHECKED); 385893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 386893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project CheckMenuItem (hMenu, IDM_OPTIONS_STRETCH, MF_UNCHECKED); 387893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 388ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* invalidate the client area for later update */ 389893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 390893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InvalidateRect (hwnd, NULL, TRUE); 391893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 392ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* display the PNG into the DIBitmap */ 393893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 394893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DisplayImage (hwnd, &pDib, &pDiData, cxWinSize, cyWinSize, 395893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, bStretched); 396893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 397893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 398893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 399893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDM_HELP_ABOUT: 400893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ; 401893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 402893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 403ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik } /* end switch */ 404893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 405893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break; 406893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 407893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_PAINT: 408893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hdc = BeginPaint (hwnd, &ps); 409893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 410893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pDib) 411893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetDIBitsToDevice (hdc, 0, 0, cxWinSize, cyWinSize, 0, 0, 412893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0, cyWinSize, pDiData, (BITMAPINFO *) pDib, DIB_RGB_COLORS); 413893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 414893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project EndPaint (hwnd, &ps); 415893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 416893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 417893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_DESTROY: 418893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pbmfh) 419893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 420893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (pbmfh); 421893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmfh = NULL; 422893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 423893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 424893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PostQuitMessage (0); 425893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return 0; 426893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 427893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 428893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return DefWindowProc (hwnd, message, wParam, lParam); 429893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 430893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 431893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, 432893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WPARAM wParam, LPARAM lParam) 433893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 434893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project switch (message) 435893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 436893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_INITDIALOG : 437893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowWindow (hDlg, SW_HIDE); 438893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project CenterAbout (hDlg, GetWindow (hDlg, GW_OWNER)); 439893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowWindow (hDlg, SW_SHOW); 440893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE ; 441893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 442893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case WM_COMMAND : 443893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project switch (LOWORD (wParam)) 444893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 445893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDOK : 446893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project case IDCANCEL : 447893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project EndDialog (hDlg, 0) ; 448893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE ; 449893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 450893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break ; 451893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 452893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return FALSE ; 453893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 454893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 455ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*--------------- 456ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * CenterAbout 457ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *--------------- 458ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 459893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL CenterAbout (HWND hwndChild, HWND hwndParent) 460893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 461893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project RECT rChild, rParent, rWorkArea; 462893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int wChild, hChild, wParent, hParent; 463893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int xNew, yNew; 464893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bResult; 465893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 466ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Get the Height and Width of the child window */ 467893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetWindowRect (hwndChild, &rChild); 468893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wChild = rChild.right - rChild.left; 469893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hChild = rChild.bottom - rChild.top; 470893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 471ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Get the Height and Width of the parent window */ 472893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project GetWindowRect (hwndParent, &rParent); 473893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wParent = rParent.right - rParent.left; 474893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hParent = rParent.bottom - rParent.top; 475893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 476ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Get the limits of the 'workarea' */ 477893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bResult = SystemParametersInfo( 478ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik SPI_GETWORKAREA, /* system parameter to query or set */ 479893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sizeof(RECT), 480893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project &rWorkArea, 481893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0); 482893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!bResult) { 483893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rWorkArea.left = rWorkArea.top = 0; 484893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rWorkArea.right = GetSystemMetrics(SM_CXSCREEN); 485893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN); 486893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 487893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 488ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Calculate new X position, then adjust for workarea */ 489893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project xNew = rParent.left + ((wParent - wChild) /2); 490893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (xNew < rWorkArea.left) { 491893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project xNew = rWorkArea.left; 492893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } else if ((xNew+wChild) > rWorkArea.right) { 493893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project xNew = rWorkArea.right - wChild; 494893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 495893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 496ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Calculate new Y position, then adjust for workarea */ 497893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project yNew = rParent.top + ((hParent - hChild) /2); 498893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (yNew < rWorkArea.top) { 499893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project yNew = rWorkArea.top; 500893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } else if ((yNew+hChild) > rWorkArea.bottom) { 501893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project yNew = rWorkArea.bottom - hChild; 502893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 503893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 504ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Set it, and return */ 505893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | 506893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SWP_NOZORDER); 507893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 508893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 509ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*---------------- 510ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * BuildPngList 511ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *---------------- 512ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 513893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL BuildPngList (PTSTR pstrPathName, TCHAR **ppFileList, int *pFileCount, 514893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int *pFileIndex) 515893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 516893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szImgPathName [MAX_PATH]; 517893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szImgFileName [MAX_PATH]; 518893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szImgFindName [MAX_PATH]; 519893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 520893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WIN32_FIND_DATA finddata; 521893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project HANDLE hFind; 522893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 523893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szTmp [MAX_PATH]; 524893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bOk; 525893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int i, ii; 526893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int j, jj; 527893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 528ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* free previous file-list */ 529893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 530893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*ppFileList != NULL) 531893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 532893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (*ppFileList); 533893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppFileList = NULL; 534893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 535893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 536ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* extract foldername, filename and search-name */ 537893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 538893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szImgPathName, pstrPathName); 539893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szImgFileName, strrchr (pstrPathName, '\\') + 1); 540893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 541893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szImgFindName, szImgPathName); 542893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(strrchr (szImgFindName, '\\') + 1) = '\0'; 543893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcat (szImgFindName, "*.png"); 544893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 545ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* first cycle: count number of files in directory for memory allocation */ 546893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 547893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileCount = 0; 548893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 549893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hFind = FindFirstFile(szImgFindName, &finddata); 550893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bOk = (hFind != (HANDLE) -1); 551893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 552893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project while (bOk) 553893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 554893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileCount += 1; 555893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bOk = FindNextFile(hFind, &finddata); 556893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 557893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project FindClose(hFind); 558893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 559ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* allocation memory for file-list */ 560893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 561893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppFileList = (TCHAR *) malloc (*pFileCount * MAX_PATH); 562893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 563ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* second cycle: read directory and store filenames in file-list */ 564893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 565893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project hFind = FindFirstFile(szImgFindName, &finddata); 566893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bOk = (hFind != (HANDLE) -1); 567893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 568893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project i = 0; 569893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ii = 0; 570893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project while (bOk) 571893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 572893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (*ppFileList + ii, szImgPathName); 573893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (strrchr(*ppFileList + ii, '\\') + 1, finddata.cFileName); 574893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 575893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (strcmp(pstrPathName, *ppFileList + ii) == 0) 576893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex = i; 577893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 578893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ii += MAX_PATH; 579893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project i++; 580893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 581893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bOk = FindNextFile(hFind, &finddata); 582893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 583893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project FindClose(hFind); 584893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 585ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* finally we must sort the file-list */ 586893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 587893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < *pFileCount - 1; i++) 588893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 589893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ii = i * MAX_PATH; 590893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (j = i+1; j < *pFileCount; j++) 591893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 592893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project jj = j * MAX_PATH; 593893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (strcmp (*ppFileList + ii, *ppFileList + jj) > 0) 594893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 595893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (szTmp, *ppFileList + jj); 596893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (*ppFileList + jj, *ppFileList + ii); 597893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (*ppFileList + ii, szTmp); 598893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 599ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* check if this was the current image that we moved */ 600893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 601893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*pFileIndex == i) 602893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex = j; 603893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 604893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*pFileIndex == j) 605893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex = i; 606893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 607893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 608893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 609893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 610893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 611893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 612893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 613ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*---------------- 614ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * SearchPngList 615ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *---------------- 616ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 617893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 618893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL SearchPngList ( 619893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project TCHAR *pFileList, int FileCount, int *pFileIndex, 620893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PTSTR pstrPrevName, PTSTR pstrNextName) 621893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 622893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (FileCount > 0) 623893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 624ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* get previous entry */ 625ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 626893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pstrPrevName != NULL) 627893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 628893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*pFileIndex > 0) 629893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex -= 1; 630893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 631893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex = FileCount - 1; 632ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 633893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (pstrPrevName, pFileList + (*pFileIndex * MAX_PATH)); 634893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 635ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 636ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* get next entry */ 637ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 638893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pstrNextName != NULL) 639893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 640893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*pFileIndex < FileCount - 1) 641893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex += 1; 642893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 643893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pFileIndex = 0; 644ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 645893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project strcpy (pstrNextName, pFileList + (*pFileIndex * MAX_PATH)); 646893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 647ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 648893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 649893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 650893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 651893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 652893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return FALSE; 653893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 654893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 655893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 656ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*----------------- 657ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * LoadImageFile 658ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *----------------- 659ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 660893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 661893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL LoadImageFile (HWND hwnd, PTSTR pstrPathName, 662893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte **ppbImage, int *pxImgSize, int *pyImgSize, 663893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int *piChannels, png_color *pBkgColor) 664893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 665893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project static TCHAR szTmp [MAX_PATH]; 666893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 667ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* if there's an existing PNG, free the memory */ 668893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 669893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*ppbImage) 670893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 671893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (*ppbImage); 672893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppbImage = NULL; 673893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 674893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 675ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Load the entire PNG into memory */ 676893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 677893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetCursor (LoadCursor (NULL, IDC_WAIT)); 678893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowCursor (TRUE); 679893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 680893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project PngLoadImage (pstrPathName, ppbImage, pxImgSize, pyImgSize, piChannels, 681893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pBkgColor); 682893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 683893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project ShowCursor (FALSE); 684893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetCursor (LoadCursor (NULL, IDC_ARROW)); 685893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 686893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (*ppbImage != NULL) 687893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 688893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sprintf (szTmp, "VisualPng - %s", strrchr(pstrPathName, '\\') + 1); 689893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project SetWindowText (hwnd, szTmp); 690893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 691893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 692893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 693893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project MessageBox (hwnd, TEXT ("Error in loading the PNG image"), 694893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project szProgName, MB_ICONEXCLAMATION | MB_OK); 695893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return FALSE; 696893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 697893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 698893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 699893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 700893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 701ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*---------------- 702ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * DisplayImage 703ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *---------------- 704ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 705893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL DisplayImage (HWND hwnd, BYTE **ppDib, 706893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE **ppDiData, int cxWinSize, int cyWinSize, 707893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels, 708893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bStretched) 709893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 710893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pDib = *ppDib; 711893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pDiData = *ppDiData; 712ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* BITMAPFILEHEADER *pbmfh; */ 713893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BITMAPINFOHEADER *pbmih; 714893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WORD wDIRowBytes; 715893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_color bkgBlack = {0, 0, 0}; 716893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_color bkgGray = {127, 127, 127}; 717893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_color bkgWhite = {255, 255, 255}; 718893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 719ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* allocate memory for the Device Independant bitmap */ 720893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 721893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wDIRowBytes = (WORD) ((3 * cxWinSize + 3L) >> 2) << 2; 722893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 723893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pDib) 724893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 725893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (pDib); 726893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pDib = NULL; 727893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 728893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 729893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (!(pDib = (BYTE *) malloc (sizeof(BITMAPINFOHEADER) + 730893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wDIRowBytes * cyWinSize))) 731893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 732893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project MessageBox (hwnd, TEXT ("Error in displaying the PNG image"), 733893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project szProgName, MB_ICONEXCLAMATION | MB_OK); 734893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppDib = pDib = NULL; 735893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return FALSE; 736893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 737893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppDib = pDib; 738893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project memset (pDib, 0, sizeof(BITMAPINFOHEADER)); 739893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 740ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* initialize the dib-structure */ 741893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 742893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih = (BITMAPINFOHEADER *) pDib; 743893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biSize = sizeof(BITMAPINFOHEADER); 744893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biWidth = cxWinSize; 745893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biHeight = -((long) cyWinSize); 746893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biPlanes = 1; 747893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biBitCount = 24; 748893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbmih->biCompression = 0; 749893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pDiData = pDib + sizeof(BITMAPINFOHEADER); 750893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *ppDiData = pDiData; 751893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 752ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* first fill bitmap with gray and image border */ 753893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 754893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project InitBitmap (pDiData, cxWinSize, cyWinSize); 755893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 756ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* then fill bitmap with image */ 757893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 758893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pbImage) 759893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 760893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project FillBitmap ( 761893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pDiData, cxWinSize, cyWinSize, 762893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pbImage, cxImgSize, cyImgSize, cImgChannels, 763893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project bStretched); 764893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 765893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 766893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 767893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 768893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 769ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*-------------- 770ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * InitBitmap 771ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *-------------- 772ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 773893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL InitBitmap (BYTE *pDiData, int cxWinSize, int cyWinSize) 774893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 775893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *dst; 776893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int x, y, col; 777893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 778ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* initialize the background with gray */ 779893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 780893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst = pDiData; 781893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (y = 0; y < cyWinSize; y++) 782893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 783893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project col = 0; 784893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (x = 0; x < cxWinSize; x++) 785893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 786ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* fill with GRAY */ 787893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = 127; 788893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = 127; 789893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = 127; 790893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project col += 3; 791893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 792ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* rows start on 4 byte boundaries */ 793893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project while ((col % 4) != 0) 794893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 795893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst++; 796893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project col++; 797893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 798893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 799893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 800893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 801893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 802893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 803ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*-------------- 804ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * FillBitmap 805ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *-------------- 806ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 807893912bfc2683463dc3e2c445336752d012563d3The Android Open Source ProjectBOOL FillBitmap ( 808893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pDiData, int cxWinSize, int cyWinSize, 809893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pbImage, int cxImgSize, int cyImgSize, int cImgChannels, 810893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BOOL bStretched) 811893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 812893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pStretchedImage; 813893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *pImg; 814893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE *src, *dst; 815893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project BYTE r, g, b, a; 816893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project const int cDIChannels = 3; 817893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WORD wImgRowBytes; 818893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project WORD wDIRowBytes; 819893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int cxNewSize, cyNewSize; 820893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int cxImgPos, cyImgPos; 821893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int xImg, yImg; 822893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int xWin, yWin; 823893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int xOld, yOld; 824893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project int xNew, yNew; 825893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 826893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (bStretched) 827893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 828893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxNewSize = cxWinSize - 2 * MARGIN; 829893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyNewSize = cyWinSize - 2 * MARGIN; 830893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 831ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* stretch the image to it's window determined size */ 832893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 833ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* the following two are mathematically the same, but the first 834ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * has side-effects because of rounding 835ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 836ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* if ((cyNewSize / cxNewSize) > (cyImgSize / cxImgSize)) */ 837893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ((cyNewSize * cxImgSize) > (cyImgSize * cxNewSize)) 838893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 839893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyNewSize = cxNewSize * cyImgSize / cxImgSize; 840893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxImgPos = MARGIN; 841893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyImgPos = (cyWinSize - cyNewSize) / 2; 842893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 843893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 844893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 845893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxNewSize = cyNewSize * cxImgSize / cyImgSize; 846893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyImgPos = MARGIN; 847893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxImgPos = (cxWinSize - cxNewSize) / 2; 848893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 849893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 850893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pStretchedImage = malloc (cImgChannels * cxNewSize * cyNewSize); 851893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pImg = pStretchedImage; 852893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 853893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (yNew = 0; yNew < cyNewSize; yNew++) 854893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 855893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project yOld = yNew * cyImgSize / cyNewSize; 856893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (xNew = 0; xNew < cxNewSize; xNew++) 857893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 858893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project xOld = xNew * cxImgSize / cxNewSize; 859893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 860893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project r = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 0); 861893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project g = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 1); 862893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project b = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) + 2); 863893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pImg++ = r; 864893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pImg++ = g; 865893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pImg++ = b; 866893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (cImgChannels == 4) 867893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 868893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project a = *(pbImage + cImgChannels * ((yOld * cxImgSize) + xOld) 869893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project + 3); 870893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *pImg++ = a; 871893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 872893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 873893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 874893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 875ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* calculate row-bytes */ 876893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 877893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wImgRowBytes = cImgChannels * cxNewSize; 878893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wDIRowBytes = (WORD) ((cDIChannels * cxWinSize + 3L) >> 2) << 2; 879893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 880ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* copy image to screen */ 881893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 882893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (yImg = 0, yWin = cyImgPos; yImg < cyNewSize; yImg++, yWin++) 883893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 884893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (yWin >= cyWinSize - cyImgPos) 885893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break; 886893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project src = pStretchedImage + yImg * wImgRowBytes; 887893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst = pDiData + yWin * wDIRowBytes + cxImgPos * cDIChannels; 888893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 889893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (xImg = 0, xWin = cxImgPos; xImg < cxNewSize; xImg++, xWin++) 890893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 891893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (xWin >= cxWinSize - cxImgPos) 892893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break; 893893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project r = *src++; 894893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project g = *src++; 895893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project b = *src++; 896ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *dst++ = b; /* note the reverse order */ 897893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = g; 898893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = r; 899893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (cImgChannels == 4) 900893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 901893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project a = *src++; 902893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 903893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 904893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 905893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 906ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* free memory */ 907893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 908893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (pStretchedImage != NULL) 909893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 910893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project free (pStretchedImage); 911893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project pStretchedImage = NULL; 912893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 913893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 914893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 915893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 916ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* process the image not-stretched */ 917893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 918893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 919893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 920ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* calculate the central position */ 921893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 922893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxImgPos = (cxWinSize - cxImgSize) / 2; 923893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyImgPos = (cyWinSize - cyImgSize) / 2; 924893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 925ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* check for image larger than window */ 926893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 927893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (cxImgPos < MARGIN) 928893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cxImgPos = MARGIN; 929893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (cyImgPos < MARGIN) 930893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project cyImgPos = MARGIN; 931893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 932ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* calculate both row-bytes */ 933893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 934893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wImgRowBytes = cImgChannels * cxImgSize; 935893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project wDIRowBytes = (WORD) ((cDIChannels * cxWinSize + 3L) >> 2) << 2; 936893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 937ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* copy image to screen */ 938893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 939893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (yImg = 0, yWin = cyImgPos; yImg < cyImgSize; yImg++, yWin++) 940893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 941893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (yWin >= cyWinSize - MARGIN) 942893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break; 943893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project src = pbImage + yImg * wImgRowBytes; 944893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dst = pDiData + yWin * wDIRowBytes + cxImgPos * cDIChannels; 945893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 946893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (xImg = 0, xWin = cxImgPos; xImg < cxImgSize; xImg++, xWin++) 947893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 948893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (xWin >= cxWinSize - MARGIN) 949893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project break; 950893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project r = *src++; 951893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project g = *src++; 952893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project b = *src++; 953ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *dst++ = b; /* note the reverse order */ 954893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = g; 955893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dst++ = r; 956893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (cImgChannels == 4) 957893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 958893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project a = *src++; 959893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 960893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 961893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 962893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 963893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 964893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return TRUE; 965893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 966893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 967ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/*----------------- 968ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * end of source 969ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik *----------------- 970ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 971