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