Annotation of mstools/samples/sdktools/imagedit/imaglink.c, revision 1.1.1.1

1.1       root        1: /****************************************************************************/
                      2: /*                                                                          */
                      3: /*                         Microsoft Confidential                           */
                      4: /*                                                                          */
                      5: /*                 Copyright (c) Microsoft Corp.  1987, 1991                */
                      6: /*                           All Rights Reserved                            */
                      7: /*                                                                          */
                      8: /****************************************************************************/
                      9: /****************************** Module Header *******************************
                     10: * Module Name: imaglink.c
                     11: *
                     12: * Contains routines for managing the linked list of images.
                     13: *
                     14: * History:
                     15: *
                     16: ****************************************************************************/
                     17: 
                     18: #include "imagedit.h"
                     19: 
                     20: 
                     21: 
                     22: /************************************************************************
                     23: * ImageLinkAlloc
                     24: *
                     25: * Allocates an image link.  This is a node in the linked list of
                     26: * images for the current file.  This link will be added to the
                     27: * current linked list of images.
                     28: *
                     29: * Arguments:
                     30: *   PDEVICE pDevice  - Pointer to the device structure.
                     31: *   INT cx           - Width of the image.
                     32: *   INT cy           - Height of the image.
                     33: *   INT xHotSpot     - X location of the hotspot (cursors only).
                     34: *   INT yHotSpot     - Y location of the hotspot (cursors only).
                     35: *   INT nColors      - Number of colors (2 or 16).
                     36: *
                     37: * History:
                     38: *
                     39: ************************************************************************/
                     40: 
                     41: PIMAGEINFO ImageLinkAlloc(
                     42:     PDEVICE pDevice,
                     43:     INT cx,
                     44:     INT cy,
                     45:     INT xHotSpot,
                     46:     INT yHotSpot,
                     47:     INT nColors)
                     48: {
                     49:     PIMAGEINFO pImage;
                     50:     PIMAGEINFO pImageT;
                     51: 
                     52:     if (!(pImage = (PIMAGEINFO)MyAlloc(sizeof(IMAGEINFO))))
                     53:         return NULL;
                     54: 
                     55:     pImage->pDevice = pDevice;
                     56:     pImage->cx = cx;
                     57:     pImage->cy = cy;
                     58:     pImage->iHotspotX = xHotSpot;
                     59:     pImage->iHotspotY = yHotSpot;
                     60:     pImage->nColors = nColors;
                     61:     pImage->DIBSize = 0;
                     62:     pImage->DIBhandle = NULL;
                     63:     pImage->DIBPtr = NULL;
                     64:     pImage->pImageNext = NULL;
                     65: 
                     66:     /*
                     67:      * Insert the link in the list.
                     68:      */
                     69:     if (!gpImageHead) {
                     70:         /*
                     71:          * This is the first one.  Start the list.
                     72:          */
                     73:         gpImageHead = pImage;
                     74:     }
                     75:     else {
                     76:         /*
                     77:          * Find the end of the list and tack on the new link.
                     78:          */
                     79:         for (pImageT = gpImageHead; pImageT->pImageNext;
                     80:                 pImageT = pImageT->pImageNext)
                     81:             ;
                     82: 
                     83:         pImageT->pImageNext = pImage;
                     84:     }
                     85: 
                     86:     return pImage;
                     87: }
                     88: 
                     89: 
                     90: 
                     91: /************************************************************************
                     92: * ImageLinkFree
                     93: *
                     94: * Free's the specified image link and closes up the hole
                     95: * in the linked list.
                     96: *
                     97: * Arguments:
                     98: *   PIMAGEINFO pImageFree - The image link to free.
                     99: *
                    100: * History:
                    101: *
                    102: ************************************************************************/
                    103: 
                    104: VOID ImageLinkFree(
                    105:     PIMAGEINFO pImageFree)
                    106: {
                    107:     PIMAGEINFO pImage;
                    108:     PIMAGEINFO pImagePrev;
                    109: 
                    110:     /*
                    111:      * Find the existing link and get it's previous link.
                    112:      */
                    113:     for (pImage = gpImageHead, pImagePrev = NULL;
                    114:             pImage && pImage != pImageFree;
                    115:             pImagePrev = pImage, pImage = pImage->pImageNext)
                    116:         ;
                    117: 
                    118:     /*
                    119:      * Was the image link found?
                    120:      */
                    121:     if (pImage) {
                    122:         /*
                    123:          * Close up the linked list.
                    124:          */
                    125:         if (pImagePrev)
                    126:             pImagePrev->pImageNext = pImageFree->pImageNext;
                    127:         else
                    128:             gpImageHead = pImageFree->pImageNext;
                    129: 
                    130:         /*
                    131:          * Unlock and free the allocated DIB image.
                    132:          */
                    133:         if (pImageFree->DIBhandle) {
                    134:             GlobalUnlock(pImageFree->DIBhandle);
                    135:             GlobalFree(pImageFree->DIBhandle);
                    136:         }
                    137: 
                    138:         /*
                    139:          * Free the link itself.
                    140:          */
                    141:         MyFree(pImageFree);
                    142:     }
                    143: }
                    144: 
                    145: 
                    146: 
                    147: /************************************************************************
                    148: * ImageLinkFreeList
                    149: *
                    150: * Free's all the nodes in the current image list (if there is one).
                    151: *
                    152: * Arguments:
                    153: *
                    154: * History:
                    155: *
                    156: ************************************************************************/
                    157: 
                    158: VOID ImageLinkFreeList(VOID)
                    159: {
                    160:     while (gpImageHead)
                    161:         ImageLinkFree(gpImageHead);
                    162: }
                    163: 
                    164: 
                    165: 
                    166: /************************************************************************
                    167: * ImageDelete
                    168: *
                    169: * Deletes the current image (for icons/cursors).  If there are other images,
                    170: * the first one is opened.  If the last image was just deleted, the
                    171: * entire editor will be reset (if the file was untitled) or if there
                    172: * is currently a file opened, some other things will happen, such as
                    173: * hiding the workspace and view windows, etc.
                    174: *
                    175: * History:
                    176: *
                    177: ************************************************************************/
                    178: 
                    179: VOID ImageDelete(VOID)
                    180: {
                    181:     PIMAGEINFO pImage;
                    182: 
                    183:     ImageDCDelete();
                    184:     ImageLinkFree(gpImageCur);
                    185:     gpImageCur = NULL;
                    186:     fFileDirty = TRUE;
                    187:     fImageDirty = FALSE;
                    188:     gnImages--;
                    189: 
                    190:     /*
                    191:      * Look for the first remaining image that has a valid device
                    192:      * (which means it is editable).
                    193:      */
                    194:     for (pImage = gpImageHead; pImage && !pImage->pDevice;
                    195:             pImage = pImage->pImageNext)
                    196:         ;
                    197: 
                    198:     /*
                    199:      * If there are other editable images, open the first one.
                    200:      * Otherwise, clear out some more things.
                    201:      */
                    202:     if (pImage) {
                    203:         ImageOpen2(pImage);
                    204:     }
                    205:     else {
                    206:         /*
                    207:          * Is this a file off of disk?
                    208:          */
                    209:         if (gpszFileName) {
                    210:             /*
                    211:              * Hide the Workspace and View windows.
                    212:              */
                    213:             ShowWindow(ghwndWork, SW_HIDE);
                    214:             ViewShow(FALSE);
                    215: 
                    216:             /*
                    217:              * Update the properties bar (refill the images combo).
                    218:              */
                    219:             PropBarUpdate();
                    220:         }
                    221:         else {
                    222:             /*
                    223:              * Since this file was opened new and they deleted the
                    224:              * last image present in it, just reset everything.
                    225:              */
                    226:             ClearResource();
                    227:         }
                    228:     }
                    229: }

unix.superglobalmegacorp.com

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