/* *@@sourcefile gpih.h: * header file for gpih.c (GPI helper functions). See remarks there. * * Note: Version numbering in this file relates to XWorkplace version * numbering. * *@@include #define INCL_GPILOGCOLORTABLE // for some funcs *@@include #include *@@include #include "helpers\gpih.h" */ /* * Copyright (C) 1997-2012 Ulrich M”ller. * This file is part of the "XWorkplace helpers" source package. * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, in version 2 as it comes in the * "COPYING" file of the XWorkplace main distribution. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #if __cplusplus extern "C" { #endif #ifndef GPIH_HEADER_INCLUDED #define GPIH_HEADER_INCLUDED /* ****************************************************************** * * Rectangle helpers * ********************************************************************/ BOOL gpihIsPointInRect(PRECTL prcl, LONG x, LONG y); VOID gpihInflateRect(PRECTL prcl, LONG l); VOID gpihCopyRectIncl(PRECTL prclGpi, PRECTL prclWin); /* ****************************************************************** * * Device helpers * ********************************************************************/ ULONG gpihQueryDisplayCaps(ULONG ulIndex); /* ****************************************************************** * * Color helpers * ********************************************************************/ // common RGB colors #define RGBCOL_BLACK 0x00000000 #define RGBCOL_WHITE 0x00FFFFFF #define RGBCOL_RED 0x00FF0000 #define RGBCOL_PINK 0x00FF00FF #define RGBCOL_BLUE 0x000000FF #define RGBCOL_CYAN 0x0000FFFF #define RGBCOL_GREEN 0x0000FF00 #define RGBCOL_YELLOW 0x00FFFF00 #define RGBCOL_GRAY 0x00CCCCCC #define RGBCOL_DARKRED 0x00800000 #define RGBCOL_DARKPINK 0x00800080 #define RGBCOL_DARKBLUE 0x00000080 #define RGBCOL_DARKCYAN 0x00008080 #define RGBCOL_DARKGREEN 0x00008000 #define RGBCOL_DARKYELLOW 0x00808000 #define RGBCOL_DARKGRAY 0x00808080 /* *@@ GET_BLUE: * gets the BLUE (first) byte from a * LONG RGB value. * *@@added V0.9.14 (2001-08-03) [umoeller] */ #define GET_BLUE(lcol) *( ((PBYTE)(&(lcol))) ) /* *@@ GET_GREEN: * gets the GREEN (second) byte from a * LONG RGB value. * *@@added V0.9.14 (2001-08-03) [umoeller] */ #define GET_GREEN(lcol) *( ((PBYTE)(&(lcol))) + 1 ) /* *@@ GET_RED: * gets the RED (third) byte from a * LONG RGB value. * *@@added V0.9.14 (2001-08-03) [umoeller] */ #define GET_RED(lcol) *( ((PBYTE)(&(lcol))) + 2 ) /* *@@ MAKE_RGB: * composes a LONG color value from * three BYTE values for red, green, * and blue. * *@@added V0.9.14 (2001-08-03) [umoeller] */ #define MAKE_RGB(r, g, b) (LONG)((BYTE)(b)) + (((LONG)((BYTE)(g))) << 8) + (((LONG)((BYTE)(r))) << 16) VOID XWPENTRY gpihManipulateRGB(PLONG plColor, double dFactor); typedef VOID XWPENTRY GPIHMANIPULATERGB(PLONG plColor, double dFactor); typedef GPIHMANIPULATERGB *PGPIHMANIPULATERGB; LONG XWPENTRY gpihMediumRGB(LONG lcol1, LONG lcol2); typedef LONG XWPENTRY GPIHMEDIUMRGB(LONG lcol1, LONG lcol2); typedef GPIHMEDIUMRGB *PGPIHMEDIUMRGB; BOOL XWPENTRY gpihSwitchToRGB(HPS hps); typedef BOOL XWPENTRY GPIHSWITCHTORGB(HPS hps); typedef GPIHSWITCHTORGB *PGPIHSWITCHTORGB; /* ****************************************************************** * * Drawing primitives helpers * ********************************************************************/ VOID XWPENTRY gpihDrawRect(HPS hps, PRECTL prcl); typedef VOID XWPENTRY GPIHDRAWRECT(HPS hps, PRECTL prcl); typedef GPIHDRAWRECT *PGPIHDRAWRECT; VOID XWPENTRY gpihBox(HPS hps, LONG lControl, PRECTL prcl); typedef VOID XWPENTRY GPIHBOX(HPS hps, LONG lControl, PRECTL prcl); typedef GPIHBOX *PGPIHBOX; VOID XWPENTRY gpihMarker(HPS hps, LONG x, LONG y, ULONG ulWidth); typedef VOID XWPENTRY GPIHMARKER(HPS hps, LONG x, LONG y, ULONG ulWidth); typedef GPIHMARKER *PGPIHMARKER; VOID XWPENTRY gpihDrawThickFrame(HPS hps, PRECTL prcl, ULONG ulWidth); typedef VOID XWPENTRY GPIHDRAWTHICKFRAME(HPS hps, PRECTL prcl, ULONG ulWidth); typedef GPIHDRAWTHICKFRAME *PGPIHDRAWTHICKFRAME; VOID XWPENTRY gpihDraw3DFrame2(HPS hps, PRECTL prcl, USHORT usWidth, LONG lColorLeft, LONG lColorRight); typedef VOID XWPENTRY GPIHDRAW3DFRAME2(HPS hps, PRECTL prcl, USHORT usWidth, LONG lColorLeft, LONG lColorRight); typedef GPIHDRAW3DFRAME2 *PGPIHDRAW3DFRAME2; VOID XWPENTRY gpihDraw3DFrame(HPS hps, PRECTL prcl, USHORT usWidth, LONG lColorLeft, LONG lColorRight); typedef VOID XWPENTRY GPIHDRAW3DFRAME(HPS hps, PRECTL prcl, USHORT usWidth, LONG lColorLeft, LONG lColorRight); typedef GPIHDRAW3DFRAME *PGPIHDRAW3DFRAME; LONG XWPENTRY gpihCharStringPosAt(HPS hps, PPOINTL pptlStart, PRECTL prclRect, ULONG flOptions, LONG lCount, PCH pchString); typedef LONG XWPENTRY GPIHCHARSTRINGPOSAT(HPS hps, PPOINTL pptlStart, PRECTL prclRect, ULONG flOptions, LONG lCount, PCH pchString); typedef GPIHCHARSTRINGPOSAT *PGPIHCHARSTRINGPOSAT; VOID XWPENTRY gpihCalcTextExtent(HPS hps, PCSZ pcsz, PLONG pcx, PULONG pcLines); VOID XWPENTRY gpihDrawString(HPS hps, PCSZ pcsz, PRECTL prcl, ULONG fl, PFONTMETRICS pfm); /* *@@ BKGNDINFO: * background information passed into * gpihFillBackground. * * The color flags apply always. The * bitmap flags apply only if hbm is * not NULLHANDLE. * *@@added V0.9.19 (2002-05-07) [umoeller] */ typedef struct _BKGNDINFO { ULONG flPaintMode; // a combination of one of the color // flags and one of the bitmap flags: // a) color flags #define PMOD_COLORMASK 0x000F #define PMOD_SOLID 0x0000 // solid color, use lcol1 #define PMOD_TOPBOTTOM 0x0001 // spectrum, lcol1 = top, lcol2 = bottom #define PMOD_LEFTRIGHT 0x0002 // spectrum, lcol1 = left, lcol2 = right // b) bitmap flags #define PMOD_BMPMASK 0x00F0 #define PMOD_BMP_CENTER 0x0000 // center the bitmap #define PMOD_BMP_SCALE_X 0x0002 // scale the bitmap to size in prcl, // respect lScale #define PMOD_BMP_TILE 0x0004 // tile the bitmap LONG lcol1, // color 1 (RGB) lcol2; // color 2 (RGB) HBITMAP hbm; // bitmap or NULLHANDLE if none ULONG lScale; // only with PMOD_BMP_SCALE_X: how many times // the bmp should be scaled (as with WPS // folder "Background" page); this cannot // be zero then } BKGNDINFO, *PBKGNDINFO; VOID gpihFillBackground(HPS hps, PRECTL prcl, PBKGNDINFO pInfo); /* ****************************************************************** * * Font helpers * ********************************************************************/ BOOL XWPENTRY gpihMatchFont(HPS hps, LONG lSize, BOOL fFamily, const char *pcszName, USHORT usFormat, FATTRS *pfa, PFONTMETRICS pFontMetrics); typedef BOOL XWPENTRY GPIHMATCHFONT(HPS hps, LONG lSize, BOOL fFamily, const char *pcszName, USHORT usFormat, FATTRS *pfa, PFONTMETRICS pFontMetrics); typedef GPIHMATCHFONT *PGPIHMATCHFONT; BOOL XWPENTRY gpihSplitPresFont(PSZ pszFontNameSize, PULONG pulSize, PSZ *ppszFaceName); typedef BOOL XWPENTRY GPIHSPLITPRESFONT(PSZ pszFontNameSize, PULONG pulSize, PSZ *ppszFaceName); typedef GPIHSPLITPRESFONT *PGPIHSPLITPRESFONT; BOOL XWPENTRY gpihLockLCIDs(VOID); typedef BOOL XWPENTRY GPIHLOCKLCIDS(VOID); typedef GPIHLOCKLCIDS *PGPIHLOCKLCIDS; VOID XWPENTRY gpihUnlockLCIDs(VOID); typedef VOID XWPENTRY GPIHUNLOCKLCIDS(VOID); typedef GPIHUNLOCKLCIDS *PGPIHUNLOCKLCIDS; LONG XWPENTRY gpihQueryNextFontID(HPS hps); LONG XWPENTRY gpihCreateFont(HPS hps, FATTRS *pfa); typedef LONG XWPENTRY GPIHCREATEFONT(HPS hps, FATTRS *pfa); typedef GPIHCREATEFONT *PGPIHCREATEFONT; LONG XWPENTRY gpihFindFont(HPS hps, LONG lSize, BOOL fFamily, const char *pcszName, USHORT usFormat, PFONTMETRICS pFontMetrics); typedef LONG XWPENTRY GPIHFINDFONT(HPS hps, LONG lSize, BOOL fFamily, const char *pcszName, USHORT usFormat, PFONTMETRICS pFontMetrics); typedef GPIHFINDFONT *PGPIHFINDFONT; LONG XWPENTRY gpihFindPresFont(HWND hwnd, BOOL fInherit, HPS hps, const char *pcszDefaultFont, PFONTMETRICS pFontMetrics, PLONG plSize); typedef LONG XWPENTRY GPIHFINDPRESFONT(HWND hwnd, BOOL fInherit, HPS hps, const char *pcszDefaultFont, PFONTMETRICS pFontMetrics, PLONG plSize); typedef GPIHFINDPRESFONT *PGPIHFINDPRESFONT; BOOL XWPENTRY gpihSetPointSize(HPS hps, LONG lPointSize); typedef BOOL XWPENTRY GPIHSETPOINTSIZE(HPS hps, LONG lPointSize); typedef GPIHSETPOINTSIZE *PGPIHSETPOINTSIZE; LONG XWPENTRY gpihQueryLineSpacing(HPS hps); typedef LONG XWPENTRY GPIHQUERYLINESPACING(HPS hps); typedef GPIHQUERYLINESPACING *PGPIHQUERYLINESPACING; /* ****************************************************************** * * Bitmap helpers * ********************************************************************/ BOOL XWPENTRY gpihCreateMemPS(HAB hab, PSIZEL psizlPage, HDC *hdcMem, HPS *hpsMem); typedef BOOL XWPENTRY GPIHCREATEMEMPS(HAB hab, PSIZEL psizlPage, HDC *hdcMem, HPS *hpsMem); typedef GPIHCREATEMEMPS *PGPIHCREATEMEMPS; HBITMAP XWPENTRY gpihCreateBitmap(HPS hpsMem, ULONG cx, ULONG cy); typedef HBITMAP XWPENTRY GPIHCREATEBITMAP(HPS hpsMem, ULONG cx, ULONG cy); typedef GPIHCREATEBITMAP *PGPIHCREATEBITMAP; HBITMAP XWPENTRY gpihCreateBitmap2(HPS hpsMem, ULONG cx, ULONG cy, ULONG cPlanes, ULONG cBitCount); HBITMAP XWPENTRY gpihCreateHalftonedBitmap(HAB hab, HBITMAP hbmSource, LONG lColorGray); typedef HBITMAP XWPENTRY GPIHCREATEHALFTONEDBITMAP(HAB hab, HBITMAP hbmSource, LONG lColorGray); typedef GPIHCREATEHALFTONEDBITMAP *PGPIHCREATEHALFTONEDBITMAP; APIRET gpihLoadBitmap(HBITMAP *phbm, HPS hps, HMODULE hmodResource, ULONG idBitmap); APIRET XWPENTRY gpihLoadBitmapFile(HBITMAP *phbm, HPS hps, PCSZ pcszBmpFile); typedef APIRET XWPENTRY GPIHLOADBITMAPFILE(HBITMAP *phbm, HPS hps, PCSZ pcszBmpFile); typedef GPIHLOADBITMAPFILE *PGPIHLOADBITMAPFILE; LONG XWPENTRY gpihStretchBitmap(HPS hpsTarget, HBITMAP hbmSource, PRECTL prclSource, PRECTL prclTarget, BOOL fProportional); typedef LONG XWPENTRY GPIHSTRETCHBITMAP(HPS hpsTarget, HBITMAP hbmSource, PRECTL prclSource, PRECTL prclTarget, BOOL fProportional); typedef GPIHSTRETCHBITMAP *PGPIHSTRETCHBITMAP; /* BOOL XWPENTRY gpihIcon2Bitmap(HPS hpsMem, HPOINTER hptr, LONG lBkgndColor, PPOINTL pptlLowerLeft, ULONG ulIconSize); */ BOOL XWPENTRY gpihDrawPointer(HPS hps, LONG x, LONG y, HPOINTER hptr, PSIZEL pszlIcon, PRECTL prclClip, ULONG fl); typedef BOOL XWPENTRY GPIHDRAWPOINTER(HPS hps, LONG x, LONG y, HPOINTER hptr, PSIZEL pszlIcon, PRECTL prclClip, ULONG fl); typedef GPIHDRAWPOINTER *PGPIHDRAWPOINTER; /* ****************************************************************** * * XBitmap functions * ********************************************************************/ /* *@@ XBITMAP: * representation of an XBitmap, which is created * with gpihCreateXBitmap and destroyed with * gpihDestroyXBitmap. * * An XBitmap is essentially a set of a memory * device context, a memory presentation space, * and a bitmap which is selected into that * HPS. * *@@added V0.9.12 (2001-05-20) [umoeller] */ typedef struct _XBITMAP { HDC hdcMem; // memory DC HPS hpsMem; // memory PS HBITMAP hbm; // bitmap handle SIZEL szl; // size of bitmap } XBITMAP, *PXBITMAP; PXBITMAP XWPENTRY gpihCreateXBitmap(HAB hab, LONG cx, LONG cy); typedef PXBITMAP XWPENTRY GPIHCREATEXBITMAP(HAB hab, LONG cx, LONG cy); typedef GPIHCREATEXBITMAP *PGPIHCREATEXBITMAP; PXBITMAP gpihCreateXBitmap2(HAB hab, LONG cx, LONG cy, ULONG cPlanes, ULONG cBitCount); HBITMAP XWPENTRY gpihDetachBitmap(PXBITMAP pbmp); VOID XWPENTRY gpihDestroyXBitmap(PXBITMAP *ppbmp); typedef VOID XWPENTRY GPIHDESTROYXBITMAP(PXBITMAP *ppbmp); typedef GPIHDESTROYXBITMAP *PGPIHDESTROYXBITMAP; PXBITMAP gpihCreateBmpFromPS(HAB hab, HPS hpsScreen, PRECTL prcl); #endif #if __cplusplus } #endif