Annotation of os232sdk/toolkt20/c/samples/image/img_pnt.c, revision 1.1.1.1

1.1       root        1: /*==============================================================*\
                      2:  *  img_pnt.c - routines for the painting of the main window
                      3:  *      Created 1989, 1990 Microsoft Corp.
                      4:  *--------------------------------------------------------------
                      5:  *
                      6:  *  This module contains the code for the main client window
                      7:  *  painting.
                      8:  *
                      9:  *--------------------------------------------------------------*
                     10:  *
                     11:  *  This source file contains the following functions:
                     12:  *
                     13:  *      PaintUnSizedImage()
                     14:  *      PaintSizedImage()
                     15:  *      PaintDrawImage()
                     16:  *
                     17: \*==============================================================*/
                     18: /*--------------------------------------------------------------*\
                     19:  *  Include files, macros, defined constants, and externs       *
                     20: \*--------------------------------------------------------------*/
                     21: #define INCL_DOSMEMMGR
                     22: #define INCL_WINMENUS
                     23: #define INCL_WINFRAMEMGR
                     24: #define INCL_WINPOINTERS
                     25: #define INCL_GPIPRIMITIVES
                     26: #define INCL_GPIBITMAPS
                     27: 
                     28: #include <os2.h>
                     29: #include <string.h>
                     30: #include "img_main.h"
                     31: #include "img_xtrn.h"
                     32: 
                     33: /****************************************************************\
                     34:  *  Draw Image Routine                                          *
                     35:  *--------------------------------------------------------------*
                     36:  *                                                              *
                     37:  *  Name:    PaintDrawImage()                                   *
                     38:  *                                                              *
                     39:  *  Purpose: To draw the image data into the bitmap             *
                     40:  *                                                              *
                     41:  *  Usage:  Routine is called from LoadImage()                  *
                     42:  *                                                              *
                     43:  *  Method:                                                     *
                     44:  *          - creates a memory device context                   *
                     45:  *          - defines a memory presentation space               *
                     46:  *          - associates the memory DC with the memory PS       *
                     47:  *          - creates a bitmap                                  *
                     48:  *          - Selects bitmap into memory DC                     *
                     49:  *          - draws the image data into the bitmap              *
                     50:  *                                                              *
                     51:  *  Returns:                                                    *
                     52: \****************************************************************/
                     53: 
                     54: VOID PaintDrawImage()
                     55: {
                     56:     POINTL ptl;
                     57:     DEVOPENSTRUC dop;
                     58:     BITMAPINFOHEADER2 BmapInfo;
                     59: 
                     60:     if (vfImgLoaded) {
                     61:         /*
                     62:          * The memory presentation space is defined to accommodate a
                     63:          * particular file of image data. If an image has already been
                     64:          * loaded, its resources must be deleted before a new set can be
                     65:          * defined.
                     66:          */
                     67:          GpiDeleteBitmap(vhbm);
                     68:          GpiAssociate(vhpsMem, (HDC)NULL);
                     69:          GpiDestroyPS(vhpsMem);
                     70:          DevCloseDC(vhdcMem);
                     71:     }
                     72: 
                     73:    /*
                     74:     * define the memory device context
                     75:     */
                     76:     dop.pszLogAddress = (PSZ)NULL;
                     77:     dop.pszDriverName = "DISPLAY";
                     78:     vhdcMem = DevOpenDC(vhab,
                     79:                         OD_MEMORY,
                     80:                         "*",
                     81:                         2L, /* number of valid elements */
                     82:                         (PDEVOPENDATA)&dop,
                     83:                         (HDC)NULL);
                     84: 
                     85:    /*
                     86:     * The memory presentation space is defined and associated with the
                     87:     * memory device context. The presentation page is the same size in
                     88:     * pels as the image.
                     89:     */
                     90:     vhpsMem = GpiCreatePS(vhab,
                     91:                           vhdcMem,
                     92:                           &vsizlImg,
                     93:                           (LONG)PU_PELS | GPIT_NORMAL | GPIA_ASSOC);
                     94: 
                     95:    /*
                     96:     * Create a bit map in a format compatible with the memory device
                     97:     * context.
                     98:     */
                     99: 
                    100:    /*
                    101:     * define the bit-map information header
                    102:     */
                    103:     BmapInfo.cbFix     = 16;                /* bit-map header length   */
                    104:     BmapInfo.cx        = vsizlImg.cx;
                    105:     BmapInfo.cy        = vsizlImg.cy;
                    106:     BmapInfo.cPlanes   = 1L;                /* number of bit planes    */
                    107:     BmapInfo.cBitCount = 1L;                /* number of bits per pel  */
                    108: 
                    109: 
                    110:    /*
                    111:     * The bit map is defined and selected into the memory device
                    112:     * context. The output display is cleared.
                    113:     */
                    114:     vhbm = GpiCreateBitmap(vhpsMem,
                    115:                            (PBITMAPINFOHEADER2)&BmapInfo,
                    116:                            0L,                     /* no options      */
                    117:                            (PBYTE)NULL,            /* no initial data */
                    118:                            (PBITMAPINFO2)NULL);
                    119: 
                    120: 
                    121:     GpiSetBitmap(vhpsMem, vhbm);
                    122:     GpiErase(vhpsMem);
                    123:     GpiSetBackMix(vhpsMem, BM_OVERPAINT);
                    124: 
                    125:    /*
                    126:     * The current position is set to the top-left corner of the memory
                    127:     * presentation page before GpiImage is issued to draw the image
                    128:     * into it.
                    129:     */
                    130:     ptl.x = 0;
                    131:     ptl.y = vsizlImg.cy;
                    132:     GpiSetCurrentPosition(vhpsMem, &ptl);
                    133:     GpiImage(vhpsMem,
                    134:              0L,
                    135:              &vsizlImg,                           /* image size           */
                    136:              (LONG)(vsizlImg.cx * vsizlImg.cy/8), /* data length in bytes */
                    137:              vpbImgBuf);                          /* image data           */
                    138:     GpiSetBitmap(vhpsMem, (HBITMAP)NULL); /* free bit map in memory DC */
                    139:     WinInvalidateRect(vhwndClient, (PRECTL)NULL, FALSE);
                    140: 
                    141: }   /* PaintDrawImage() */
                    142: 
                    143: 
                    144: /****************************************************************\
                    145:  *  Paint Unscaled Image Routine                                *
                    146:  *--------------------------------------------------------------*
                    147:  *                                                              *
                    148:  *  Name:    PaintUnSizedImage()                                *
                    149:  *                                                              *
                    150:  *  Purpose: To paint the image in the client window            *
                    151:  *                                                              *
                    152:  *  Usage:   Routine is called from MainWndProc()               *
                    153:  *                                                              *
                    154:  *  Method:                                                     *
                    155:  *                                                              *
                    156:  *  Returns:                                                    *
                    157: \****************************************************************/
                    158: 
                    159: VOID PaintUnSizedImage()
                    160: {
                    161: 
                    162:     WinSetPointer(HWND_DESKTOP, vhptrWait);
                    163: 
                    164:     GpiImage(vhps,
                    165:              0L,
                    166:              &vsizlImg,                           /* size in pels         */
                    167:              (LONG)(vsizlImg.cx * vsizlImg.cy/8), /* data length in bytes */
                    168:              vpbImgBuf);                          /* image data           */
                    169: 
                    170:     WinSetPointer(HWND_DESKTOP, vhptrArrow);
                    171: 
                    172: }   /* PaintUnSizedImage() */
                    173: 
                    174: 
                    175: /****************************************************************\
                    176:  *  Paint Sized Image Routine                                   *
                    177:  *--------------------------------------------------------------*
                    178:  *                                                              *
                    179:  *  Name:    PaintSizedImage()                                  *
                    180:  *                                                              *
                    181:  *  Purpose: To paint the image in the client window, size      *
                    182:  *           it so that the whole of the image is visible       *
                    183:  *           (ie scaled as necessary)                           *
                    184:  *                                                              *
                    185:  *  Usage:   Routine is called from MainWndProc()               *
                    186:  *                                                              *
                    187:  *  Method:                                                     *
                    188:  *                                                              *
                    189:  *  Returns:                                                    *
                    190: \****************************************************************/
                    191: 
                    192: VOID PaintSizedImage()
                    193: {
                    194:     RECTL  rcl;                   /* client window rectangle    */
                    195:     POINTL aptl[5];               /* array of x,y pairs         */
                    196: 
                    197:    /*
                    198:     * The dimensions of the target rectangle are obtained using the
                    199:     * WinQueryWindowRect() call.
                    200:     */
                    201:     WinQueryWindowRect(vhwndClient, &rcl); /* query client window size */
                    202:     aptl[0].x = 0;                         /* bottom left, in          */
                    203:     aptl[0].y = 0;                         /*  device coordinates      */
                    204:     aptl[1].x = rcl.xRight - rcl.xLeft;    /* top right, in            */
                    205:     aptl[1].y = rcl.yTop - rcl.yBottom;    /*  device coordinates      */
                    206: 
                    207:    /*
                    208:     * The dimensions of the source rectangle are those of the source
                    209:     * image.
                    210:     */
                    211:     aptl[2].x = 0;                         /* bottom left, in          */
                    212:     aptl[2].y = 0;                         /*  window coordinates      */
                    213:     aptl[3].x = vsizlImg.cx;               /* top right, in            */
                    214:     aptl[3].y = vsizlImg.cy;               /*  device coordinates      */
                    215: 
                    216:     WinSetPointer(HWND_DESKTOP, vhptrWait);
                    217: 
                    218:    /*
                    219:     * draw the image
                    220:     */
                    221:     WinDrawBitmap(vhps,
                    222:                   vhbm,
                    223:                   (PRECTL)NULL,                /* draw whole bit map   */
                    224:                   (PPOINTL)&rcl,               /* bit-map destination  */
                    225:                                                /*  is client window    */
                    226:                                                /*  rectangle.          */
                    227:                   0L,
                    228:                   0L,
                    229:                   DBM_STRETCH | DBM_IMAGEATTRS);
                    230:                                                /* stretch or compress  */
                    231:                                                /*  to suit, and use    */
                    232:                                                /*  image attributes    */
                    233:                                                /*  for color.          */
                    234: 
                    235:     WinSetPointer(HWND_DESKTOP, vhptrArrow);
                    236: 
                    237: }   /* PaintSizedImage() */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.