gdi.h
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:218k
源码类别:

GPS编程

开发平台:

C/C++

  1. /**
  2.  * file gdi.h
  3.  * author Wei Yongming <ymwei@minigui.org>
  4.  * date 2002/01/06
  5.  * 
  6.  * This file includes graphics device interfaces of MiniGUI.
  7.  *
  8.  verbatim
  9.     Copyright (C) 1998-2002 Wei Yongming.
  10.     Copyright (C) 2002-2004 Feynman Software.
  11.     This file is part of MiniGUI, a compact cross-platform Graphics 
  12.     User Interface (GUI) support system for real-time embedded systems.
  13.     This program is free software; you can redistribute it and/or modify
  14.     it under the terms of the GNU General Public License as published by
  15.     the Free Software Foundation; either version 2 of the License, or
  16.     (at your option) any later version.
  17.     This program is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU General Public License for more details.
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  endverbatim
  25.  */
  26. /*
  27.  * $Id: gdi.h,v 1.191 2004/10/20 02:06:00 weiym Exp $
  28.  *
  29.  *             MiniGUI for Linux/uClinux, eCos, uC/OS-II, and VxWorks version 1.6.x
  30.  *             Copyright (C) 1998-2002 Wei Yongming.
  31.  *             Copyright (C) 2002-2004 Feynman Software.
  32.  */
  33. #ifndef _MGUI_GDI_H
  34.     #define _MGUI_GDI_H
  35. /* include necessary headers */
  36. #ifndef _LITE_VERSION
  37. #include "pthread.h"
  38. #endif /* !LITE_VERSION */
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif  /* __cplusplus */
  43.     /**
  44.      * addtogroup global_vars Global variables
  45.      * @{
  46.      */
  47.     /**
  48.      * defgroup color_vars System colors and pixel values.
  49.      * @{
  50.      */
  51. /**
  52.  * var gal_pixel SysPixelIndex []
  53.  * brief The pre-defined system pixel values.
  54.  *
  55.  * MiniGUI defines some system pixel values when initializing 
  56.  * graphics sub-system. You can access the arrary to get the
  57.  * system pixel values, or just use the following macros:
  58.  *
  59.  *  - PIXEL_blackn
  60.  *    black
  61.  *  - PIXEL_darkredn
  62.  *    dark red
  63.  *  - PIXEL_darkgreenn
  64.  *    dark green
  65.  *  - PIXEL_darkyellown
  66.  *    dark yellow
  67.  *  - PIXEL_darkbluen
  68.  *    dark blue
  69.  *  - PIXEL_darkmagentan
  70.  *    dark magenta
  71.  *  - PIXEL_darkcyann
  72.  *    dark cyan
  73.  *  - PIXEL_lightgrayn
  74.  *    light gray
  75.  *  - PIXEL_darkgrayn
  76.  *    dark gray
  77.  *  - PIXEL_redn
  78.  *    red
  79.  *  - PIXEL_greenn
  80.  *    green
  81.  *  - PIXEL_yellown
  82.  *    yellow
  83.  *  - PIXEL_bluen
  84.  *    blue
  85.  *  - PIXEL_magentan
  86.  *    magenta
  87.  *  - PIXEL_cyann
  88.  *    cyan
  89.  *  - PIXEL_lightwhiten
  90.  *    light white
  91.  */
  92. extern gal_pixel SysPixelIndex [];
  93. /**
  94.  * var RGB SysPixelColor []
  95.  * brief The pre-defined system RGB colors.
  96.  *
  97.  * The elements in this array are system colors in RGB triples.
  98.  */
  99. extern const RGB SysPixelColor [];
  100. #define PIXEL_invalid       0
  101. #define PIXEL_transparent   SysPixelIndex[0]
  102. #define PIXEL_darkblue      SysPixelIndex[1]
  103. #define PIXEL_darkgreen     SysPixelIndex[2]
  104. #define PIXEL_darkcyan      SysPixelIndex[3]
  105. #define PIXEL_darkred       SysPixelIndex[4] 
  106. #define PIXEL_darkmagenta   SysPixelIndex[5]
  107. #define PIXEL_darkyellow    SysPixelIndex[6] 
  108. #define PIXEL_darkgray      SysPixelIndex[7] 
  109. #define PIXEL_lightgray     SysPixelIndex[8]
  110. #define PIXEL_blue          SysPixelIndex[9]
  111. #define PIXEL_green         SysPixelIndex[10]
  112. #define PIXEL_cyan          SysPixelIndex[11]
  113. #define PIXEL_red           SysPixelIndex[12]
  114. #define PIXEL_magenta       SysPixelIndex[13]
  115. #define PIXEL_yellow        SysPixelIndex[14]
  116. #define PIXEL_lightwhite    SysPixelIndex[15]
  117. #define PIXEL_black         SysPixelIndex[16]
  118. /* Compatiblity definitions */
  119. #define COLOR_invalid       PIXEL_invalid
  120. #define COLOR_transparent   PIXEL_transparent
  121. #define COLOR_darkred       PIXEL_darkred
  122. #define COLOR_darkgreen     PIXEL_darkgreen
  123. #define COLOR_darkyellow    PIXEL_darkyellow
  124. #define COLOR_darkblue      PIXEL_darkblue
  125. #define COLOR_darkmagenta   PIXEL_darkmagenta
  126. #define COLOR_darkcyan      PIXEL_darkcyan
  127. #define COLOR_lightgray     PIXEL_lightgray
  128. #define COLOR_darkgray      PIXEL_darkgray
  129. #define COLOR_red           PIXEL_red
  130. #define COLOR_green         PIXEL_green
  131. #define COLOR_yellow        PIXEL_yellow
  132. #define COLOR_blue          PIXEL_blue
  133. #define COLOR_magenta       PIXEL_magenta
  134. #define COLOR_cyan          PIXEL_cyan
  135. #define COLOR_lightwhite    PIXEL_lightwhite
  136. #define COLOR_black         PIXEL_black
  137. #define SysColorIndex       SysPixelIndex
  138.     /** @} end of color_vars */
  139.     /** @} end of global_vars */
  140.     /**
  141.      * addtogroup fns Functions
  142.      * @{
  143.      */
  144.     /**
  145.      * addtogroup global_fns Global/general functions
  146.      * @{
  147.      */
  148.     /**
  149.      * defgroup block_heap_fns Block data heap operations
  150.      *
  151.      * MiniGUI maintains some private block data heaps to allocate
  152.      * data blocks which have fixed size, such as the clipping rectangles
  153.      * in a region. By using the private heap, we can avoiding calling
  154.      * a malloc and a free function frequently, so will have a slight 
  155.      * performance enhancement.
  156.      *
  157.      * @{
  158.      */
  159. /**
  160.  * MiniGUI's private block data heap.
  161.  *
  162.  * sa InitBlockDataHeap, DestroyBlockDataHeap
  163.  */
  164. typedef struct _BLOCKHEAP
  165. {
  166. #ifndef _LITE_VERSION
  167.     pthread_mutex_t lock;
  168. #endif
  169.     /**
  170.      * size of one block element.
  171.      */
  172.     size_t          bd_size;
  173.     /**
  174.      * size of the heap in blocks.
  175.      */
  176.     size_t          heap_size;
  177.     /**
  178.      * the first free element in the heap.
  179.      */
  180.     int             free;
  181.     /**
  182.      * pointer to the pre-allocated heap.
  183.      */
  184.     void*           heap;
  185. } BLOCKHEAP;
  186. /**
  187.  * var typedef BLOCKHEAP* PBLOCKHEAP
  188.  * brief Data type of the pointer to a BLOCKHEAP.
  189.  *
  190.  * sa BLOCKHEAP
  191.  */
  192. typedef BLOCKHEAP* PBLOCKHEAP;
  193. /**
  194.  * fn void InitBlockDataHeap (PBLOCKHEAP heap, size_t bd_size, size_t heap_size)
  195.  * brief Initializes a private block data heap.
  196.  *
  197.  * This function initializes a block data heap pointed to by a heap.
  198.  * It will allocate the buffer used by the heap from system heap by using a malloc(3).
  199.  * Initially, the heap has a heap_size blocks free, and each is a bd_size bytes long.
  200.  *
  201.  * param heap The pointer to the heap structure.
  202.  * param bd_size The size of one block in bytes.
  203.  * param heap_size The size of the heap in blocks.
  204.  * return a heap->heap will contains a valid pointer on success, NULL on error.
  205.  *
  206.  * note This function does not return anything. You should check the a heap
  207.  * field of the a heap structure.
  208.  *
  209.  * sa BLOCKHEAP
  210.  */
  211. void InitBlockDataHeap (PBLOCKHEAP heap, size_t bd_size, size_t heap_size);
  212. /**
  213.  * fn void* BlockDataAlloc (PBLOCKHEAP heap)
  214.  * brief Allocates a data block from private heap.
  215.  *
  216.  * This function allocates a data block from an initialized 
  217.  * block data heap. The allocated block will have the size of a heap->bd_size.
  218.  * If there is no free block in the heap, this function will try to allocate
  219.  * the block from the system heap by using a malloc(3) function.
  220.  *
  221.  * param heap The pointer to the initialized heap.
  222.  * return Pointer to the allocated data block, NULL on error.
  223.  *
  224.  * sa InitBlockDataHeap, BlockDataFree
  225.  */
  226. void* BlockDataAlloc (PBLOCKHEAP heap);
  227. /**
  228.  * fn void BlockDataFree (PBLOCKHEAP heap, void* data)
  229.  * brief Frees an allocated data block.
  230.  *
  231.  * This function frees the specified data block pointed to by a data to the heap a heap.
  232.  * If the block was allocated by using a malloc function, this function will
  233.  * free the element by using a free(3) function. 
  234.  *
  235.  * param heap The pointer to the heap.
  236.  * param data The pointer to the element to be freed.
  237.  *
  238.  * sa InitBlockDataHeap, BlockDataAlloc
  239.  */
  240. void BlockDataFree (PBLOCKHEAP heap, void* data);
  241. /**
  242.  * fn void DestroyBlockDataHeap (PBLOCKHEAP heap)
  243.  * brief Destroies a private block data heap.
  244.  *
  245.  * param heap The pointer to the heap to be destroied.
  246.  *
  247.  * sa InitBlockDataHeap, BLOCKHEAP
  248.  */
  249. void DestroyBlockDataHeap (PBLOCKHEAP heap);
  250.     /** @} end of block_heap_fns */
  251.     /** @} end of global_fns */
  252.     /**
  253.      * defgroup gdi_fns GDI functions
  254.      * @{
  255.      */
  256. struct _BITMAP;
  257. typedef struct _BITMAP BITMAP;
  258. typedef BITMAP* PBITMAP;
  259. struct _MYBITMAP;
  260. typedef struct _MYBITMAP MYBITMAP;
  261. typedef struct _MYBITMAP* PMYBITMAP;
  262.    /**
  263.     * defgroup region_fns Region operations
  264.     *
  265.     * A Region is simply an area, as the name implies, and is implemented as 
  266.     * a "y-x-banded" array of rectangles. To explain: Each Region is made up 
  267.     * of a certain number of rectangles sorted by y coordinate first, 
  268.     * and then by x coordinate.
  269.     *
  270.     * Furthermore, the rectangles are banded such that every rectangle with a
  271.     * given upper-left y coordinate (y1) will have the same lower-right y
  272.     * coordinate (y2) and vice versa. If a rectangle has scanlines in a band, it
  273.     * will span the entire vertical distance of the band. This means that some
  274.     * areas that could be merged into a taller rectangle will be represented as
  275.     * several shorter rectangles to account for shorter rectangles to its left
  276.     * or right but within its "vertical scope".
  277.     *
  278.     * An added constraint on the rectangles is that they must cover as much
  279.     * horizontal area as possible. E.g. no two rectangles in a band are allowed
  280.     * to touch.
  281.     *
  282.     * Whenever possible, bands will be merged together to cover a greater vertical
  283.     * distance (and thus reduce the number of rectangles). Two bands can be merged
  284.     * only if the bottom of one touches the top of the other and they have
  285.     * rectangles in the same places (of the same width, of course). This maintains
  286.     * the y-x-banding that's so nice to have...
  287.     *
  288.     * Example:
  289.     *
  290.     * include region.c
  291.     *
  292.     * @{
  293.     */
  294. /**
  295.  * Clipping rectangle structure.
  296.  */
  297. typedef struct _CLIPRECT
  298. {
  299.     /**
  300.      * the clipping rectangle itself.
  301.      */
  302.     RECT rc;
  303.     /**
  304.      * the next clipping rectangle.
  305.      */
  306.     struct _CLIPRECT* next;
  307. #ifdef _USE_NEWGAL
  308.     /**
  309.      * the previous clipping rectangle.
  310.      * note only defined for _USE_NEWGAL.
  311.      */
  312.     struct _CLIPRECT* prev;
  313. #endif
  314. } CLIPRECT;
  315. typedef CLIPRECT* PCLIPRECT;
  316. /* Clipping Region */
  317. #ifdef _USE_NEWGAL
  318. #define NULLREGION      0x00
  319. #define SIMPLEREGION    0x01
  320. #define COMPLEXREGION   0x02
  321. #endif
  322. /**
  323.  * Clipping region structure, alos used for general regions.
  324.  */
  325. typedef struct _CLIPRGN
  326. {
  327. #ifdef _USE_NEWGAL
  328.    /**
  329.     * type of the region, can be one of the following:
  330.     *   - NULLREGIONn
  331.     *     a null region.
  332.     *   - SIMPLEREGIONn
  333.     *     a simple region.
  334.     *   - COMPLEXREGION
  335.     *     a complex region.
  336.     *
  337.     * note only defined for _USE_NEWGAL.
  338.     */
  339.     BYTE            type;        /* type of region */
  340.    /**
  341.     * reserved for alignment.
  342.     *
  343.     * note only defined for _USE_NEWGAL.
  344.     */
  345.     BYTE            reserved[3];
  346. #endif
  347.    /**
  348.     * The bounding rect of the region.
  349.     */
  350.     RECT            rcBound;
  351.    /**
  352.     * head of the clipping rectangle list.
  353.     */
  354.     PCLIPRECT       head;
  355.    /**
  356.     * tail of the clipping rectangle list.
  357.     */
  358.     PCLIPRECT       tail;
  359.    /**
  360.     * The private block data heap used to allocate clipping rectangles.
  361.     * sa BLOCKHEAP
  362.     */
  363.     PBLOCKHEAP      heap;
  364. } CLIPRGN;
  365. /**
  366.  * var typedef CLIPRGN* PCLIPRGN
  367.  * brief Data type of the pointer to a CLIPRGN.
  368.  *
  369.  * sa CLIPRGN
  370.  */
  371. typedef CLIPRGN* PCLIPRGN;
  372. /**
  373.  * def InitFreeClipRectList(heap, size)
  374.  * brief Initializes the private block data heap used to allocate clipping rectangles.
  375.  * param heap The pointer to a BLOCKHEAP structure.
  376.  * param size The size of the heap.
  377.  * 
  378.  * note This macro is defined to call a InitBlockDataHeap function with a bd_size set to 
  379.  * a sizeof(CLIPRECT).
  380.  *
  381.  * sa InitBlockDataHeap
  382.  */
  383. #define InitFreeClipRectList(heap, size)    InitBlockDataHeap (heap, sizeof (CLIPRECT), size)
  384. /**
  385.  * def ClipRectAlloc(heap)
  386.  * brief Allocates a clipping rectangles from the private block data heap.
  387.  * param heap The pointer to the initialized BLOCKHEAP structure.
  388.  * 
  389.  * note This macro is defined to call a BlockDataAlloc function.
  390.  *
  391.  * sa BlockDataAlloc
  392.  */
  393. #define ClipRectAlloc(heap)     BlockDataAlloc (heap)
  394. /**
  395.  * def FreeClipRect(heap, cr)
  396.  * brief Frees a clipping rectangle which is allocated from the private block data heap.
  397.  * param heap The pointer to the initialized BLOCKHEAP structure.
  398.  * param cr The pointer to the clipping rectangle to be freed.
  399.  * 
  400.  * note This macro is defined to call a BlockDataFree function.
  401.  *
  402.  * sa BlockDataFree
  403.  */
  404. #define FreeClipRect(heap, cr)  BlockDataFree (heap, cr);
  405. /**
  406.  * def DestroyFreeClipRectList(heap)
  407.  * brief Destroies the private block data heap used to allocate clipping rectangles.
  408.  * param heap The pointer to the BLOCKHEAP structure.
  409.  * 
  410.  * note This macro is defined to call a DestroyBlockDataHeap function.
  411.  *
  412.  * sa DestroyBlockDataHeap
  413.  */
  414. #define DestroyFreeClipRectList(heap)   DestroyBlockDataHeap (heap);
  415. /**
  416.  * fn void GUIAPI InitClipRgn (PCLIPRGN pRgn, PBLOCKHEAP pFreeList)
  417.  * brief Initializes a clipping region.
  418.  *
  419.  * Before intializing a clipping region, you should initialize a private
  420.  * block data heap first. The region operations, such as a UnionRegion function,
  421.  * will allocate/free the clipping rectangles from/to the heap.
  422.  * This function will set the a heap field of a pRgn to be a pFreeList,
  423.  * and empty the region.
  424.  *
  425.  * param pRgn The pointer to the CLIPRGN structure to be initialized.
  426.  * param pFreeList The pointer to the initialized private block data heap.
  427.  *
  428.  * sa InitFreeClipRectList, EmptyClipRgn.
  429.  *
  430.  * Example:
  431.  *
  432.  * include initcliprgn.c
  433.  */
  434. void GUIAPI InitClipRgn (PCLIPRGN pRgn, PBLOCKHEAP pFreeList);
  435. /**
  436.  * fn void GUIAPI EmptyClipRgn (PCLIPRGN pRgn)
  437.  * brief Empties a clipping region.
  438.  *
  439.  * This function empties a clipping region pointed to by a pRgn.
  440.  *
  441.  * param pRgn The pointer to the region.
  442.  *
  443.  * sa InitClipRgn
  444.  */
  445. void GUIAPI EmptyClipRgn (PCLIPRGN pRgn);
  446. /**
  447.  * fn BOOL GUIAPI ClipRgnCopy (PCLIPRGN pDstRgn, const CLIPRGN* pSrcRgn)
  448.  * brief Copies one region to another.
  449.  *
  450.  * This function copies the region pointed to by a pSrcRgn to the region pointed to by a pDstRgn. 
  451.  *
  452.  * param pDstRgn The destination region.
  453.  * param pSrcRgn The source region.
  454.  * return TRUE on success, otherwise FALSE.
  455.  *
  456.  * note This function will empty the region a pDstRgn first.
  457.  *
  458.  * sa EmptyClipRgn, ClipRgnIntersect, UnionRegion, SubtractRegion, XorRegion
  459.  */
  460. BOOL GUIAPI ClipRgnCopy (PCLIPRGN pDstRgn, const CLIPRGN* pSrcRgn);
  461. /**
  462.  * fn BOOL GUIAPI ClipRgnIntersect (PCLIPRGN pRstRgn, const CLIPRGN* pRgn1, const CLIPRGN* pRgn2)
  463.  * brief Intersects two region.
  464.  *
  465.  * This function gets the intersection of two regions pointed to by a pRgn1 and a pRgn2 
  466.  * respectively and puts the result to the region pointed to by a pRstRgn.
  467.  *
  468.  * param pRstRgn The intersected result region.
  469.  * param pRgn1 The first region.
  470.  * param pRgn2 The second region.
  471.  * return TRUE on success, otherwise FALSE.
  472.  *
  473.  * note If a pRgn1 does not intersected with a pRgn2, the result region will be
  474.  * a emgty region.
  475.  *
  476.  * sa EmptyClipRgn, ClipRgnCopy, UnionRegion, SubtractRegion, XorRegion
  477.  */
  478. BOOL GUIAPI ClipRgnIntersect (PCLIPRGN pRstRgn,
  479.                        const CLIPRGN* pRgn1, const CLIPRGN* pRgn2);
  480. /**
  481.  * fn void GUIAPI GetClipRgnBoundRect (PCLIPRGN pRgn, PRECT pRect)
  482.  * brief Gets the bounding rectangle of a region.
  483.  * 
  484.  * This function gets the bounding rect of the region pointed to by a pRgn, 
  485.  * and returns the rect in the rect pointed to by a pRect.
  486.  *
  487.  * param pRgn The pointer to the region.
  488.  * param pRect The pointer to the result rect.
  489.  *
  490.  * sa IsEmptyClipRgn
  491.  */
  492. void GUIAPI GetClipRgnBoundRect (PCLIPRGN pRgn, PRECT pRect);
  493. /**
  494.  * fn BOOL GUIAPI SetClipRgn (PCLIPRGN pRgn, const RECT* pRect)
  495.  * brief Sets a region to contain only one rect.
  496.  *
  497.  * This function sets the region a pRgn to contain only a rect pointed to by a pRect.
  498.  *
  499.  * param pRgn The pointer to the region.
  500.  * param pRect The pointer to the rect.
  501.  * return TRUE on success, otherwise FALSE.
  502.  *
  503.  * note This function will empty the region a pRgn first.
  504.  *
  505.  * sa EmptyClipRgn
  506.  */
  507. BOOL GUIAPI SetClipRgn (PCLIPRGN pRgn, const RECT* pRect);
  508. /**
  509.  * fn BOOL GUIAPI IsEmptyClipRgn (const CLIPRGN* pRgn)
  510.  * brief Determines whether a region is an empty region.
  511.  *
  512.  * This function determines whether the region pointed to by a pRgn is an empty region.
  513.  *
  514.  * param pRgn The pointer to the region.
  515.  * return TRUE for empty one, else for not empty region.
  516.  *
  517.  * sa EmptyClipRgn
  518.  */
  519. BOOL GUIAPI IsEmptyClipRgn (const CLIPRGN* pRgn);
  520. /**
  521.  * fn BOOL GUIAPI AddClipRect (PCLIPRGN pRgn, const RECT* pRect)
  522.  * brief Unions one rectangle to a region.
  523.  *
  524.  * This function unions a rectangle to the region pointed to by a pRgn.
  525.  *
  526.  * param pRgn The pointer to the region.
  527.  * param pRect The pointer to the rectangle.
  528.  * return TRUE on success, otherwise FALSE.
  529.  *
  530.  * sa IntersectClipRect, SubtractClipRect
  531.  */
  532. BOOL GUIAPI AddClipRect (PCLIPRGN pRgn, const RECT* pRect);
  533. /**
  534.  * fn BOOL GUIAPI IntersectClipRect (PCLIPRGN pRgn, const RECT* pRect)
  535.  * brief Intersects a rectangle with a region.
  536.  *
  537.  * This function intersects the region pointed to by a pRgn with a rect pointed to by a pRect.
  538.  *
  539.  * param pRgn The pointer to the region.
  540.  * param pRect The pointer to the rectangle.
  541.  * return TRUE on success, otherwise FALSE.
  542.  *
  543.  * sa AddClipRect, SubtractClipRect
  544.  */
  545. BOOL GUIAPI IntersectClipRect (PCLIPRGN pRgn, const RECT* pRect);
  546. /**
  547.  * fn BOOL GUIAPI SubtractClipRect (PCLIPRGN pRgn, const RECT* pRect)
  548.  * brief Subtracts a rectangle from a region.
  549.  *
  550.  * This function subtracts a rect pointed to by a pRect from the region pointed to by a pRgn.
  551.  *
  552.  * param pRgn The pointer to the region.
  553.  * param pRect The pointer to the rect.
  554.  * return TRUE on success, otherwise FALSE.
  555.  *
  556.  * sa AddClipRect, IntersectClipRect
  557.  */
  558. BOOL GUIAPI SubtractClipRect (PCLIPRGN pRgn, const RECT* pRect);
  559. /**
  560.  * fn BOOL GUIAPI PtInRegion (PCLIPRGN region, int x, int y)
  561.  * brief Determines whether a point is in a region.
  562.  *
  563.  * This function determines whether a point a (x,y) is in the region pointed to by a region.
  564.  *
  565.  * param region The pointer to the region.
  566.  * param x x,y: The point.
  567.  * param y x,y: The point.
  568.  * return TRUE for in the region, otherwise FALSE.
  569.  *
  570.  * note This fucntion defined only for _USE_NEWGAL.
  571.  *
  572.  * sa RectInRegion
  573.  */
  574. BOOL GUIAPI PtInRegion (PCLIPRGN region, int x, int y);
  575. /**
  576.  * fn BOOL GUIAPI RectInRegion (PCLIPRGN region, const RECT* rect)
  577.  * brief Determines whether a rectangle is intersected with a region.
  578.  *
  579.  * This function determines whether the rect a rect is intersected with the region
  580.  * pointed to by a region.
  581.  *
  582.  * param region The pointer to the region.
  583.  * param rect The pointer to the rect.
  584.  * return TRUE for in the region, otherwise FALSE.
  585.  *
  586.  * note This fucntion defined only for _USE_NEWGAL.
  587.  *
  588.  * sa PtInRegion
  589.  */
  590. BOOL GUIAPI RectInRegion (PCLIPRGN region, const RECT* rect);
  591. /**
  592.  * fn void GUIAPI OffsetRegion (PCLIPRGN region, int x, int y)
  593.  * brief Offsets the region.
  594.  *
  595.  * This function offsets a given region pointed to by region.
  596.  *
  597.  * param region The pointer to the region.
  598.  * param x x,y: Offsets on x and y coodinates.
  599.  * param y x,y: Offsets on x and y coodinates.
  600.  *
  601.  * note This fucntion defined only for _USE_NEWGAL.
  602.  */
  603. void GUIAPI OffsetRegion (PCLIPRGN region, int x, int y);
  604. #ifdef _USE_NEWGAL
  605. /**
  606.  * fn BOOL GUIAPI UnionRegion (PCLIPRGN dst, const CLIPRGN* src1, const CLIPRGN* src2)
  607.  * brief Unions two regions.
  608.  *
  609.  * This function unions two regions pointed to by a src1 and a src2 respectively and
  610.  * puts the result to the region pointed to by a dst.
  611.  *
  612.  * param dst The pointer to the result region.
  613.  * param src1 src1,src2: Two regions will be unioned.
  614.  * param src2 src1,src2: Two regions will be unioned.
  615.  * return TRUE on success, otherwise FALSE.
  616.  *
  617.  * note This fucntion defined only for _USE_NEWGAL.
  618.  *
  619.  * sa SubtractRegion, XorRegion
  620.  */
  621. BOOL GUIAPI UnionRegion (PCLIPRGN dst, const CLIPRGN* src1, const CLIPRGN* src2);
  622. /**
  623.  * fn BOOL GUIAPI SubtractRegion (CLIPRGN* rgnD, const CLIPRGN* rgnM, const CLIPRGN* rgnS)
  624.  * brief Substrcts a region from another.
  625.  *
  626.  * This function subtracts a rgnS from a rgnM and leave the result in a rgnD.
  627.  *
  628.  * param rgnD The pointer to the difference region.
  629.  * param rgnM The pointer to the minuend region.
  630.  * param rgnS The pointer to the subtrahend region.
  631.  * return TRUE on success, otherwise FALSE.
  632.  *
  633.  * note This fucntion defined only for _USE_NEWGAL.
  634.  *
  635.  * sa UnionRegion, XorRegion
  636.  */
  637. BOOL GUIAPI SubtractRegion (CLIPRGN* rgnD, const CLIPRGN* rgnM, const CLIPRGN* rgnS);
  638. /**
  639.  * fn BOOL GUIAPI XorRegion (CLIPRGN *dst, const CLIPRGN *src1, const CLIPRGN *src2)
  640.  * brief Does the XOR operation between two regions.
  641.  *
  642.  * This function does the XOR operation between two regions pointed to by
  643.  * a src1 and a src2 and puts the result to the region pointed to by a dst.
  644.  *
  645.  * param dst The pointer to the result region.
  646.  * param src1 src1,src2: Two regions will be xor'ed.
  647.  * param src2 src1,src2: Two regions will be xor'ed.
  648.  * return TRUE on success, otherwise FALSE.
  649.  *
  650.  * note This fucntion defined only for _USE_NEWGAL.
  651.  *
  652.  * sa UnionRegion, SubtractRegion
  653.  */
  654. BOOL GUIAPI XorRegion (CLIPRGN *dst, const CLIPRGN *src1, const CLIPRGN *src2);
  655. /**
  656.  * def UnionRectWithRegion
  657.  * brief Is an alias of a AddClipRect
  658.  * sa AddClipRect
  659.  */
  660. #define UnionRectWithRegion     AddClipRect
  661. /**
  662.  * def CopyRegion
  663.  * brief Is an alias of a ClipRgnCopy
  664.  * sa ClipRgnCopy
  665.  */
  666. #define CopyRegion              ClipRgnCopy
  667. /**
  668.  * def IntersectRegion
  669.  * brief Is an alias of a ClipRgnIntersect
  670.  * sa ClipRgnIntersect
  671.  */
  672. #define IntersectRegion         ClipRgnIntersect
  673. /**
  674.  * fn BOOL GUIAPI InitCircleRegion (PCLIPRGN dst, int x, int y, int r)
  675.  * brief Initializes a region to be an enclosed circle.
  676.  *
  677.  * param dst The pointer to the region to be initialized.
  678.  * param x x,y: The center of the circle.
  679.  * param y x,y: The center of the circle.
  680.  * param r The radius of the circle.
  681.  * return TRUE on success, otherwise FALSE.
  682.  *
  683.  * note This fucntion defined only for _USE_NEWGAL.
  684.  *
  685.  * sa InitEllipseRegion, InitPolygonRegion
  686.  */
  687. BOOL GUIAPI InitCircleRegion (PCLIPRGN dst, int x, int y, int r);
  688. /**
  689.  * fn BOOL GUIAPI InitEllipseRegion (PCLIPRGN dst, int x, int y, int rx, int ry)
  690.  * brief Initializes a region to be an enclosed ellipse.
  691.  *
  692.  * param dst The pointer to the region to be initialized.
  693.  * param x x,y: The center of the ellipse.
  694.  * param y x,y: The center of the ellipse.
  695.  * param rx The x-radius of the ellipse.
  696.  * param ry The y-radius of the ellipse.
  697.  * return TRUE on success, otherwise FALSE.
  698.  *
  699.  * note This fucntion defined only for _USE_NEWGAL.
  700.  *
  701.  * sa InitCircleRegion, InitPolygonRegion
  702.  */
  703. BOOL GUIAPI InitEllipseRegion (PCLIPRGN dst, int x, int y, int rx, int ry);
  704. /**
  705.  * fn BOOL GUIAPI InitPolygonRegion (PCLIPRGN dst, const POINT* pts, int vertices)
  706.  * brief Initializes a region to be an enclosed polygon.
  707.  *
  708.  * param dst The pointer to the region to be initialized.
  709.  * param pts The vertex array of the polygon.
  710.  * param vertices The number of the vertices.
  711.  * return TRUE on success, otherwise FALSE.
  712.  *
  713.  * note This fucntion defined only for _USE_NEWGAL.
  714.  *
  715.  * sa InitCircleRegion, InitEllipseRegion
  716.  */
  717. BOOL GUIAPI InitPolygonRegion (PCLIPRGN dst, const POINT* pts, int vertices);
  718. #endif
  719.     /** @} end of region_fns */
  720.     /**
  721.      * defgroup dc_fns General DC operations
  722.      *
  723.      * DC means Device Context, just like Graphics Context (GC) of X Lib.
  724.      * DC represents a rectangle area on the actual screen or a virtual screen
  725.      * created in memory. We call the rectangle area as "surface" of the DC.
  726.      *
  727.      * You can call a GDI function and pass a DC to the function to 
  728.      * draw lines, circles, or text. Commonly, you should call a function
  729.      * like a GetClientDC or a CreateCompatibleDC to get or create a
  730.      * DC, then call GDI functions to draw objects, e.g. a MoveTo and a LineTo.
  731.      * After finishing drawing, you should call a ReleaseDC or a DeleteMemDC function
  732.      * to release or destroy the DC.
  733.      *
  734.      * MiniGUI reserved an global DC called a HDC_SCREEN. You can
  735.      * use this DC directly without getting/creating or releasing/destroying.
  736.      *
  737.      * For main windows or controls, MiniGUI will send a MSG_PAINT message to
  738.      * the window when the whole or part of window area have been invalidated. 
  739.      * You should call a BegainPaint function to get the DC, then repaint the window, 
  740.      * and call a EndPaint function to release the DC at the last.
  741.      *
  742.      * Example:
  743.      *
  744.      * include msg_paint.c
  745.      *
  746.      * @{
  747.      */
  748. /**
  749.  * def HDC_SCREEN
  750.  * brief Handle to the device context of the whole screen.
  751.  *
  752.  * This DC is a special one. MiniGUI uses it to draw popup menus and other global
  753.  * objects. You can also use this DC to draw lines or text on the screen 
  754.  * directly, and there is no need to get or release it.
  755.  *
  756.  * If you do not want to create any main window, but you want to draw on
  757.  * the screen, you can use this DC.
  758.  *
  759.  * note MiniGUI does not do any clipping operation for this DC, so use this DC 
  760.  * may make a mess of other windows. 
  761.  */
  762. #define HDC_SCREEN          0
  763. /**
  764.  * def HDC_INVALID
  765.  * brief Indicates an invalid handle to device context.
  766.  */
  767. #define HDC_INVALID         0
  768. #define GDCAP_COLORNUM      0
  769. #define GDCAP_HPIXEL        1
  770. #define GDCAP_VPIXEL        2
  771. #define GDCAP_MAXX          3
  772. #define GDCAP_MAXY          4
  773. #define GDCAP_DEPTH         5
  774. #define GDCAP_BPP           6
  775. /**
  776.  * fn unsigned int GUIAPI GetGDCapability (HDC hdc, int iItem)
  777.  * brief Returns a capability of a DC.
  778.  *
  779.  * This function returns the capability of the specified item a iItem of the DC a hdc.
  780.  *
  781.  * param hdc The handle to the DC.
  782.  * param iItem An integer presents the capablity, can be one of the following values:
  783.  *
  784.  *  - GDCAP_COLORNUMn
  785.  *    Tell a GetGDCapability to return the colors number of the DC. Note the for a DC
  786.  *    with 32-bit depth, the function will return 0xFFFFFFFF, not 0x100000000.
  787.  *  - GDCAP_HPIXELn
  788.  *    Tell a GetGCapability to return the horizontal resolution of the DC.
  789.  *  - GDCAP_VPIXELn
  790.  *    Tell a GetGDCapability to return the vertical resolution of the DC.
  791.  *  - GDCAP_MAXXn
  792.  *    Tell a GetGDCapability to return the maximal visible x value of the DC.
  793.  *  - GDCAP_MAXYn
  794.  *    Tell a GetGDCapability to return the maximal visible y value of the DC.
  795.  *  - GDCAP_DEPTHn
  796.  *    Tell a GetGDCapability to return the color depth of the DC. The returned value can be 
  797.  *    1, 4, 8, 15, 16, 24, or 32.
  798.  *  - GDCAP_BPPn
  799.  *    Tell a GetGDCapability to return the bytes number for storing a pixle in the DC.
  800.  *
  801.  * return The capbility.
  802.  */
  803. unsigned int GUIAPI GetGDCapability (HDC hdc, int iItem);
  804. /**
  805.  * fn HDC GUIAPI GetDC (HWND hwnd)
  806.  * brief Gets a window DC of a window.
  807.  *
  808.  * This function gets a window DC of the specified a hwnd, and returns the handle to the DC.
  809.  * MiniGUI will try to return an unused DC from the internal DC pool, rather than
  810.  * allocate a new one from the system heap. Thus, you should release the DC when
  811.  * you finish drawing as soon as possible.
  812.  *
  813.  * param hwnd The handle to the window.
  814.  * return The handle to the DC, HDC_INVALID indicates an error.
  815.  *
  816.  * note You should call a ReleaseDC to release the DC when you are done.
  817.  *
  818.  * sa GetClientDC, ReleaseDC
  819.  */
  820. HDC GUIAPI GetDC (HWND hwnd);
  821. /**
  822.  * fn HDC GUIAPI GetClientDC (HWND hwnd)
  823.  * brief Gets a client DC of a window.
  824.  *
  825.  * This function gets a client DC of the specified a hwnd, and returns the handle to the DC.
  826.  * MiniGUI will try to return an unused DC from the internal DC pool, rather than
  827.  * allocate a new one from the system heap. Thus, you should release the DC when
  828.  * you finish drawing as soon as possible.
  829.  *
  830.  * param hwnd The handle to the window.
  831.  * return The handle to the DC, HDC_INVALID indicates an error.
  832.  *
  833.  * note You should call a ReleaseDC to release the DC when you are done.
  834.  *
  835.  * sa GetDC, ReleaseDC
  836.  */
  837. HDC GUIAPI GetClientDC (HWND hwnd);
  838. /**
  839.  * fn void GUIAPI ReleaseDC (HDC hdc)
  840.  * brief Releases a DC from DC pool.
  841.  *
  842.  * This function releases the DC returned by a GetDC or a GetClientDC.
  843.  *
  844.  * param hdc The handle to the DC.
  845.  *
  846.  * sa GetDC, GetClientDC 
  847.  */
  848. void GUIAPI ReleaseDC (HDC hdc);
  849. /**
  850.  * fn HDC GUIAPI CreatePrivateDC (HWND hwnd)
  851.  * brief Creates a private window DC of a window.
  852.  *
  853.  * This function creates a private window DC of the window a hwnd and returns the handle to the DC.
  854.  *
  855.  * When you calling a CreatePrivateDC function to create a private DC, MiniGUI will create 
  856.  * the DC in the system heap, rather than allocate one from the DC pool. Thus, you can 
  857.  * keep up the private DC in the life cycle of the window, and are not needed to release it for 
  858.  * using by other windows.
  859.  *
  860.  * param hwnd The handle to the window.
  861.  * return The handle to the DC, HDC_INVALID indicates an error.
  862.  *
  863.  * sa DeletePrivateDC
  864.  */
  865. HDC GUIAPI CreatePrivateDC (HWND hwnd);
  866. /**
  867.  * fn HDC GUIAPI CreatePrivateClientDC (HWND hwnd)
  868.  * brief Creates a private client DC of a window.
  869.  *
  870.  * This function creates a private client DC of the window a hwnd 
  871.  * and returns the handle to the DC.
  872.  *
  873.  * When you calling a CreatePrivateClientDC function to create a private client DC, 
  874.  * MiniGUI will create the DC in the system heap, rather than allocate one from the DC pool. 
  875.  * Thus, you can keep up the DC in the life cycle of the window, and are not needed to release 
  876.  * it for using by other windows.
  877.  *
  878.  * param hwnd The handle to the window.
  879.  * return The handle to the DC, HDC_INVALID indicates an error.
  880.  *
  881.  * sa DeletePrivateDC
  882.  */
  883. HDC GUIAPI CreatePrivateClientDC (HWND hwnd);
  884. /**
  885.  * fn HDC GUIAPI GetPrivateClientDC (HWND hwnd)
  886.  * brief Returns the private client DC of a window.
  887.  *
  888.  * This function returns the private client DC of the window a hwnd which 
  889.  * have extended style a WS_EX_USEPRIVATECDC.
  890.  *
  891.  * When a main window have the extended style a WS_EX_USEPRIVATECDC, or a
  892.  * control class have the style a CS_OWNDC, MiniGUI will create a private client DC 
  893.  * for this window in the creation progress of the window, and destroy the DC when you 
  894.  * destroy the window, and use this private client DC in default message handlers. 
  895.  * So there will be some improvments on drawing/repaint performance.
  896.  * You can alos call this function to get the private client DC, and use it to
  897.  * draw anything in your window.
  898.  *
  899.  * param hwnd The handle to the window.
  900.  * return The handle to the private client DC, HDC_INVALID indicates an error.
  901.  *
  902.  * sa CreatePrivateClientDC
  903.  */
  904. HDC GUIAPI GetPrivateClientDC (HWND hwnd);
  905. /**
  906.  * fn void GUIAPI DeletePrivateDC (HDC hdc)
  907.  * brief Deletes the DC returned by a CreatePrivateDC or a CreatePrivateClientDC.
  908.  *
  909.  * param hdc The handle to the DC.
  910.  *
  911.  * sa CreatePrivateDC, CreatePrivateClientDC
  912.  */
  913. void GUIAPI DeletePrivateDC (HDC hdc);
  914. #ifdef _USE_NEWGAL
  915. #define MEMDC_FLAG_NONE         0x00000000          /* None. */
  916. #define MEMDC_FLAG_SWSURFACE    0x00000000          /* DC is in system memory */
  917. #define MEMDC_FLAG_HWSURFACE    0x00000001          /* DC is in video memory */
  918. #define MEMDC_FLAG_SRCCOLORKEY  0x00001000          /* Blit uses a source color key */
  919. #define MEMDC_FLAG_SRCALPHA     0x00010000          /* Blit uses source alpha blending */
  920. #define MEMDC_FLAG_RLEACCEL     0x00004000          /* Surface is RLE encoded */
  921. /**
  922.  * fn HDC GUIAPI CreateCompatibleDCEx (HDC hdc, int width, int height)
  923.  * brief Creates a memory DC which is compatible with the specified reference DC.
  924.  *
  925.  * This function creates a memory DC which have the same pixel format
  926.  * as the specified reference DC a hdc. The same pixel format means that the memory DC will have
  927.  * the same pixel depth, the same RGB composition, or the same palette as the reference DC.
  928.  *
  929.  * param hdc The handle to the reference DC.
  930.  * param width The expected width of the result memory DC. If it is zero, the width will
  931.  *        be equal to the width of the reference DC.
  932.  * param height The expected height of the result memory DC. If it is zero, the height will
  933.  *        be equal to the height of the reference DC.
  934.  * return The handle to the memory DC, HDC_INVALID indicates an error.
  935.  *
  936.  * note Only defined for _USE_NEWGAL.
  937.  *
  938.  * sa CreateCompatibleDC
  939.  */
  940. HDC GUIAPI CreateCompatibleDCEx (HDC hdc, int width, int height);
  941. /**
  942.  * fn HDC GUIAPI CreateMemDC (int width, int height, int depth, DWORD flags, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)
  943.  * brief Creates a memory DC.
  944.  *
  945.  * This function creates a memory DC which have the specified flags and pixel format.
  946.  *
  947.  * param width The expected width of the result memory DC.
  948.  * param height The expected height of the result memory DC.
  949.  * param depth The expected color depth of the memory DC.
  950.  * param flags The memory DC flags, can be or'ed values of the following flags:
  951.  *
  952.  *   - MEMDC_FLAG_SWSURFACEn
  953.  *     Creates the surface of memory DC in the system memory.
  954.  *   - MEMDC_FLAG_HWSURFACEn
  955.  *     Creates the surface of memory DC in the video memory.
  956.  *   - MEMDC_FLAG_SRCCOLORKEYn
  957.  *     The created memory DC will use a source color key to blit to other DC.
  958.  *   - MEMDC_FLAG_SRCALPHAn
  959.  *     The created memory DC will use a source alpha blending to blit to other DC.
  960.  *   - MEMDC_FLAG_RLEACCELn
  961.  *     The memory DC will be RLE encoded
  962.  *
  963.  * param Rmask The bit-masks of the red components in a pixel value.
  964.  * param Gmask The bit-masks of the green components in a pixel value.
  965.  * param Bmask The bit-masks of the blue components in a pixel value.
  966.  * param Amask The bit-masks of the alpha components in a pixel value.
  967.  * return The handle to the memory DC, HDC_INVALID indicates an error.
  968.  *
  969.  * note Only defined for _USE_NEWGAL.
  970.  *
  971.  * sa CreateMemDCFromBitmap, CreateMemDCFromMyBitmap, CreateCompatibleDCEx
  972.  */
  973. HDC GUIAPI CreateMemDC (int width, int height, int depth, DWORD flags,
  974.                 Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
  975. /**
  976.  * fn HDC GUIAPI CreateMemDCFromBitmap (HDC hdc, BITMAP* bmp)
  977.  * brief Creates a memory DC from a reference DC and a BITMAP object.
  978.  *
  979.  * This function creates a memory DC compatible with the 
  980.  * specified DC, and use the bits of the BITMAP object as the surface of 
  981.  * the memory DC. The created memory DC will have the same geometry as the
  982.  * BITMAP object.
  983.  *
  984.  * param hdc The reference DC.
  985.  * param bmp The BITMAP object.
  986.  * return The handle to the memory DC, HDC_INVALID indicates an error.
  987.  *
  988.  * note Only defined for _USE_NEWGAL.
  989.  *
  990.  * sa CreateMemDCFromMyBitmap, DeleteMemDC, BITMAP
  991.  */
  992. HDC GUIAPI CreateMemDCFromBitmap (HDC hdc, BITMAP* bmp);
  993. /**
  994.  * fn HDC GUIAPI CreateMemDCFromMyBitmap (const MYBITMAP* my_bmp, RGB* pal)
  995.  * brief Creates a memory DC from a device independent MYBITMAP object.
  996.  *
  997.  * This function creates a memory DC which have the same
  998.  * pixel format as the MYBITMAP object a my_bmp, and use the bits of
  999.  * the MYBITMAP object as the surface of the memory DC. The created memory DC 
  1000.  * will have the same geometry as the MYBITMAP object. If the depth of a my_bmp
  1001.  * is 8-bit, the function will use a pal to initialize the palette of
  1002.  * the memory DC.
  1003.  *
  1004.  * param my_bmp The device independent MYBITMAP object.
  1005.  * param pal The palette of the MYBITMAP object. If the depth of a my_bmp
  1006.  *        is larger than 8-bit, this argument can be NULL.
  1007.  * return The handle to the memory DC, HDC_INVALID indicates an error.
  1008.  *
  1009.  * note Only defined for _USE_NEWGAL.
  1010.  *
  1011.  * sa CreateMemDCFromBitmap, DeleteMemDC, MYBITMAP
  1012.  */
  1013. HDC GUIAPI CreateMemDCFromMyBitmap (const MYBITMAP* my_bmp, RGB* pal);
  1014. /**
  1015.  * fn BOOL GUIAPI ConvertMemDC (HDC mem_dc, HDC ref_dc, DWORD flags)
  1016.  * brief Converts a memory DC to have a same format as a reference DC.
  1017.  *
  1018.  * This function converts a memory DC a mem_dc in order to
  1019.  * let it have the same pixel format as the reference DC a ref_dc.
  1020.  * This function will try to create a new surface for a mem_dc, 
  1021.  * and then copies and maps the surface of a ref_dc to it so the blit of 
  1022.  * the converted memory DC will be as fast as possible. 
  1023.  *
  1024.  * The a flags parameter has the same semantics as a CreateMemDC. 
  1025.  * You can also pass MEMDC_FLAG_RLEACCEL in the flags parameter and
  1026.  * MiniGUI will try to RLE accelerate colorkey and alpha blits in the 
  1027.  * resulting memory DC.
  1028.  *
  1029.  * param mem_dc The device context to be converted.
  1030.  * param ref_dc The reference device context.
  1031.  * param flags The memory DC flags, has the same semantics as a CreateMemDC.
  1032.  * return TRUE on success, otherwise FALSE.
  1033.  *
  1034.  * note Only defined for _USE_NEWGAL.
  1035.  *
  1036.  * sa CreateMemDC, DeleteMemDC
  1037.  */
  1038. BOOL GUIAPI ConvertMemDC (HDC mem_dc, HDC ref_dc, DWORD flags);
  1039. /**
  1040.  * fn BOOL GUIAPI SetMemDCAlpha (HDC mem_dc, DWORD flags, Uint8 alpha)
  1041.  * brief Sets the alpha value for the entire surface of a DC, as opposed to
  1042.  *        using the alpha component of each pixel.
  1043.  *
  1044.  * This function sets the alpha value for the entire surface of the DC a mem_dc, 
  1045.  * as opposed to using the alpha component of each pixel. This value measures 
  1046.  * the range of transparency of the surface, 0 being completely transparent to 255
  1047.  * being completely opaque. An a alpha value of 255 causes blits to be
  1048.  * opaque, the source pixels copied to the destination (the default). Note
  1049.  * that per-surface alpha can be combined with colorkey transparency.
  1050.  * 
  1051.  * If a flags is 0, alpha blending is disabled for the surface.
  1052.  * If a flags is MEMDC_FLAG_SRCALPHA, alpha blending is enabled for the surface.
  1053.  * OR'ing the flag with MEMDC_FLAG_RLEACCEL requests RLE acceleration for the
  1054.  * surface; if MEMDC_FLAG_RLEACCEL is not specified, the RLE acceleration 
  1055.  * will be removed.
  1056.  *
  1057.  * param mem_dc The device context.
  1058.  * param flags The alpha value specific memory DC flags.
  1059.  * param alpha the alpha value for the entire surface of the DC a mem_dc.
  1060.  * return TRUE on success, otherwise FALSE.
  1061.  *
  1062.  * note Only defined for _USE_NEWGAL.
  1063.  *
  1064.  * sa SetMemDCColorKey
  1065.  */ 
  1066. BOOL GUIAPI SetMemDCAlpha (HDC mem_dc, DWORD flags, Uint8 alpha);
  1067. /**
  1068.  * fn BOOL GUIAPI SetMemDCColorKey (HDC mem_dc, DWORD flags, Uint32 color_key)
  1069.  * brief Sets the color key (transparent pixel) of a memory DC.
  1070.  *
  1071.  * This function sets the color key (transparent pixel) of the memory DC a mem_dc.
  1072.  * If a flags is MEMDC_FLAG_SRCCOLORKEY (optionally OR'ed with MEMDC_FLAG_RLEACCEL),
  1073.  * a color_key will be the transparent pixel in the source DC of a blit.
  1074.  * MEMDC_FLAG_RLEACCEL requests RLE acceleration for the source of the DC if present,
  1075.  * and removes RLE acceleration if absent. If a flags is 0, this function clears 
  1076.  * any current color key.
  1077.  *
  1078.  * param mem_dc The device context.
  1079.  * param flags The color key specific memory DC flags.
  1080.  * param color_key the color_key of the memory DC.
  1081.  * return TRUE on success, otherwise FALSE.
  1082.  *
  1083.  * note Only defined for _USE_NEWGAL.
  1084.  *
  1085.  * sa SetMemDCAlpha
  1086.  */
  1087. BOOL GUIAPI SetMemDCColorKey (HDC mem_dc, DWORD flags, Uint32 color_key);
  1088. /**
  1089.  * fn void GUIAPI DeleteMemDC (HDC mem_dc)
  1090.  * brief Deletes a memory DC.
  1091.  *
  1092.  * This function deletes the memory DC a mem_dc, and frees the surface of the DC.
  1093.  * For the memory DC created from BITMAP object or MYBITMAP object, the bits used
  1094.  * by the surface of the DC will be reserved.
  1095.  *
  1096.  * param mem_dc The device context to be deleted.
  1097.  *
  1098.  * note Only defined for _USE_NEWGAL.
  1099.  *
  1100.  * sa CreateMemDC, CreateMemDCFromBitmap, CreateMemDCFromMyBitmap
  1101.  */
  1102. void GUIAPI DeleteMemDC (HDC mem_dc);
  1103. /**
  1104.  * def CreateCompatibleDC(hdc)
  1105.  * brief Creates a memory DC which is compatible with a given DC.
  1106.  *
  1107.  * This function creates a memory DC fully compatible with the reference 
  1108.  *        DC a hdc, including pixel format and geomatry.
  1109.  *
  1110.  * param hdc The reference DC.
  1111.  * return The handle to the memory DC, HDC_INVALID indicates an error.
  1112.  *
  1113.  * note Only defined as macro calling a CreateCompatibleDCEx for _USE_NEWGAL. 
  1114.  *       If _USE_NEWGAL is not defined, a CreateCompatibleDC is defined as 
  1115.  *       a function, and have the same semantics as this macro.
  1116.  *
  1117.  * sa CreateCompatibleDCEx, DeleteMemDC
  1118.  */
  1119. #define CreateCompatibleDC(hdc) CreateCompatibleDCEx(hdc, 0, 0);
  1120. /**
  1121.  * def DeleteCompatibleDC(hdc)
  1122.  * brief Deletes a memory DC.
  1123.  *
  1124.  * This function deletes a memory DC created by a CreateCompatibleDC.
  1125.  *
  1126.  * param hdc The device context to be deleted.
  1127.  *
  1128.  * note Only defined as macro calling a DeleteMemDC for _USE_NEWGAL. 
  1129.  *       If _USE_NEWGAL is not defined, a DeleteCompatibleDC is defined 
  1130.  *       as a function, and have the same semantics as this macro.
  1131.  *
  1132.  * sa CreateCompatibleDC, DeleteMemDC
  1133.  */
  1134. #define DeleteCompatibleDC(hdc) DeleteMemDC(hdc)
  1135. /**
  1136.  * fn Uint8* GUIAPI LockDC (HDC hdc, const RECT* rw_rc, int* width, int* height, int* pitch)
  1137.  * brief Locks a dc to get direct access to pixels in the DC.
  1138.  *
  1139.  * Calling this function will try to lock the DC a hdc to directly access the pixels
  1140.  * of the DC. You should tell this function the rectangle to be accessed, and the function
  1141.  * will return the effective a width, a height and a pitch of the DC. The access 
  1142.  * beyond effective width and height will be invalid. 
  1143.  *
  1144.  * Locking a DC which uses screen surface will lock some global objects, such as mouse
  1145.  * cursor, and so on. All GDI calls of other threads (in MiniGUI-Threads) or other process 
  1146.  * (in MiniGUI-Lite) will be blocked as well. So you should call a UnlockDC to unlock 
  1147.  * the DC as soon as possible, and should not call any system function in the duration of 
  1148.  * locking the DC.
  1149.  *
  1150.  * param hdc The handle to the device context.
  1151.  * param rw_rc The rectangle in device coordinate system to be accessed in the DC.
  1152.  * param width The width of the effective rectangle can access will be returned through 
  1153.  *        this pointer.
  1154.  * param height The height of the effective rectangle can access will be returned through 
  1155.  *        this pointer.
  1156.  * param pitch The pitch of the scan line of the DC will be returned through this pointer.
  1157.  *        Pitch means the length of the scan line in bytes.
  1158.  * return The bits pointer to the upper-left corner of the effective rectangle, NULL on error.
  1159.  *
  1160.  * note Only defined for _USE_NEWGAL.
  1161.  *
  1162.  * sa UnlockDC
  1163.  *
  1164.  * Example:
  1165.  *
  1166.  * include lockdc.c
  1167.  */
  1168. Uint8* GUIAPI LockDC (HDC hdc, const RECT* rw_rc, int* width, int* height, int* pitch);
  1169. /**
  1170.  * fn void GUIAPI UnlockDC (HDC hdc)
  1171.  * brief Unlocks a locked DC.
  1172.  *
  1173.  * param hdc The locked DC.
  1174.  *
  1175.  * note Only defined for _USE_NEWGAL.
  1176.  *
  1177.  * sa LockDC
  1178.  */
  1179. void GUIAPI UnlockDC (HDC hdc);
  1180.    /**
  1181.     * defgroup yuv_fns YUV overlay operations
  1182.     *
  1183.     * For an explanation of common video overlay formats, see:
  1184.     *
  1185.     * http://www.webartz.com/fourcc/indexyuv.htm
  1186.     *
  1187.     * For information on the relationship between color spaces, see:
  1188.     *
  1189.     * http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html
  1190.     *
  1191.     * @{
  1192.     */
  1193. #define GAL_YV12_OVERLAY  0x32315659    /* Planar mode: Y + V + U  (3 planes) */
  1194. #define GAL_IYUV_OVERLAY  0x56555949    /* Planar mode: Y + U + V  (3 planes) */
  1195. #define GAL_YUY2_OVERLAY  0x32595559    /* Packed mode: Y0+U0+Y1+V0 (1 plane) */
  1196. #define GAL_UYVY_OVERLAY  0x59565955    /* Packed mode: U0+Y0+V0+Y1 (1 plane) */
  1197. #define GAL_YVYU_OVERLAY  0x55595659    /* Packed mode: Y0+V0+Y1+U0 (1 plane) */
  1198. /**
  1199.  * The YUV hardware video overlay
  1200.  */
  1201. typedef struct GAL_Overlay {
  1202.     /** The overlay format, read-only */
  1203.     Uint32 format;
  1204.     /** The width of the overlay, read-only */
  1205.     int w;
  1206.     /** The height of the overlay, read-only */
  1207.     int h;
  1208.     /** The number of the planes of the overlay, read-only */
  1209.     int planes;
  1210.     /** The pitches of planes, read-only */
  1211.     Uint16 *pitches;
  1212.     /** The YUV pixels of planse, read-write */
  1213.     Uint8 **pixels;
  1214.     /* Hardware-specific surface info */
  1215.     struct private_yuvhwfuncs *hwfuncs;
  1216.     struct private_yuvhwdata *hwdata;
  1217.     /** Does This overlay hardware accelerated? */
  1218.     Uint32 hw_overlay :1;
  1219.     Uint32 UnusedBits :31;
  1220. } GAL_Overlay;
  1221. /**
  1222.  * fn GAL_Overlay* GUIAPI CreateYUVOverlay (int width, int height, Uint32 format, HDC hdc)
  1223.  * brief Creates a video output overlay on a DC.
  1224.  *
  1225.  * This function creates a video output overlay on the given DC a hdc.
  1226.  * Calling the returned surface an a overlay is something of a misnomer because
  1227.  * the contents of the display DC a hdc underneath the area where the overlay
  1228.  * is shown is undefined - it may be overwritten with the converted YUV data.
  1229.  *
  1230.  * param width The expected width of the video overlay.
  1231.  * param height The expected height of the video overlay.
  1232.  * param format The expected video overlay format, can be one of the following values:
  1233.  *
  1234.  *      - GAL_YV12_OVERLAYn
  1235.  *        Planar mode: Y + V + U  (3 planes)
  1236.  *      - GAL_IYUV_OVERLAYn
  1237.  *        Planar mode: Y + U + V  (3 planes)
  1238.  *      - GAL_YUY2_OVERLAYn
  1239.  *        Packed mode: Y0+U0+Y1+V0 (1 plane)
  1240.  *      - GAL_UYVY_OVERLAYn
  1241.  *        Packed mode: U0+Y0+V0+Y1 (1 plane)
  1242.  *      - GAL_YVYU_OVERLAYn
  1243.  *        Packed mode: Y0+V0+Y1+U0 (1 plane)
  1244.  *
  1245.  * param hdc The device context.
  1246.  * return A GAL_Overlay object on success, NULL on error.
  1247.  *
  1248.  * note Only defined for _USE_NEWGAL.
  1249.  *
  1250.  * sa GAL_LockYUVOverlay, GAL_FreeYUVOverlay, http://www.webartz.com/fourcc/indexyuv.htm
  1251.  */
  1252. GAL_Overlay* GUIAPI CreateYUVOverlay (int width, int height,
  1253.                 Uint32 format, HDC hdc);
  1254. /**
  1255.  * fn int GAL_LockYUVOverlay (GAL_Overlay *overlay)
  1256.  * brief Locks an overlay for direct access.
  1257.  *
  1258.  * note Only defined for _USE_NEWGAL.
  1259.  *
  1260.  * sa GAL_UnlockYUVOverlay
  1261.  */
  1262. int GAL_LockYUVOverlay (GAL_Overlay *overlay);
  1263. /**
  1264.  * fn void GAL_UnlockYUVOverlay (GAL_Overlay *overlay)
  1265.  * brief Unlocks a locked overlay when you are done
  1266.  *
  1267.  * note Only defined for _USE_NEWGAL.
  1268.  *
  1269.  * sa GAL_LockYUVOverlay
  1270.  */
  1271. void GAL_UnlockYUVOverlay (GAL_Overlay *overlay);
  1272. /**
  1273.  * def LockYUVOverlay
  1274.  * brief Is an alias of a GAL_LockYUVOverlay
  1275.  * sa GAL_LockYUVOverlay
  1276.  */
  1277. #define LockYUVOverlay GAL_LockYUVOverlay
  1278. /**
  1279.  * def UnlockYUVOverlay
  1280.  * brief Is an alias of a GAL_UnlockYUVOverlay
  1281.  * sa GAL_UnlockYUVOverlay
  1282.  */
  1283. #define UnlockYUVOverlay GAL_UnlockYUVOverlay
  1284. /**
  1285.  * fn void GAL_FreeYUVOverlay (GAL_Overlay *overlay)
  1286.  * brief Frees a YUV overlay.
  1287.  *
  1288.  * This function frees a YUV overlay created by a GAL_CreateYUVOverlay.
  1289.  *
  1290.  * param overlay The video overlay to be freed.
  1291.  *
  1292.  * note Only defined for _USE_NEWGAL.
  1293.  *
  1294.  * sa GAL_CreateYUVOverlay
  1295.  */
  1296. void GAL_FreeYUVOverlay (GAL_Overlay *overlay);
  1297. /**
  1298.  * def FreeYUVOverlay
  1299.  * brief Is an alias of a GAL_FreeYUVOverlay
  1300.  * sa GAL_FreeYUVOverlay
  1301.  */
  1302. #define FreeYUVOverlay GAL_FreeYUVOverlay
  1303. /**
  1304.  * fn void GUIAPI DisplayYUVOverlay (GAL_Overlay* overlay, const RECT* dstrect)
  1305.  * brief Blits a video overlay to the screen.
  1306.  *
  1307.  * Calling this function will blit the video overly a overlay to the screen. 
  1308.  * The contents of the video surface underneath the blit destination are
  1309.  * not defined. The width and height of the destination rectangle may be 
  1310.  * different from that of the overlay, but currently only 2x scaling is supported.
  1311.  * And note that the a dstrect is in screen coordinate system.
  1312.  *
  1313.  * param overlay The video overlay to be displayed.
  1314.  * param dstrect The destination rectangle. It may be different from that of 
  1315.  *        the overlay, but currently only 2x scaling is supported
  1316.  *
  1317.  * note Only defined for _USE_NEWGAL.
  1318.  *
  1319.  * sa GAL_CreateYUVOverlay, GAL_LockYUVOverlay
  1320.  */
  1321. void GUIAPI DisplayYUVOverlay (GAL_Overlay* overlay, const RECT* dstrect);
  1322.     /** @} end of yuv_fns */
  1323.     /**
  1324.      * defgroup gamma_fns Gamma correction functions
  1325.      * @{
  1326.      */
  1327. /**
  1328.  * fn int GAL_SetGamma (float red, float green, float blue)
  1329.  * brief Sets the gamma correction for each of the color channels.
  1330.  *
  1331.  * This function sets the gamma correction for each of the color channels.
  1332.  * The gamma values range (approximately) between 0.1 and 10.0.
  1333.  * If this function isn't supported directly by the hardware, it will
  1334.  * be emulated using gamma ramps, if available. 
  1335.  *
  1336.  * param red The gamma correction value of red channel.
  1337.  * param green The gamma correction value of green channel.
  1338.  * param blue The gamma correction value of blue channel.
  1339.  * return If successful, this function returns 0, otherwise it returns -1.
  1340.  *
  1341.  * note Only defined for _USE_NEWGAL.
  1342.  *
  1343.  * sa GAL_SetGammaRamp
  1344.  */
  1345. int GAL_SetGamma (float red, float green, float blue);
  1346. /**
  1347.  * def SetGamma
  1348.  * brief Is an alias of a GAL_SetGamma
  1349.  * sa GAL_SetGamma
  1350.  */
  1351. #define SetGamma GAL_SetGamma
  1352. /**
  1353.  * fn int GAL_SetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue)
  1354.  * brief Sets the gamma translation table for the red, green, and blue channels of the video hardware.  
  1355.  *
  1356.  * This function sets the gamma translation table for the red, green, and blue channels of the video hardware.  
  1357.  * Each table is an array of 256 16-bit quantities, representing a mapping 
  1358.  * between the input and output for that channel. The input is the index into 
  1359.  * the array, and the output is the 16-bit gamma value at that index, scaled 
  1360.  * to the output color precision.
  1361.  * 
  1362.  * You may pass NULL for any of the channels to leave it unchanged.
  1363.  *
  1364.  * param red The gamma translation table for the red channel.
  1365.  * param green The gamma translation table for the green channel.
  1366.  * param blue The gamma translation table for the blue channel.
  1367.  * return If the call succeeds, it will return 0. If the display driver or hardware does 
  1368.  * not support gamma translation, or otherwise fails, this function will return -1.
  1369.  *
  1370.  * note Only defined for _USE_NEWGAL.
  1371.  *
  1372.  * sa GAL_GetGammaRamp, GAL_SetGamma
  1373.  */
  1374. int GAL_SetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue);
  1375. /**
  1376.  * def SetGammaRamp
  1377.  * brief Is an alias of a GAL_SetGammaRamp
  1378.  * sa GAL_SetGammaRamp
  1379.  */
  1380. #define SetGammaRamp GAL_SetGammaRamp
  1381. /**
  1382.  * fn int GAL_GetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue)
  1383.  * brief Retrieves the current values of the gamma translation tables.
  1384.  * 
  1385.  * This function retrives the current values of the gamma translationn tables.
  1386.  * You must pass in valid pointers to arrays of 256 16-bit quantities.
  1387.  * Any of the pointers may be NULL to ignore that channel.
  1388.  *
  1389.  * param red Pointers to the array of gamma translation tables for the red channel.
  1390.  * param green Pointers to the array of gamma translation tables for the green channel.
  1391.  * param blue Pointers to the array of gamma translation tables for the blue channel.
  1392.  * return If the call succeeds, it will return 0. If the display driver or
  1393.  *         hardware does not support gamma translation, or otherwise fails, 
  1394.  *         this function will return -1.
  1395.  *
  1396.  * note Only defined for _USE_NEWGAL.
  1397.  *
  1398.  * sa GAL_SetGammaRamp
  1399.  */
  1400. int GAL_GetGammaRamp (Uint16 *red, Uint16 *green, Uint16 *blue);
  1401. /**
  1402.  * def GetGammaRamp
  1403.  * brief Is an alias of a GAL_GetGammaRamp
  1404.  * sa GAL_GetGammaRamp
  1405.  */
  1406. #define GetGammaRamp GAL_GetGammaRamp
  1407.     /** @} end of gamma_fns */
  1408. #else
  1409. HDC GUIAPI CreateCompatibleDC (HDC hdc);
  1410. void GUIAPI DeleteCompatibleDC (HDC hdc);
  1411. #endif /* _USE_NEWGAL */
  1412.     /** @} end of dc_fns */
  1413.     /**
  1414.      * defgroup dc_attrs DC attribute operations
  1415.      * @{
  1416.      */
  1417. #define BM_TRANSPARENT          1
  1418. #define BM_OPAQUE               0
  1419. #ifdef _USE_NEWGAL
  1420. #define DC_ATTR_BK_COLOR        0
  1421. #define DC_ATTR_BK_MODE         1
  1422. #define DC_ATTR_PEN_COLOR       2
  1423. #define DC_ATTR_BRUSH_COLOR     3
  1424. #define DC_ATTR_TEXT_COLOR      4
  1425. #define DC_ATTR_TAB_STOP        5
  1426. #define DC_ATTR_CHAR_EXTRA      6
  1427. #define DC_ATTR_ALINE_EXTRA     7
  1428. #define DC_ATTR_BLINE_EXTRA     8
  1429. #define DC_ATTR_MAP_MODE        9
  1430. #ifdef _ADV_2DAPI
  1431. #define DC_ATTR_PEN_TYPE        10
  1432. #define DC_ATTR_PEN_CAP_STYLE   11
  1433. #define DC_ATTR_PEN_JOIN_STYLE  12
  1434. #define DC_ATTR_PEN_WIDTH       13
  1435. #define DC_ATTR_BRUSH_TYPE      14
  1436. #define NR_DC_ATTRS             15
  1437. #else
  1438. #define NR_DC_ATTRS             10
  1439. #endif
  1440. /**
  1441.  * fn Uint32 GUIAPI GetDCAttr (HDC hdc, int attr)
  1442.  * brief Gets a specified attribute value of a DC.
  1443.  *
  1444.  * This function retrives a specified attribute value of the DC a hdc.
  1445.  *
  1446.  * param hdc The device context.
  1447.  * param attr The attribute to be retrived, can be one of the following values:
  1448.  *
  1449.  *      - DC_ATTR_BK_COLORn
  1450.  *        Background color.
  1451.  *      - DC_ATTR_BK_MODEn
  1452.  *        Background mode.
  1453.  *      - DC_ATTR_PEN_TYPEn
  1454.  *        Pen type.
  1455.  *      - DC_ATTR_PEN_CAP_STYLEn
  1456.  *        Cap style of pen.
  1457.  *      - DC_ATTR_PEN_JOIN_STYLEn
  1458.  *        Join style of pen.
  1459.  *      - DC_ATTR_PEN_COLORn
  1460.  *        Pen color.
  1461.  *      - DC_ATTR_BRUSH_TYPEn
  1462.  *        Brush type.
  1463.  *      - DC_ATTR_BRUSH_COLORn
  1464.  *        Brush color.
  1465.  *      - DC_ATTR_TEXT_COLORn
  1466.  *        Text color.
  1467.  *      - DC_ATTR_TAB_STOPn
  1468.  *        Tabstop width.
  1469.  *
  1470.  * return The attribute value.
  1471.  *
  1472.  * note Only defined for _USE_NEWGAL.
  1473.  *
  1474.  * sa SetDCAttr
  1475.  */
  1476. Uint32 GUIAPI GetDCAttr (HDC hdc, int attr);
  1477. /**
  1478.  * fn Uint32 GUIAPI SetDCAttr (HDC hdc, int attr, Uint32 value)
  1479.  * brief Sets a specified attribute value of a DC.
  1480.  *
  1481.  * This function sets a specified attribute value of the DC a hdc.
  1482.  *
  1483.  * param hdc The device context.
  1484.  * param attr The attribute to be set.
  1485.  * param value The attribute value.
  1486.  * return The old attribute value.
  1487.  *
  1488.  * note Only defined for _USE_NEWGAL.
  1489.  *
  1490.  * sa GetDCAttr
  1491.  */
  1492. Uint32 GUIAPI SetDCAttr (HDC hdc, int attr, Uint32 value);
  1493. /**
  1494.  * def GetBkColor(hdc)
  1495.  * brief Gets the background color of a DC.
  1496.  *
  1497.  * param hdc The device context.
  1498.  * return The background pixel value of the DC a hdc.
  1499.  *
  1500.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1501.  *       If _USE_NEWGAL is not defined, a GetBkColor is defined as 
  1502.  *       a function, and have the same semantics as this macro.
  1503.  *
  1504.  * sa GetDCAttr, SetBkColor
  1505.  */
  1506. #define GetBkColor(hdc)     (gal_pixel) GetDCAttr (hdc, DC_ATTR_BK_COLOR)
  1507. /**
  1508.  * def GetBkMode(hdc)
  1509.  * brief Gets the background mode of a DC.
  1510.  *
  1511.  * param hdc The device context.
  1512.  * return The background mode of the DC a hdc.
  1513.  *
  1514.  * retval BM_TRANSPARENT   Indicate that reserve the background untouched when draw text. 
  1515.  * retval BM_OPAQUE        Indicate that erase the background with background color when draw text.
  1516.  *
  1517.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1518.  *       If _USE_NEWGAL is not defined, a GetBkMode is defined as 
  1519.  *       a function, and have the same semantics as this macro.
  1520.  *
  1521.  * sa GetDCAttr, SetBkMode
  1522.  */
  1523. #define GetBkMode(hdc)      (int)       GetDCAttr (hdc, DC_ATTR_BK_MODE)
  1524. /**
  1525.  * def GetPenColor(hdc)
  1526.  * brief Gets the pen color of a DC.
  1527.  *
  1528.  * param hdc The device context.
  1529.  * return The pen color (pixel value) of the DC a hdc.
  1530.  *
  1531.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1532.  *       If _USE_NEWGAL is not defined, a GetPenColor is defined as 
  1533.  *       a function, and have the same semantics as this macro.
  1534.  *
  1535.  * sa GetDCAttr, SetPenColor
  1536.  */
  1537. #define GetPenColor(hdc)    (gal_pixel) GetDCAttr (hdc, DC_ATTR_PEN_COLOR)
  1538. /**
  1539.  * def GetBrushColor(hdc)
  1540.  * brief Gets the brush color of a DC.
  1541.  *
  1542.  * param hdc The device context.
  1543.  * return The brush color (pixel value) of the DC a hdc.
  1544.  *
  1545.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1546.  *       If _USE_NEWGAL is not defined, a GetBrushColor is defined as 
  1547.  *       a function, and have the same semantics as this macro.
  1548.  *
  1549.  * sa GetDCAttr, SetBrushColor
  1550.  */
  1551. #define GetBrushColor(hdc)  (gal_pixel) GetDCAttr (hdc, DC_ATTR_BRUSH_COLOR)
  1552. /**
  1553.  * def GetTextColor(hdc)
  1554.  * brief Gets the text color of a DC.
  1555.  *
  1556.  * param hdc The device context.
  1557.  * return The text color (pixel value) of the DC a hdc.
  1558.  *
  1559.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1560.  *       If _USE_NEWGAL is not defined, a GetTextColor is defined as 
  1561.  *       a function, and have the same semantics as this macro.
  1562.  *
  1563.  * sa GetDCAttr, SetTextColor
  1564.  */
  1565. #define GetTextColor(hdc)   (gal_pixel) GetDCAttr (hdc, DC_ATTR_TEXT_COLOR)
  1566. /**
  1567.  * def GetTabStop(hdc)
  1568.  * brief Gets the tabstop value of a DC.
  1569.  *
  1570.  * param hdc The device context.
  1571.  * return The tabstop value of the DC a hdc.
  1572.  *
  1573.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  1574.  *       If _USE_NEWGAL is not defined, a GetTabStop is defined as 
  1575.  *       a function, and have the same semantics as this macro.
  1576.  *
  1577.  * sa GetDCAttr, SetTabStop
  1578.  */
  1579. #define GetTabStop(hdc)     (int)       GetDCAttr (hdc, DC_ATTR_TAB_STOP)
  1580. /**
  1581.  * def SetBkColor(hdc, color)
  1582.  * brief Sets the background color of a DC to a new value.
  1583.  *
  1584.  * param hdc The device context.
  1585.  * param color The new background color (pixel value).
  1586.  * return The old background pixel value of the DC a hdc.
  1587.  *
  1588.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1589.  *       If _USE_NEWGAL is not defined, a SetBkColor is defined as 
  1590.  *       a function, and have the same semantics as this macro.
  1591.  *
  1592.  * sa SetDCAttr, GetBkColor
  1593.  */
  1594. #define SetBkColor(hdc, color)      (gal_pixel) SetDCAttr (hdc, DC_ATTR_BK_COLOR, (DWORD) color)
  1595. /**
  1596.  * def SetBkMode(hdc, mode)
  1597.  * brief Sets the background color of a DC to a new mode.
  1598.  *
  1599.  * param hdc The device context.
  1600.  * param mode The new background mode, be can one of the following values:
  1601.  *
  1602.  *      - BM_TRANSPARENTn
  1603.  *        Indicate that reserve the background untouched when draw text. 
  1604.  *      - BM_OPAQUEn
  1605.  *        Indicate that erase the background with background color when draw text.
  1606.  *
  1607.  * return The old background mode of the DC a hdc.
  1608.  *
  1609.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1610.  *       If _USE_NEWGAL is not defined, a SetBkMode is defined as 
  1611.  *       a function, and have the same semantics as this macro.
  1612.  *
  1613.  * sa SetDCAttr, GetBkMode
  1614.  */
  1615. #define SetBkMode(hdc, mode)        (int)       SetDCAttr (hdc, DC_ATTR_BK_MODE, (DWORD) mode)
  1616. /**
  1617.  * def SetPenColor(hdc, color)
  1618.  * brief Sets the pen color of a DC to a new value.
  1619.  *
  1620.  * param hdc The device context.
  1621.  * param color The new pen color (pixel value).
  1622.  * return The old pen pixel value of the DC a hdc.
  1623.  *
  1624.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1625.  *       If _USE_NEWGAL is not defined, a SetPenColor is defined as 
  1626.  *       a function, and have the same semantics as this macro.
  1627.  *
  1628.  * sa SetDCAttr, GetPenColor
  1629.  */
  1630. #define SetPenColor(hdc, color)     (gal_pixel) SetDCAttr (hdc, DC_ATTR_PEN_COLOR, (DWORD) color)
  1631. /**
  1632.  * def SetBrushColor(hdc, color)
  1633.  * brief Sets the brush color of a DC to a new value.
  1634.  *
  1635.  * param hdc The device context.
  1636.  * param color The new brush color (pixel value).
  1637.  * return The old brush pixel value of the DC a hdc.
  1638.  *
  1639.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1640.  *       If _USE_NEWGAL is not defined, a SetBrushColor is defined as 
  1641.  *       a function, and have the same semantics as this macro.
  1642.  *
  1643.  * sa SetDCAttr, GetBrushColor
  1644.  */
  1645. #define SetBrushColor(hdc, color)   (gal_pixel) SetDCAttr (hdc, DC_ATTR_BRUSH_COLOR, (DWORD) color)
  1646. /**
  1647.  * def SetTextColor(hdc, color)
  1648.  * brief Sets the text color of a DC to a new value.
  1649.  *
  1650.  * param hdc The device context.
  1651.  * param color The new text color (pixel value).
  1652.  * return The old text color (pixel value) of the DC a hdc.
  1653.  *
  1654.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1655.  *       If _USE_NEWGAL is not defined, a SetTextColor is defined as 
  1656.  *       a function, and have the same semantics as this macro.
  1657.  *
  1658.  * sa SetDCAttr, GetTextColor
  1659.  */
  1660. #define SetTextColor(hdc, color)    (gal_pixel) SetDCAttr (hdc, DC_ATTR_TEXT_COLOR, (DWORD) color)
  1661. /**
  1662.  * def SetTabStop(hdc, value)
  1663.  * brief Sets the tabstop of a DC to a new value.
  1664.  *
  1665.  * param hdc The device context.
  1666.  * param value The new tabstop value in pixels.
  1667.  * return The old tabstop value in pixels of the DC a hdc.
  1668.  *
  1669.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  1670.  *       If _USE_NEWGAL is not defined, a SetTabStop is defined as 
  1671.  *       a function, and have the same semantics as this macro.
  1672.  *
  1673.  * sa SetDCAttr, GetTabStop
  1674.  */
  1675. #define SetTabStop(hdc, value)      (int)       SetDCAttr (hdc, DC_ATTR_TAB_STOP, (DWORD) value)
  1676. #define ROP_SET         0
  1677. #define ROP_AND         1
  1678. #define ROP_OR          2
  1679. #define ROP_XOR         3
  1680. /**
  1681.  * fn int GUIAPI GetRasterOperation (HDC hdc)
  1682.  * brief Gets the raster operation of a DC.
  1683.  *
  1684.  * This function gets the raster operation of the DC a hdc.
  1685.  *
  1686.  * param hdc The device context.
  1687.  * return The current raster operation of the DC a hdc.
  1688.  *
  1689.  * retval ROP_SET      Set to the new pixel value, erase original pixel on the surface.
  1690.  * retval ROP_AND      AND'd the new pixel value with the original pixel on the surface.
  1691.  * retval ROP_OR       OR'd the new pixel value with the original pixel on the surface.
  1692.  * retval ROP_XOR      XOR'd the new pixel value with the original pixel on the surface.
  1693.  *
  1694.  * note Only defined for _USE_NEWGAL. 
  1695.  *
  1696.  * sa SetRasterOperation
  1697.  */
  1698. int GUIAPI GetRasterOperation (HDC hdc);
  1699. /**
  1700.  * fn int GUIAPI SetRasterOperation (HDC hdc, int rop)
  1701.  * brief Sets the raster operation of a DC to a new value.
  1702.  *
  1703.  * This function sets the raster operation of the DC a hdc to the new value a rop.
  1704.  *
  1705.  * param hdc The device context.
  1706.  * param rop The new raster operation, can be one of the following values:
  1707.  *
  1708.  *      - ROP_SETn
  1709.  *        Set to the new pixel value, erase original pixel on the surface.
  1710.  *      - ROP_ANDn
  1711.  *        AND'd the new pixel value with the original pixel on the surface.
  1712.  *      - ROP_ORn
  1713.  *        OR'd the new pixel value with the original pixel on the surface.
  1714.  *      - ROP_XORn
  1715.  *        XOR'd the new pixel value with the original pixel on the surface.
  1716.  *
  1717.  * return The old raster operation of the DC a hdc.
  1718.  *
  1719.  * note Only defined for _USE_NEWGAL. 
  1720.  *
  1721.  * sa GetRasterOperation
  1722.  */
  1723. int GUIAPI SetRasterOperation (HDC hdc, int rop);
  1724. #else
  1725. gal_pixel GUIAPI GetBkColor (HDC hdc);
  1726. int GUIAPI GetBkMode (HDC hdc);
  1727. gal_pixel GUIAPI GetTextColor (HDC hdc);
  1728. gal_pixel GUIAPI SetBkColor (HDC hdc, gal_pixel color);
  1729. int GUIAPI SetBkMode (HDC hdc, int bkmode);
  1730. gal_pixel GUIAPI SetTextColor (HDC hdc, gal_pixel color);
  1731. int GUIAPI GetTabStop (HDC hdc);
  1732. int GUIAPI SetTabStop (HDC hdc, int new_value);
  1733. /* Pen and brush support */
  1734. gal_pixel GUIAPI GetPenColor (HDC hdc);
  1735. gal_pixel GUIAPI GetBrushColor (HDC hdc);
  1736. gal_pixel GUIAPI SetPenColor (HDC hdc, gal_pixel color);
  1737. gal_pixel GUIAPI SetBrushColor (HDC hdc, gal_pixel color);
  1738. #endif /* _USE_NEWGAL */
  1739.     /** @} end of dc_attrs */
  1740.     /**
  1741.      * defgroup pal_fns Palette operations
  1742.      * @{
  1743.      */
  1744. #ifdef _USE_NEWGAL
  1745. /**
  1746.  * fn BOOL GUIAPI GetPalette (HDC hdc, int start, int len, GAL_Color* cmap)
  1747.  * brief Gets palette entries of a DC.
  1748.  *
  1749.  * This function gets some palette entries of the DC a hdc.
  1750.  *
  1751.  * param hdc The device context.
  1752.  * param start The start entry of palette to be retrived.
  1753.  * param len The length of entries to be retrived.
  1754.  * param cmap The buffer receives the palette entries.
  1755.  * return TRUE on success, otherwise FALSE.
  1756.  *
  1757.  * sa SetPalette
  1758.  */
  1759. BOOL GUIAPI GetPalette (HDC hdc, int start, int len, GAL_Color* cmap);
  1760. /**
  1761.  * fn BOOL GUIAPI SetPalette (HDC hdc, int start, int len, GAL_Color* cmap)
  1762.  * brief Sets palette entries of a DC.
  1763.  *
  1764.  * This function sets some palette entries of the DC a hdc.
  1765.  *
  1766.  * param hdc The device context.
  1767.  * param start The start entry of palette to be set.
  1768.  * param len The length of entries to be set.
  1769.  * param cmap Pointer to the palette entries.
  1770.  * return TRUE on success, otherwise FALSE.
  1771.  *
  1772.  * sa GetPalette
  1773.  */
  1774. BOOL GUIAPI SetPalette (HDC hdc, int start, int len, GAL_Color* cmap);
  1775. /**
  1776.  * fn BOOL GUIAPI SetColorfulPalette (HDC hdc)
  1777.  * brief Sets a DC with colorfule palette.
  1778.  *
  1779.  * This function sets the DC specified by a hdc with colorful palette.
  1780.  *
  1781.  * param hdc The device context.
  1782.  * return TRUE on success, otherwise FALSE.
  1783.  *
  1784.  * sa SetPalette
  1785.  */
  1786. BOOL GUIAPI SetColorfulPalette (HDC hdc);
  1787. #else
  1788. int GUIAPI GetPalette (HDC hdc, int start, int len, GAL_Color* cmap);
  1789. int GUIAPI SetPalette (HDC hdc, int start, int len, GAL_Color* cmap);
  1790. int GUIAPI SetColorfulPalette (HDC hdc);
  1791. #endif /* _USE_NEWGAL */
  1792.     /** @} end of pal_fns */
  1793.     /**
  1794.      * defgroup draw_fns General drawing functions
  1795.      * @{
  1796.      */
  1797. #ifdef _USE_NEWGAL
  1798. /**
  1799.  * fn void GUIAPI SetPixel (HDC hdc, int x, int y, gal_pixel pixel)
  1800.  * brief Sets the pixel with a new pixel value at the specified position on a DC.
  1801.  *
  1802.  * This function sets the pixel with a pixel value a pixel at the specified position a (x,y) 
  1803.  * on the DC a hdc. You can the pre-defined standard system pixel values.
  1804.  *
  1805.  * param hdc The device context.
  1806.  * param x x,y: The pixel position.
  1807.  * param y x,y: The pixel position.
  1808.  * param pixel The pixel value.
  1809.  *
  1810.  * sa GetPixel, color_vars
  1811.  */
  1812. void GUIAPI SetPixel (HDC hdc, int x, int y, gal_pixel pixel);
  1813. /**
  1814.  * fn gal_pixel GUIAPI SetPixelRGB (HDC hdc, int x, int y, Uint8 r, Uint8 g, Uint8 b)
  1815.  * brief Sets the pixel by a RGB triple at the specified position on a DC.
  1816.  *
  1817.  * This function sets the pixel with a RGB triple a (r,g,b) at the specified position a (x,y) 
  1818.  * on the DC a hdc.
  1819.  *
  1820.  * param hdc The device context.
  1821.  * param x x,y: The pixel position.
  1822.  * param y x,y: The pixel position.
  1823.  * param r The red component of a color.
  1824.  * param g The green component of a color.
  1825.  * param b The blue component of a color.
  1826.  * return The pixel value of the RGB triple.
  1827.  *
  1828.  * sa GetPixel, RGB2Pixel
  1829.  */
  1830. gal_pixel GUIAPI SetPixelRGB (HDC hdc, int x, int y, Uint8 r, Uint8 g, Uint8 b);
  1831. /**
  1832.  * fn gal_pixel GUIAPI SetPixelRGBA (HDC hdc, int x, int y, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
  1833.  * brief Sets the pixel by a RGBA quarter at the specified position on a DC.
  1834.  *
  1835.  * This function sets the pixel with a RGBA quarter a (r,g,b,a) at the specified position a (x,y) 
  1836.  * on the DC a hdc.
  1837.  *
  1838.  * param hdc The device context.
  1839.  * param x x,y: The pixel position.
  1840.  * param y x,y: The pixel position.
  1841.  * param r The red component of a color.
  1842.  * param g The green component of a color.
  1843.  * param b The blue component of a color.
  1844.  * param a The alpha component of a color.
  1845.  * return The pixel value of the RGBA quarter.
  1846.  *
  1847.  * note Only defined for _USE_NEWGAL. 
  1848.  *
  1849.  * sa GetPixel, RGBA2Pixel
  1850.  */
  1851. gal_pixel GUIAPI SetPixelRGBA (HDC hdc, int x, int y, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
  1852. /**
  1853.  * fn gal_pixel GUIAPI GetPixel (HDC hdc, int x, int y)
  1854.  * brief Gets the pixel value at the specified position on a DC.
  1855.  *
  1856.  * This function gets the pixel value at the specified position a (x,y) on the DC a hdc.
  1857.  *
  1858.  * param hdc The device context.
  1859.  * param x x,y: The pixel position.
  1860.  * param y x,y: The pixel position.
  1861.  * return The pixel value.
  1862.  *
  1863.  * sa SetPixel
  1864.  */
  1865. gal_pixel GUIAPI GetPixel (HDC hdc, int x, int y);
  1866. /**
  1867.  * fn gal_pixel GUIAPI GetPixelRGB (HDC hdc, int x, int y, Uint8* r, Uint8* g, Uint8* b)
  1868.  * brief Gets the pixel value at the specified position on a DC in RGB triple.
  1869.  *
  1870.  * This function gets the pixel value at the specified position a (x,y) 
  1871.  * on the DC a hdc in RGB triple.
  1872.  *
  1873.  * param hdc The device context.
  1874.  * param x x,y: The pixel position.
  1875.  * param y x,y: The pixel position.
  1876.  * param r The red component of the pixel will be returned through these pointers.
  1877.  * param g The green component of the pixel will be returned through these pointers.
  1878.  * param b The blue component of the pixel will be returned through these pointers.
  1879.  * return The pixel value.
  1880.  *
  1881.  * sa SetPixelRGB
  1882.  */
  1883. gal_pixel GUIAPI GetPixelRGB (HDC hdc, int x, int y, Uint8* r, Uint8* g, Uint8* b);
  1884. /**
  1885.  * fn gal_pixel GUIAPI GetPixelRGBA (HDC hdc, int x, int y, Uint8* r, Uint8* g, Uint8* b, Uint8* a)
  1886.  * brief Gets the pixel value at the specified position on a DC in RGBA quarter.
  1887.  *
  1888.  * This function gets the pixel value at the specified position a (x,y) on the DC a hdc 
  1889.  * in RGBA quarter.
  1890.  *
  1891.  * param hdc The device context.
  1892.  * param x x,y: The pixel position.
  1893.  * param y x,y: The pixel position.
  1894.  * param r The red component of the pixel will be returned through these pointers.
  1895.  * param g The green component of the pixel will be returned through these pointers.
  1896.  * param b The blue component of the pixel will be returned through these pointers.
  1897.  * param a The alpha component of the pixel will be returned through these pointers.
  1898.  * return The pixel value.
  1899.  *
  1900.  * sa SetPixelRGBA
  1901.  */
  1902. gal_pixel GUIAPI GetPixelRGBA (HDC hdc, int x, int y, Uint8* r, Uint8* g, Uint8* b, Uint8* a);
  1903. /**
  1904.  * fn gal_pixel GUIAPI RGBA2Pixel (HDC hdc, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
  1905.  * brief Gets the pixel value from a color in RGBA quarter under a DC.
  1906.  *
  1907.  * This function gets the pixel value from the RGB quarter a (r,g,b,a) under the DC a hdc.
  1908.  *
  1909.  * param hdc The device context.
  1910.  * param r The red component of a color.
  1911.  * param g The green component of a color.
  1912.  * param b The blue component of a color.
  1913.  * param a The alpha component of a color.
  1914.  * return The pixel value.
  1915.  *
  1916.  * note Only defined for _USE_NEWGAL. 
  1917.  *
  1918.  * sa Pixel2RGBA
  1919.  */
  1920. gal_pixel GUIAPI RGBA2Pixel (HDC hdc, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
  1921. /**
  1922.  * fn gal_pixel GUIAPI RGB2Pixel (HDC hdc, Uint8 r, Uint8 g, Uint8 b)
  1923.  * brief Gets the pixel value from a color in RGB triple under a DC.
  1924.  *
  1925.  * This function gets the pixel value from the RGB triple a (r,g,b) under the DC a hdc.
  1926.  *
  1927.  * param hdc The device context.
  1928.  * param r The red component of a color.
  1929.  * param g The green component of a color.
  1930.  * param b The blue component of a color.
  1931.  * return The pixel value.
  1932.  *
  1933.  * sa Pixel2RGB
  1934.  */
  1935. gal_pixel GUIAPI RGB2Pixel (HDC hdc, Uint8 r, Uint8 g, Uint8 b);
  1936. /**
  1937.  * fn void GUIAPI Pixel2RGB (HDC hdc, gal_pixel pixel, Uint8* r, Uint8* g, Uint8* b)
  1938.  * brief Gets the color in RGB triple from a pixel value under a DC.
  1939.  *
  1940.  * This function gets the color in RGB triple from the pixel value a pixel under the DC a hdc.
  1941.  *
  1942.  * param hdc The device context.
  1943.  * param pixel The pixel value.
  1944.  * param r The red component of the pixel will be returned through this pointer.
  1945.  * param g The green component of the pixel will be returned through this pointer.
  1946.  * param b The blue component of the pixel will be returned through this pointer.
  1947.  * return The pixel value.
  1948.  *
  1949.  * note Only defined for _USE_NEWGAL. 
  1950.  *
  1951.  * sa RGB2Pixel
  1952.  */
  1953. void GUIAPI Pixel2RGB (HDC hdc, gal_pixel pixel, Uint8* r, Uint8* g, Uint8* b);
  1954. /**
  1955.  * fn void GUIAPI Pixel2RGBA (HDC hdc, gal_pixel pixel, Uint8* r, Uint8* g, Uint8* b, Uint8* a)
  1956.  * brief Gets the color in RGBA quarter from a pixel value under a DC.
  1957.  *
  1958.  * This function gets the color in RGBA quarter from the pixel value a pixel under the DC a hdc.
  1959.  *
  1960.  * param hdc The device context.
  1961.  * param pixel The pixel value.
  1962.  * param r The red component of the pixel will be returned through this pointer.
  1963.  * param g The green component of the pixel will be returned through this pointer.
  1964.  * param b The blue component of the pixel will be returned through this pointer.
  1965.  * param a The alpha component of the pixel will be returned through this pointer.
  1966.  * return The pixel value.
  1967.  *
  1968.  * note Only defined for _USE_NEWGAL. 
  1969.  *
  1970.  * sa RGB2Pixel
  1971.  */
  1972. void GUIAPI Pixel2RGBA (HDC hdc, gal_pixel pixel, Uint8* r, Uint8* g, Uint8* b, Uint8* a);
  1973. #else
  1974. void GUIAPI SetPixel (HDC hdc, int x, int y, gal_pixel c);
  1975. void GUIAPI SetPixelRGB (HDC hdc, int x, int y, int r, int g, int b);
  1976. gal_pixel GUIAPI GetPixel (HDC hdc, int x, int y);
  1977. void GUIAPI GetPixelRGB (HDC hdc, int x, int y, int* r, int* g, int* b);
  1978. gal_pixel GUIAPI RGB2Pixel (HDC hdc, int r, int g, int b);
  1979. #endif /* USE_NEWGAL */
  1980. /**
  1981.  * fn void GUIAPI FocusRect (HDC hdc, int x0, int y0, int x1, int y1)
  1982.  * brief Draws a focus rectangle.
  1983.  *
  1984.  * This function uses XOR mode to draw the focus rectangle on the device context, i.e.
  1985.  * calling this function then calling this function with same arguments again 
  1986.  * will erase the focus rectangle and restore the pixels before the first call.
  1987.  * 
  1988.  * param hdc The device context.
  1989.  * param x0 x0,y0: The coordinates of upper-left corner of the rectangle.
  1990.  * param y0 x0,y0: The coordinates of upper-left corner of the rectangle.
  1991.  * param x1 x1,y1: The corrdinates of lower-right corner of the rectangle.
  1992.  * param y1 x1,y1: The corrdinates of lower-right corner of the rectangle.
  1993.  * 
  1994.  * sa DrawHVDotLine
  1995.  */
  1996. void GUIAPI FocusRect (HDC hdc, int x0, int y0, int x1, int y1);
  1997. /**
  1998.  * fn void GUIAPI DrawHVDotLine (HDC hdc, int x, int y, int w_h, BOOL H_V)
  1999.  * brief Draws a horizontal or vertical dot dash line.
  2000.  *
  2001.  * This function draws a horizontal or vertical dot dash line with
  2002.  * the zero pen.
  2003.  *
  2004.  * param hdc The device context.
  2005.  * param x x,y: The start point of the line.
  2006.  * param y x,y: The start point of the line.
  2007.  * param w_h The width of the line or horizontal dot line, or the height
  2008.  *            if you want to draw a vertical dot line.
  2009.  * param H_V Specify whether you want to draw a horizontal or vertical line.
  2010.  *            TRUE for horizontal, FALSE for vertical.
  2011.  *
  2012.  * sa FocusRect
  2013.  */
  2014. void GUIAPI DrawHVDotLine (HDC hdc, int x, int y, int w_h, BOOL H_V);
  2015. /**
  2016.  * def DrawHDotLine(hdc, x, y, w)
  2017.  * brief Draws a horizontal dot dash line.
  2018.  *
  2019.  * This function draws a horizontal dot dash line with
  2020.  * the zero pen.
  2021.  *
  2022.  * param hdc The device context.
  2023.  * param x x,y: The start point of the line.
  2024.  * param y x,y: The start point of the line.
  2025.  * param w The width of the horizontal dot line.
  2026.  *
  2027.  * note Defined as a macro calling DrawHVDotLine.
  2028.  *
  2029.  * sa DrawVDotLine, DrawHVDotLine
  2030.  */
  2031. #define DrawHDotLine(hdc, x, y, w) DrawHVDotLine (hdc, x, y, w, TRUE);
  2032. /**
  2033.  * def DrawVDotLine(hdc, x, y, h)
  2034.  * brief Draws a vertical dot line.
  2035.  *
  2036.  * This function draws a vertical dot dash line with
  2037.  * the zero pen.
  2038.  *
  2039.  * param hdc The device context.
  2040.  * param x x,y: The start point of the line.
  2041.  * param y x,y: The start point of the line.
  2042.  * param h The height of the horizontal dot line.
  2043.  *
  2044.  * note Defined as a macro calling DrawHVDotLine.
  2045.  *
  2046.  * sa DrawHDotLine, DrawHVDotLine
  2047.  */
  2048. #define DrawVDotLine(hdc, x, y, h) DrawHVDotLine (hdc, x, y, h, FALSE);
  2049. #ifdef _USE_NEWGAL
  2050. /**
  2051.  * fn BOOL GUIAPI LineClipper (const RECT* cliprc, int *_x0, int *_y0, int *_x1, int *_y1)
  2052.  * brief The line clipper using Cohen-Sutherland algorithm.
  2053.  *
  2054.  * This function clips a line from a (*_x0,*_y0) to a (*_x1, *_y1) 
  2055.  * with the specified clipping rectangle pointed to by a cliprc. Then return the
  2056.  * clipped line throught the pointers a (_x0, _y0, _x1, _y1).
  2057.  *
  2058.  * It is modified to do pixel-perfect clipping. This means that it
  2059.  * will generate the same endpoints that would be drawn if an ordinary
  2060.  * Bresenham line-drawer where used and only visible pixels drawn.
  2061.  *
  2062.  * param cliprc The Pointer to the clipping rectangle.
  2063.  * param _x0 _x0,_y0: The pointers contains the start point of the line.
  2064.  *        The start point after clipping will be returned through them as well as.
  2065.  * param _y0 _x0,_y0: The pointers contains the start point of the line.
  2066.  *        The start point after clipping will be returned through them as well as.
  2067.  * param _x1 _x1,_y1: The pointers contains the end point of the line.
  2068.  *        The end point after clipping will be returned through them as well as.
  2069.  * param _y1 _x1,_y1: The pointers contains the end point of the line.
  2070.  *        The end point after clipping will be returned through them as well as.
  2071.  * return TRUE for clipped by the clipping rectangle, FALSE for not clipped.
  2072.  *
  2073.  * note Only defined for _USE_NEWGAL
  2074.  *
  2075.  * sa LineGenerator
  2076.  */
  2077. BOOL GUIAPI LineClipper (const RECT* cliprc, int *_x0, int *_y0, int *_x1, int *_y1);
  2078. /**
  2079.  * var typedef void (* CB_LINE) (void* context, int stepx, int stepy)
  2080.  * brief The type of line generator callback.
  2081.  */
  2082. typedef void (* CB_LINE) (void* context, int stepx, int stepy);
  2083. /**
  2084.  * fn void GUIAPI LineGenerator (void* context, int x1, int y1, int x2, int y2, CB_LINE cb)
  2085.  * brief A line generator based-on Breshenham algorithm.
  2086.  *
  2087.  * This is a Breshenham line generator. When it generates a new point on the line,
  2088.  * it will call the callback a cb and pass the context a context and the step values
  2089.  * on x-coordinate and y-coodinate since the last point. The first generated point always 
  2090.  * be the start point you passed to this function. Thus, the first step values passed to 
  2091.  * a cb will be (0,0).
  2092.  *
  2093.  * MiniGUI implements a LineTo function by using this generator.
  2094.  *
  2095.  * param context The context, will be passed to the callback a cb.
  2096.  * param x1 x1,y1: The start point of the line.
  2097.  * param y1 x1,y1: The start point of the line.
  2098.  * param x2 x2,y2: The end point of the line.
  2099.  * param y2 x2,y2: The end point of the line.
  2100.  * param cb The line generator callback.
  2101.  *
  2102.  * note Only defined for _USE_NEWGAL
  2103.  *
  2104.  * sa LineTo, LineClipper, CB_LINE
  2105.  */
  2106. void GUIAPI LineGenerator (void* context, int x1, int y1, int x2, int y2, CB_LINE cb);
  2107. /**
  2108.  * var typedef void (* CB_CIRCLE) (void* context, int x1, int x2, int y)
  2109.  * brief The type of circle generator callback.
  2110.  */
  2111. typedef void (* CB_CIRCLE) (void* context, int x1, int x2, int y);
  2112. /**
  2113.  * fn void GUIAPI CircleGenerator (void* context, int sx, int sy, int r, CB_CIRCLE cb)
  2114.  * brief A circle generator.
  2115.  *
  2116.  * This is a general circle generator, it will generate two points on the same 
  2117.  * horizontal scan line at every turn. When it generates the points on the circle,
  2118.  * it will call the callback a cb and pass the context a context, the y-coordinate
  2119.  * of the scan line, the x-coordinate of the left point on the scan line, and 
  2120.  * the x-coordinate of the right point. Note that in some cases, the left point and
  2121.  * the right point will be the same.
  2122.  *
  2123.  * MiniGUI implements a Circle, a FillCircle and a InitCircleRegion functions
  2124.  * by using this generator.
  2125.  *
  2126.  * param context The context, will be passed to the callback a cb.
  2127.  * param sx sx,sy: The center of the circle.
  2128.  * param sy sx,sy: The center of the circle.
  2129.  * param r The radius of the circle.
  2130.  * param cb The circle generator callback.
  2131.  *
  2132.  * note Only defined for _USE_NEWGAL
  2133.  *
  2134.  * sa Circle, FillCircle, InitCircleRegion, CB_CIRCLE
  2135.  *
  2136.  * Example:
  2137.  *
  2138.  * include circlegenerator.c
  2139.  */
  2140. void GUIAPI CircleGenerator (void* context, int sx, int sy, int r, CB_CIRCLE cb);
  2141. /**
  2142.  * var typedef void (* CB_ELLIPSE) (void* context, int x1, int x2, int y)
  2143.  * brief The type of ellipse generator callback.
  2144.  */
  2145. typedef void (* CB_ELLIPSE) (void* context, int x1, int x2, int y);
  2146. /**
  2147.  * fn void GUIAPI EllipseGenerator (void* context, int sx, int sy, int rx, int ry, CB_ELLIPSE cb)
  2148.  * brief An ellipse generator.
  2149.  *
  2150.  * This is a general ellipse generator, it will generate two points on the same 
  2151.  * horizontal scan line at every turn. When it generates the points on the ellipse,
  2152.  * it will call the callback a cb and pass the context a context, the y-coordinate
  2153.  * of the scan line, the x-coordinate of the left point on the scan line, and 
  2154.  * the x-coordinate of the right point. Note that in some cases, the left point and
  2155.  * the right point will be the same.
  2156.  *
  2157.  * MiniGUI implements a Ellipse, a FillEllipse, and a InitEllipseRegion functions
  2158.  * by using this generator.
  2159.  *
  2160.  * param context The context, will be passed to the callback a cb.
  2161.  * param sx sx,sy: The center of the ellipse.
  2162.  * param sy sx,sy: The center of the ellipse.
  2163.  * param rx The x-radius of the ellipse.
  2164.  * param ry The y-radius of the ellipse.
  2165.  * param cb The ellipse generator callback.
  2166.  *
  2167.  * note Only defined for _USE_NEWGAL
  2168.  *
  2169.  * sa Ellipse, FillEllipse, InitEllipseRegion, CB_CIRCLE
  2170.  */
  2171. void GUIAPI EllipseGenerator (void* context, int sx, int sy, int rx, int ry, CB_ELLIPSE cb);
  2172. /**
  2173.  * var typedef void (* CB_ARC) (void* context, int x, int y)
  2174.  * brief The type of arc generator callback.
  2175.  */
  2176. typedef void (* CB_ARC) (void* context, int x, int y);
  2177. /**
  2178.  * fn void GUIAPI CircleArcGenerator (void* context, int sx, int sy, int r, int ang1, int ang2, CB_ARC cb)
  2179.  * brief An arc generator.
  2180.  *
  2181.  * This is a general arc generator. When it generates a point on the arc,
  2182.  * it will call the callback a cb and pass the context a context, the coordinates
  2183.  * of the point.
  2184.  *
  2185.  * MiniGUI implements a CircleArc function by using this generator.
  2186.  *
  2187.  * param context The context, will be passed to the callback a cb.
  2188.  * param sx sx,sy: The center of the arc.
  2189.  * param sy sx,sy: The center of the arc.
  2190.  * param r The radius of the arc.
  2191.  * param ang1 The degree of the start angle, in 1/64ths of a degree.
  2192.  * param ang2 The degree of the end angle, in 1/64ths of a degree.
  2193.  * param cb The arc generator callback.
  2194.  *
  2195.  * note Only defined for _USE_NEWGAL
  2196.  *
  2197.  * sa CircleArc, CB_ARC, fixed_math_fns
  2198.  */
  2199. void GUIAPI CircleArcGenerator (void* context, int sx, int sy, int r, int ang1, int ang2, CB_ARC cb);
  2200. /**
  2201.  * var typedef void (* CB_POLYGON) (void* context, int x1, int x2, int y)
  2202.  * brief The type of polygon generator callback.
  2203.  */
  2204. typedef void (* CB_POLYGON) (void* context, int x1, int x2, int y);
  2205. /**
  2206.  * fn BOOL GUIAPI MonotoneVerticalPolygonGenerator (void* context, const POINT* pts, int vertices, CB_POLYGON cb)
  2207.  * brief A monotone vertical polygon generator.
  2208.  *
  2209.  * This is a monotone vertical polygon generator.
  2210.  *
  2211.  * "Monoton vertical" means "monotone with respect to a vertical line";
  2212.  * that is, every horizontal line drawn through the polygon at any point
  2213.  * would cross exactly two active edges (neither horizontal lines
  2214.  * nor zero-length edges count as active edges; both are acceptable
  2215.  * anywhere in the polygon). Right & left edges may cross (polygons may be nonsimple).
  2216.  * Polygons that are not convex according to this definition won't be drawn properly.
  2217.  *
  2218.  * You can call a PolygonIsMonotoneVertical function to check one polygon is
  2219.  * monotone vertical or not.
  2220.  *
  2221.  * This function will generate two points on the same horizontal scan line at every turn. 
  2222.  * When it generates the points on the polygon, it will call the callback a cb and 
  2223.  * pass the context a context, the y-coordinate of the scan line, the x-coordinate of 
  2224.  * the left point on the scan line, and the x-coordinate of the right point. 
  2225.  * Note that in some cases, the left point and the right point will be the same.
  2226.  *
  2227.  * MiniGUI implements a FillPolygon and a InitPolygonRegion functions 
  2228.  * by using this generator.
  2229.  *
  2230.  * param context The context, will be passed to the callback a cb.
  2231.  * param pts The pointer to the vertex array of the polygon.
  2232.  * param vertices The number of the vertices, i.e. the size of the vertex array.
  2233.  * param cb The polygon generator callback.
  2234.  * return TRUE on success, FALSE on error.
  2235.  *
  2236.  * note Only defined for _USE_NEWGAL
  2237.  *
  2238.  * sa FillPolygon, InitPolygonRegion, PolygonIsMonotoneVertical, CB_CIRCLE
  2239.  */
  2240. BOOL GUIAPI MonotoneVerticalPolygonGenerator (void* context, const POINT* pts, int vertices, CB_POLYGON cb);
  2241. /**
  2242.  * fn BOOL GUIAPI PolygonIsMonotoneVertical (const POINT* pts, int vertices)
  2243.  * brief Checks a polygon is monotone vertical or not.
  2244.  *
  2245.  * This function checks if the given polygon is monotone vertical.
  2246.  *
  2247.  * param pts The pointer to the vertex array of the polygon.
  2248.  * param vertices The number of the vertices, i.e. the size of the vertex array.
  2249.  * return TRUE if it is monotonoe vertical, otherwise FALSE.
  2250.  *
  2251.  * note Only defined for _USE_NEWGAL
  2252.  *
  2253.  * sa MonotoneVerticalPolygonGenerator
  2254.  */
  2255. BOOL GUIAPI PolygonIsMonotoneVertical (const POINT* pts, int vertices);
  2256. /**
  2257.  * fn BOOL GUIAPI PolygonGenerator (void* context, const POINT* pts, int vertices, CB_POLYGON cb)
  2258.  * brief A general polygon generator.
  2259.  *
  2260.  * This is a general polygon generator.
  2261.  *
  2262.  * This function will generate two points on the same horizontal scan line at every turn. 
  2263.  * When it generates the points on the polygon, it will call the callback a cb and 
  2264.  * pass the context a context, the y-coordinate of the scan line, the x-coordinate of 
  2265.  * the left point on the scan line, and the x-coordinate of the right point. 
  2266.  * Note that in some cases, the left point and the right point will be the same.
  2267.  *
  2268.  * MiniGUI implements a FillPolygon and a InitPolygonRegion functions 
  2269.  * by using this generator.
  2270.  *
  2271.  * param context The context, will be passed to the callback a cb.
  2272.  * param pts The pointer to the vertex array of the polygon.
  2273.  * param vertices The number of the vertices, i.e. the size of the vertex array.
  2274.  * param cb The polygon generator callback.
  2275.  *
  2276.  * note Only defined for _USE_NEWGAL
  2277.  *
  2278.  * sa FillPolygon, InitPolygonRegion, CB_CIRCLE
  2279.  */
  2280. BOOL GUIAPI PolygonGenerator (void* context, const POINT* pts, int vertices, CB_POLYGON cb);
  2281. /**
  2282.  * var typedef BOOL (* CB_EQUAL_PIXEL) (void* context, int x, int y)
  2283.  * brief Flodd filling generator's equation callback.
  2284.  */
  2285. typedef BOOL (* CB_EQUAL_PIXEL) (void* context, int x, int y);
  2286. /**
  2287.  * var typedef void (* CB_FLOOD_FILL) (void* context, int x1, int x2, int y)
  2288.  * brief Flodd filling generator's scan line callback.
  2289.  */
  2290. typedef void (* CB_FLOOD_FILL) (void* context, int x1, int x2, int y);
  2291. /**
  2292.  * fn BOOL GUIAPI FloodFillGenerator (void* context, const RECT* src_rc, int x, int y, CB_EQUAL_PIXEL cb_equal_pixel, CB_FLOOD_FILL cb_flood_fill)
  2293.  * brief A flood filling generator.
  2294.  *
  2295.  * This function is a general flood filling generator.
  2296.  *
  2297.  * MiniGUI implements a FloodFill function by using this generator.
  2298.  *
  2299.  * param context The context, will be passed to the callback a cb.
  2300.  * param src_rc The filling bounding rectangle.
  2301.  * param x x,y: The start filling point.
  2302.  * param y x,y: The start filling point.
  2303.  * param cb_equal_pixel The callback to check the pixel is equal with the start point or not.
  2304.  * param cb_flood_fill The callback to fill a scan line.
  2305.  *
  2306.  * note Only defined for _USE_NEWGAL
  2307.  *
  2308.  * sa FloodFill, CB_EQUAL_PIXEL, CB_FLOOD_FILL
  2309.  */
  2310. BOOL GUIAPI FloodFillGenerator (void* context, const RECT* src_rc, int x, int y, 
  2311.                 CB_EQUAL_PIXEL cb_equal_pixel, CB_FLOOD_FILL cb_flood_fill);
  2312. /**
  2313.  * var typedef void* (* CB_GET_LINE_BUFF) (void* context, int y)
  2314.  * brief Bitmap scaler's getting line buffer callback.
  2315.  */
  2316. typedef void* (* CB_GET_LINE_BUFF) (void* context, int y);
  2317. /**
  2318.  * var typedef void* (* CB_LINE_SCALED) (void* context, const void* line, int y)
  2319.  * brief Bitmap scaler's getting line buffer callback.
  2320.  */
  2321. typedef void (* CB_LINE_SCALED) (void* context, const void* line, int y);
  2322. /**
  2323.  * fn BOOL GUIAPI BitmapDDAScaler (void* context, const BITMAP* src_bmp, int dst_w, int dst_h, CB_GET_LINE_BUFF cb_get_line_buff, CB_LINE_SCALED cb_line_scaled)
  2324.  * brief A bitmap scaler using DDA algorithm.
  2325.  *
  2326.  * This function is a general bitmap scaler using DDA algorithm. This function scales
  2327.  * the bitmap from bottom to top.
  2328.  *
  2329.  * MiniGUI implements ScaleBitmap, FillBoxWithBitmap, FillBoxWithBitmapPart, and 
  2330.  * StretchBlt functions by using this scaler.
  2331.  *
  2332.  * param context The context will be passed to the callbacks.
  2333.  * param src_bmp The source BITMAP object.
  2334.  * param dst_w The width of the destination BITMAP object.
  2335.  * param dst_h The height of the destination BITMAP object.
  2336.  * param cb_get_line_buff The callback to get the line buffer of the destination BITMAP object.
  2337.  * param cb_line_scaled The callback to tell the line is scaled.
  2338.  *
  2339.  * note Only defined for _USE_NEWGAL
  2340.  *
  2341.  * sa ScaleBitmap, StretchBlt, BitmapDDAScaler2
  2342.  */
  2343. BOOL GUIAPI BitmapDDAScaler (void* context, const BITMAP* src_bmp, int dst_w, int dst_h, 
  2344.             CB_GET_LINE_BUFF cb_get_line_buff, CB_LINE_SCALED cb_line_scaled);
  2345. /**
  2346.  * fn BOOL GUIAPI BitmapDDAScaler2 (void* context, const BITMAP* src_bmp, int dst_w, int dst_h, CB_GET_LINE_BUFF cb_get_line_buff, CB_LINE_SCALED cb_line_scaled)
  2347.  * brief A bitmap scaler using DDA algorithm.
  2348.  *
  2349.  * This function is a general bitmap scaler using DDA algorithm. This function scales
  2350.  * the bitmap from bottom to top.
  2351.  *
  2352.  * MiniGUI implements StretchBlt functions by using this scaler.
  2353.  *
  2354.  * param context The context will be passed to the callbacks.
  2355.  * param src_bmp The source BITMAP object.
  2356.  * param dst_w The width of the destination BITMAP object.
  2357.  * param dst_h The height of the destination BITMAP object.
  2358.  * param cb_get_line_buff The callback to get the line buffer of the destination BITMAP object.
  2359.  * param cb_line_scaled The callback to tell the line is scaled.
  2360.  *
  2361.  * note Only defined for _USE_NEWGAL
  2362.  *
  2363.  * sa ScaleBitmap, StretchBlt, BitmapDDAScaler
  2364.  */
  2365. BOOL GUIAPI BitmapDDAScaler2 (void* context, const BITMAP* src_bmp, int dst_w, int dst_h, 
  2366.             CB_GET_LINE_BUFF cb_get_line_buff, CB_LINE_SCALED cb_line_scaled);
  2367. /**
  2368.  * fn void GUIAPI MoveTo (HDC hdc, int x, int y)
  2369.  * brief Moves the current zero pen position.
  2370.  *
  2371.  * This function moves the current pen position of the DC a hdc to a (x,y).
  2372.  * The next line or other pen drawing operation will start from the position.
  2373.  *
  2374.  * param hdc The device context.
  2375.  * param x x,y: The new pen position.
  2376.  * param y x,y: The new pen position.
  2377.  *
  2378.  * sa LineTo
  2379.  */
  2380. void GUIAPI MoveTo (HDC hdc, int x, int y);
  2381. /**
  2382.  * fn void GUIAPI LineTo (HDC hdc, int x, int y)
  2383.  * brief Draws a zero line to a position.
  2384.  *
  2385.  * This function draws a line from the current zero pen position to a (x,y),
  2386.  * and then moves the zero pen position to a (x,y) by using the zero pen.
  2387.  * The next zero line drawing operation will start from the position.
  2388.  *
  2389.  * param hdc The device context.
  2390.  * param x x,y: The end point of the line.
  2391.  * param y x,y: The end point of the line.
  2392.  *
  2393.  * sa MoveTo, LineGenerator, dc_attrs
  2394.  */
  2395. void GUIAPI LineTo (HDC hdc, int x, int y);
  2396. /**
  2397.  * fn void GUIAPI Rectangle (HDC hdc, int x0, int y0, int x1, int y1)
  2398.  * brief Draws a rectangle.
  2399.  *
  2400.  * This function draws a rectangle by using a MoveTo and a LineTo.
  2401.  * The current zero pen position after calling this function will be a (x1,y1).
  2402.  *
  2403.  * param hdc The device context.
  2404.  * param x0 x0,y0: The coordinates of the upper-left corner of the rectangle.
  2405.  * param y0 x0,y0: The coordinates of the upper-left corner of the rectangle.
  2406.  * param x1 x1,y1: The coordinates of the lower-right corner of the rectangle.
  2407.  * param y1 x1,y1: The coordinates of the lower-right corner of the rectangle.
  2408.  *
  2409.  * sa MoveTo, LineTo
  2410.  */
  2411. void GUIAPI Rectangle (HDC hdc, int x0, int y0, int x1, int y1);
  2412. /** 
  2413.  * fn void GUIAPI PolyLineTo (HDC hdc, const POINT* pts, int vertices)
  2414.  * brief Draws a polyline.
  2415.  *
  2416.  * This function draws a polyline by using a MoveTo and a LineTo.
  2417.  * The current zero pen position after calling this function will be the
  2418.  * last vertex of the polyline.
  2419.  *
  2420.  * param hdc The device context.
  2421.  * param pts The pointer to the vertex array of the polyline.
  2422.  * param vertices The number of the vertices.
  2423.  *
  2424.  * sa MoveTo, LineTo
  2425.  */
  2426. void GUIAPI PolyLineTo (HDC hdc, const POINT* pts, int vertices);
  2427. /** 
  2428.  * fn void GUIAPI SplineTo (HDC hdc, const POINT* pts)
  2429.  * brief Draws a bezier spline.
  2430.  *
  2431.  * This function draws a bezier spline by using a MoveTo and a LineTo.
  2432.  * The current pen position after calling this function will be the
  2433.  * last control point of the spline. Note that the number of the 
  2434.  * control points should always be 4.
  2435.  *
  2436.  * param hdc The device context.
  2437.  * param pts The pointer to the control point array of the spline.
  2438.  *
  2439.  * note Only defined for _USE_NEWGAL
  2440.  *
  2441.  * sa MoveTo, LineTo
  2442.  */
  2443. void GUIAPI SplineTo (HDC hdc, const POINT* pts);
  2444. /**
  2445.  * fn void GUIAPI Circle (HDC hdc, int sx, int sy, int r)
  2446.  * brief Draws a circle.
  2447.  *
  2448.  * This function draws a circle with the zero pen on the DC a hdc.
  2449.  * The center of the circle is at a (sx, sy), and the radius is a r.
  2450.  * 
  2451.  * param hdc The device context.
  2452.  * param sx sx,sy: The center of the circle.
  2453.  * param sy sx,sy: The center of the circle.
  2454.  * param r The radius of the circle.
  2455.  *
  2456.  * sa CircleGenerator
  2457.  */
  2458. void GUIAPI Circle (HDC hdc, int sx, int sy, int r);
  2459. /**
  2460.  * fn void GUIAPI Ellipse (HDC hdc, int sx, int sy, int rx, int ry)
  2461.  * brief Draws a ellipse.
  2462.  *
  2463.  * This function draws an ellipse with the zero pen on the DC a hdc. 
  2464.  * The center of the ellipse is at a (sx, sy), the x-coordinate radius is a rx,
  2465.  * and the y-coordinate radius is a ry.
  2466.  * 
  2467.  * param hdc The device context.
  2468.  * param sx sx,sy: The center of the ellipse.
  2469.  * param sy sx,sy: The center of the ellipse.
  2470.  * param rx The x-coordinate radius of the ellipse.
  2471.  * param ry The y-coordinate radius of the ellipse.
  2472.  *
  2473.  * note Only defined for _USE_NEWGAL
  2474.  *
  2475.  * sa EllipseGenerator, dc_attrs
  2476.  */
  2477. void GUIAPI Ellipse (HDC hdc, int sx, int sy, int rx, int ry);
  2478. /**
  2479.  * fn void GUIAPI CircleArc (HDC hdc, int sx, int sy, int r, int ang1, int ang2)
  2480.  * brief Draws an arc.
  2481.  *
  2482.  * This function draws an arc with the zero pen on the DC a hdc. 
  2483.  * The center of the arc is at a (sx, sy), the radius is a r,
  2484.  * and the radians of start angle and end angle are a ang1 and a ang2 respectively.
  2485.  * 
  2486.  * param hdc The device context.
  2487.  * param sx sx,sy: The center of the arc.
  2488.  * param sy sx,sy: The center of the arc.
  2489.  * param r The radius of the arc.
  2490.  * param ang1 The degree of start angle, in 1/64ths of a degree.
  2491.  * param ang2 The degree of end angle, in 1/64ths of a degree.
  2492.  *
  2493.  * note Only defined for _USE_NEWGAL
  2494.  *
  2495.  * sa CircleArcGenerator, fixed_math_fns, dc_attrs
  2496.  */
  2497. void GUIAPI CircleArc (HDC hdc, int sx, int sy, int r, int ang1, int ang2);
  2498. /**
  2499.  * fn void GUIAPI FillBox (HDC hdc, int x, int y, int w, int h)
  2500.  * brief Fills a rectangle box.
  2501.  *
  2502.  * This function fills a box with the current brush in the DC a hdc. 
  2503.  * Note that MiniGUI only defined the color property for the brush objects so far.
  2504.  *
  2505.  * param hdc The device context.
  2506.  * param x x,y: The coorinates of the upper-left corner of the box.
  2507.  * param y x,y: The coorinates of the upper-left corner of the box.
  2508.  * param w The width of the box.
  2509.  * param h The height of the box.
  2510.  *
  2511.  * sa dc_attrs
  2512.  */
  2513. void GUIAPI FillBox (HDC hdc, int x, int y, int w, int h);
  2514. /**
  2515.  * fn void GUIAPI FillCircle (HDC hdc, int sx, int sy, int r)
  2516.  * brief Fills a circle.
  2517.  *
  2518.  * This function fills a circle with the current brush in the DC a hdc. 
  2519.  * Note that MiniGUI only defined the color property for the brush objects so far.
  2520.  *
  2521.  * param hdc The device context.
  2522.  * param sx sx,sy: The center of the circle.
  2523.  * param sy sx,sy: The center of the circle.
  2524.  * param r The radius of the circle.
  2525.  *
  2526.  * note Only defined for _USE_NEWGAL
  2527.  *
  2528.  * sa CircleGenerator, dc_attrs
  2529.  */
  2530. void GUIAPI FillCircle (HDC hdc, int sx, int sy, int r);
  2531. /**
  2532.  * fn void GUIAPI FillEllipse (HDC hdc, int sx, int sy, int rx, int ry)
  2533.  * brief Fills an ellipse.
  2534.  *
  2535.  * This function fills an ellipse with the current brush in the DC a hdc. 
  2536.  * Note that MiniGUI only defined the color property for the brush objects so far.
  2537.  *
  2538.  * param hdc The device context.
  2539.  * param sx sx,sy: The center of the circle.
  2540.  * param sy sx,sy: The center of the circle.
  2541.  * param rx The x-coordinate radius of the ellipse.
  2542.  * param ry The y-coordinate radius of the ellipse.
  2543.  *
  2544.  * note Only defined for _USE_NEWGAL
  2545.  *
  2546.  * sa EllipseGenerator, dc_attrs
  2547.  */
  2548. void GUIAPI FillEllipse (HDC hdc, int sx, int sy, int rx, int ry);
  2549. /**
  2550.  * fn BOOL GUIAPI FillPolygon (HDC hdc, const POINT* pts, int vertices)
  2551.  * brief Fills an polygon.
  2552.  *
  2553.  * This function fills a polygon with the current brush in the DC a hdc. 
  2554.  * Note that MiniGUI only defined the color property for the brush objects so far.
  2555.  *
  2556.  * param hdc The device context.
  2557.  * param pts The pointer to the vertex array of the polygon.
  2558.  * param vertices The number of the vertices, i.e. the size of the vertex array.
  2559.  *
  2560.  * note Only defined for _USE_NEWGAL
  2561.  *
  2562.  * sa PolygonGenerator, dc_attrs
  2563.  */
  2564. BOOL GUIAPI FillPolygon (HDC hdc, const POINT* pts, int vertices);
  2565. /**
  2566.  * fn BOOL GUIAPI FloodFill (HDC hdc, int x, int y)
  2567.  * brief Fills an enclosed area starting at point a (x,y).
  2568.  *
  2569.  * This function fills an enclosed area staring at point a (x,y), and 
  2570.  * stops when encountering a pixel different from the start point.
  2571.  *
  2572.  * param hdc The device context.
  2573.  * param x x,y: The start point.
  2574.  * param y x,y: The start point.
  2575.  *
  2576.  * note Only defined for _USE_NEWGAL
  2577.  *
  2578.  * sa FloodFillGenerator, dc_attrs
  2579.  */
  2580. BOOL GUIAPI FloodFill (HDC hdc, int x, int y);
  2581. #ifdef _ADV_2DAPI
  2582.     /**
  2583.      * addtogroup draw_adv_2d_fns Advanced 2-Dimension graphics functions.
  2584.      * @{
  2585.      */
  2586. /**
  2587.  * DC Line styles
  2588.  */
  2589. typedef enum
  2590. {
  2591.   /** 
  2592.    * The solid pen. 
  2593.    * We call the solid pen with zero wide as "zero pen".
  2594.    */
  2595.   PT_SOLID,
  2596.   /** 
  2597.    * The on/off dash pen, even segments are drawn; 
  2598.    * odd segments are not drawn.
  2599.    */
  2600.   PT_ON_OFF_DASH,
  2601.   /**
  2602.    * The double dash pen, even segments are normally. 
  2603.    * Odd segments are drawn in the brush color if 
  2604.    * the brush type is BT_SOLID, or in the brush color 
  2605.    * masked by the stipple if the brush type is BT_STIPPLED.
  2606.    */
  2607.   PT_DOUBLE_DASH,
  2608. } PenType;
  2609. /**
  2610.  * def GetPenType (hdc)
  2611.  * brief Gets the pen type of a DC.
  2612.  *
  2613.  * param hdc The device context.
  2614.  * return The pen type of the DC a hdc.
  2615.  *
  2616.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  2617.  *
  2618.  * sa PenType, GetDCAttr, SetPenType
  2619.  */
  2620. #define GetPenType(hdc)                 (PenType) GetDCAttr (hdc, DC_ATTR_PEN_TYPE)
  2621. /**
  2622.  * def SetPenType(hdc, type)
  2623.  * brief Sets the pen type of a DC to a new type.
  2624.  *
  2625.  * param hdc The device context.
  2626.  * param type The new pen type.
  2627.  * return The old pen type of the DC a hdc.
  2628.  *
  2629.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  2630.  *
  2631.  * sa PenType, SetDCAttr, GetPenType
  2632.  */
  2633. #define SetPenType(hdc, type)         (PenType) SetDCAttr (hdc, DC_ATTR_PEN_TYPE, (DWORD) type)
  2634. /**
  2635.  * fn void SetPenDashes (HDC hdc, int dash_offset, const unsigned char* dash_list, int n)
  2636.  * brief Sets the way dashed-lines are drawn. 
  2637.  *
  2638.  * Sets the way dashed-lines are drawn. Lines will be drawn with 
  2639.  * alternating on and off segments of the lengths specified in dash_list. 
  2640.  * The manner in which the on and off segments are drawn is determined by the pen type of the DC.
  2641.  * (This can be changed with SetPenType function.)
  2642.  *
  2643.  * param hdc The device context.
  2644.  * param dash_offset The offset in the dash list.
  2645.  * param dash_list The dash list.
  2646.  * param n The lenght of the dash list.
  2647.  *
  2648.  * return The old pen type of the DC a hdc.
  2649.  *
  2650.  * sa SetPenType
  2651.  */
  2652. void GUIAPI SetPenDashes (HDC hdc, int dash_offset, const unsigned char* dash_list, int n);
  2653. /**
  2654.  * DC Line cap styles
  2655.  */
  2656. typedef enum
  2657. {
  2658.   /**
  2659.    * the ends of the lines are drawn squared off 
  2660.    * and extending to the coordinates of the end point.
  2661.    */
  2662.   PT_CAP_BUTT,
  2663.   /**
  2664.    * the ends of the lines are drawn as semicircles with 
  2665.    * the diameter equal to the line width and centered at the end point.
  2666.    */
  2667.   PT_CAP_ROUND,
  2668.   /**
  2669.    * the ends of the lines are drawn squared off and 
  2670.    * extending half the width of the line beyond the end point.
  2671.    */
  2672.   PT_CAP_PROJECTING
  2673. } PTCapStyle;
  2674. /**
  2675.  * def GetPenCapStyle(hdc)
  2676.  * brief Gets the pen cap style of a DC.
  2677.  *
  2678.  * param hdc The device context.
  2679.  * return The pen cap style of the DC a hdc.
  2680.  *
  2681.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  2682.  *
  2683.  * sa PTCapStyle, GetDCAttr, SetPenCapStyle
  2684.  */
  2685. #define GetPenCapStyle(hdc)             (PTCapStyle) GetDCAttr (hdc, DC_ATTR_PEN_CAP_STYLE)
  2686. /**
  2687.  * def SetPenCapStyle(hdc, style)
  2688.  * brief Sets the pen type of a DC to a new type.
  2689.  *
  2690.  * param hdc The device context.
  2691.  * param style The new pen cap style.
  2692.  * return The old pen cap style of the DC a hdc.
  2693.  *
  2694.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  2695.  *
  2696.  * sa PTCapStyle, SetDCAttr, GetPenCapStyle
  2697.  */
  2698. #define SetPenCapStyle(hdc, style)       (PTCapStyle) SetDCAttr (hdc, DC_ATTR_PEN_CAP_STYLE, (DWORD) style)
  2699. /**
  2700.  * DC Line join styles
  2701.  */
  2702. typedef enum
  2703. {
  2704.   /**
  2705.    * the sides of each line are extended to meet at an angle.
  2706.    */
  2707.   PT_JOIN_MITER,
  2708.   /**
  2709.    * the sides of the two lines are joined by a circular arc.
  2710.    */
  2711.   PT_JOIN_ROUND,
  2712.   /**
  2713.    * the sides of the two lines are joined by a straight line 
  2714.    * which makes an equal angle with each line.
  2715.    */
  2716.   PT_JOIN_BEVEL
  2717. } PTJoinStyle;
  2718. /**
  2719.  * def GetPenJoinStyle(hdc)
  2720.  * brief Gets the pen join style of a DC.
  2721.  *
  2722.  * param hdc The device context.
  2723.  * return The pen join style of the DC a hdc.
  2724.  *
  2725.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  2726.  *
  2727.  * sa PTJoinStyle, GetDCAttr, SetPenJoinStyle
  2728.  */
  2729. #define GetPenJoinStyle(hdc)           (PTJoinStyle) GetDCAttr (hdc, DC_ATTR_PEN_JOIN_STYLE)
  2730. /**
  2731.  * def SetPenJoinStyle(hdc, style)
  2732.  * brief Sets the pen type of a DC to a new type.
  2733.  *
  2734.  * param hdc The device context.
  2735.  * param style The new pen join style.
  2736.  * return The old pen join style of the DC a hdc.
  2737.  *
  2738.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  2739.  *
  2740.  * sa PTJoinStyle, SetDCAttr, GetPenJoinStyle
  2741.  */
  2742. #define SetPenJoinStyle(hdc, style)     (PTJoinStyle) SetDCAttr (hdc, DC_ATTR_PEN_JOIN_STYLE, (DWORD) style)
  2743. /**
  2744.  * def GetPenWidth(hdc)
  2745.  * brief Gets the pen width of a DC.
  2746.  *
  2747.  * param hdc The device context.
  2748.  * return The width of the current pen in the DC a hdc.
  2749.  *
  2750.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  2751.  *
  2752.  * sa GetDCAttr, SetPenWidth
  2753.  */
  2754. #define GetPenWidth(hdc)                (unsigned int) GetDCAttr (hdc, DC_ATTR_PEN_WIDTH)
  2755. /**
  2756.  * def SetPenWidth(hdc, width)
  2757.  * brief Sets the pen width of a DC to a new width.
  2758.  *
  2759.  * param hdc The device context.
  2760.  * param width The new pen width.
  2761.  * return The old pen width of the DC a hdc.
  2762.  *
  2763.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  2764.  *
  2765.  * sa SetDCAttr, GetPenWidth
  2766.  */
  2767. #define SetPenWidth(hdc, width)         (unsigned int) SetDCAttr (hdc, DC_ATTR_PEN_WIDTH, (DWORD) width)
  2768. /**
  2769.  * DC brush types.
  2770.  *  Solid:
  2771.  *  Tiled:
  2772.  *  Stippled:
  2773.  *  OpaqueStippled:
  2774.  */
  2775. typedef enum
  2776. {
  2777.   /**
  2778.    * draw with the current brush color.
  2779.    */
  2780.   BT_SOLID,
  2781.   /**
  2782.    * draw with a tiled bitmap.
  2783.    */
  2784.   BT_TILED,
  2785.   /**
  2786.    * draw using the stipple bitmap. 
  2787.    * Pixels corresponding to bits in the stipple bitmap that are set 
  2788.    * will be drawn in the brush color; pixels corresponding to bits 
  2789.    * that are not set will be left untouched.
  2790.    */
  2791.   BT_STIPPLED,
  2792.   /**
  2793.    * draw using the stipple bitmap. 
  2794.    * Pixels corresponding to bits in the stipple bitmap that are set 
  2795.    * will be drawn in the brush color; pixels corresponding to bits 
  2796.    * that are not set will be drawn with the background color.
  2797.    */
  2798.   BT_OPAQUE_STIPPLED
  2799. } BrushType;
  2800. /**
  2801.  * def GetBrushType(hdc)
  2802.  * brief Gets the brush type of a DC.
  2803.  *
  2804.  * param hdc The device context.
  2805.  * return The brush type of the DC a hdc.
  2806.  *
  2807.  * note Defined as a macro calling a GetDCAttr for _USE_NEWGAL. 
  2808.  *
  2809.  * sa BrushType, GetDCAttr, SetBrushType
  2810.  */
  2811. #define GetBrushType(hdc)               (BrushType) GetDCAttr (hdc, DC_ATTR_BRUSH_TYPE)
  2812. /**
  2813.  * def SetBrushType(hdc, type)
  2814.  * brief Sets the brush type of a DC to a new type.
  2815.  *
  2816.  * param hdc The device context.
  2817.  * param type The new brush type.
  2818.  * return The old brush type of the DC a hdc.
  2819.  *
  2820.  * note Defined as a macro calling a SetDCAttr for _USE_NEWGAL. 
  2821.  *
  2822.  * sa BrushType, SetDCAttr, GetBrushType
  2823.  */
  2824. #define SetBrushType(hdc, type)         (BrushType) SetDCAttr (hdc, DC_ATTR_BRUSH_TYPE, (DWORD) type)
  2825. /** The stipple bitmap structure. */
  2826. typedef struct _STIPPLE
  2827. {
  2828.     /** The width of the stipple bitmap. */
  2829.     int width;
  2830.     /** The height of the stipple bitmap. */
  2831.     int height;
  2832.     /** The pitch of the stipple bitmap. */
  2833.     int pitch;
  2834.     /** The size of the stipple bitmap. */
  2835.     size_t size;
  2836.     /** The pointer to the buffer of glyph bitmap bits. */
  2837.     const unsigned char* bits;
  2838. } STIPPLE;
  2839. /**
  2840.  * fn void GUIAPI SetBrushInfo (HDC hdc, const BITMAP* tile, const STIPPLE* stipple)
  2841.  * brief Set the tile or stipple with the DC. 
  2842.  *
  2843.  * param hdc The device context.
  2844.  * param tile The tile bitmap.
  2845.  * param stipple The stipple bitmap.
  2846.  *
  2847.  * sa SetBrushInfo
  2848.  */
  2849. void GUIAPI SetBrushInfo (HDC hdc, const BITMAP* tile, const STIPPLE* stipple);
  2850. /**
  2851.  * fn void GUIAPI SetBrushOrigin (HDC hdc, int x, int y)
  2852.  * brief Set the origin when using tiles or stipples with the DC. 
  2853.  *
  2854.  * Set the origin when using tiles or stipples with the DC. 
  2855.  * The tile or stipple will be aligned such that the upper left corner 
  2856.  * of the tile or stipple will coincide with this point.
  2857.  * 
  2858.  * param hdc The device context.
  2859.  * param x The x-coordinate of the origin.
  2860.  * param y The y-coordinate of the origin.
  2861.  *
  2862.  * sa SetBrushInfo
  2863.  */
  2864. void GUIAPI SetBrushOrigin (HDC hdc, int x, int y);
  2865. /**
  2866.  * fn void GUIAPI LineEx (HDC hdc, int x1, int y1, int x2, int y2)
  2867.  * brief Draws a line with the current pen in the DC a hdc.
  2868.  *
  2869.  * This function draws a line with the current pen in the DC a hdc. 
  2870.  * The line draws from a (x1, y1) to a (x2, y2).
  2871.  * 
  2872.  * param hdc The device context.