ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

gdi32p.h
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS System Libraries
00004  * FILE:            lib/gdi32/include/gdi32p.h
00005  * PURPOSE:         User-Mode Win32 GDI Library Private Header
00006  * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
00007  */
00008 
00009 
00010 /* DATA **********************************************************************/
00011 
00012 extern PGDI_TABLE_ENTRY GdiHandleTable;
00013 extern PGDI_SHARED_HANDLE_TABLE GdiSharedHandleTable;
00014 extern HANDLE hProcessHeap;
00015 extern HANDLE CurrentProcessId;
00016 extern DWORD GDI_BatchLimit;
00017 extern PDEVCAPS GdiDevCaps;
00018 extern BOOL gbLpk;          // Global bool LanguagePack
00019 extern HANDLE ghSpooler;
00020 extern RTL_CRITICAL_SECTION semLocal;
00021 
00022 typedef INT
00023 (CALLBACK* EMFPLAYPROC)(
00024     HDC hdc,
00025     INT iFunction,
00026     HANDLE hPageQuery
00027 );
00028 
00029 /* DEFINES *******************************************************************/
00030 
00031 #define HANDLE_LIST_INC 20
00032 
00033 #define METAFILE_MEMORY 1
00034 #define METAFILE_DISK   2
00035 
00036 #define SAPCALLBACKDELAY 244
00037 
00038 /* MACRO ********************************************************************/
00039 
00040 #define ROP_USES_SOURCE(Rop)   (((Rop) << 2 ^ Rop) & 0xCC0000)
00041 
00042 /* TYPES *********************************************************************/
00043 
00044 // Based on wmfapi.h and Wine.
00045 typedef struct tagMETAFILEDC
00046 {
00047     PVOID       pvMetaBuffer;
00048     HANDLE      hFile;
00049     DWORD       Size;
00050     DWORD       dwWritten;
00051     METAHEADER  mh;
00052     WORD        reserved;
00053     HLOCAL      MFObjList;
00054     HPEN        hPen;
00055     HBRUSH      hBrush;
00056     HDC         hDc;
00057     HGDIOBJ     hMetaDc;
00058     HPALETTE    hPalette;
00059     HFONT       hFont;
00060     HBITMAP     hBitmap;
00061     HRGN        hRegion;
00062     HGDIOBJ     hMetafile;
00063     HGDIOBJ     hMemDc;
00064     HPEN        hExtPen;
00065     HGDIOBJ     hEnhMetaDc;
00066     HGDIOBJ     hEnhMetaFile;
00067     HCOLORSPACE hColorSpace;
00068     WCHAR       Filename[MAX_PATH+2];
00069 } METAFILEDC,*PMETAFILEDC;
00070 
00071 // Metafile Entry handle
00072 typedef struct tagMF_ENTRY
00073 {
00074     LIST_ENTRY   List;
00075     HGDIOBJ      hmDC;             // Handle return from NtGdiCreateClientObj.
00076     PMETAFILEDC pmfDC;
00077 } MF_ENTRY, *PMF_ENTRY;
00078 
00079 typedef struct tagENHMETAFILE
00080 {
00081     PVOID      pvMetaBuffer;
00082     HANDLE     hFile;      /* Handle for disk based MetaFile */
00083     DWORD      Size;
00084     INT        iType;
00085     PENHMETAHEADER emf;
00086     UINT       handles_size, cur_handles;
00087     HGDIOBJ   *handles;
00088     INT        horzres, vertres;
00089     INT        horzsize, vertsize;
00090     INT        logpixelsx, logpixelsy;
00091     INT        bitspixel;
00092     INT        textcaps;
00093     INT        rastercaps;
00094     INT        technology;
00095     INT        planes;
00096 } ENHMETAFILE,*PENHMETAFILE;
00097 
00098 
00099 #define PDEV_UMPD_ID  0xFEDCBA98
00100 // UMPDEV flags
00101 #define UMPDEV_NO_ESCAPE      0x0002
00102 #define UMPDEV_SUPPORT_ESCAPE 0x0004
00103 typedef struct _UMPDEV
00104 {
00105     DWORD           Sig;            // Init with PDEV_UMPD_ID
00106     struct _UMPDEV *pumpdNext;
00107     PDRIVER_INFO_5W pdi5Info;
00108     HMODULE         hModule;
00109     DWORD           dwFlags;
00110     DWORD           dwDriverAttributes;
00111     DWORD           dwConfigVersion; // Number of times the configuration
00112     // file for this driver has been upgraded
00113     // or downgraded since the last spooler restart.
00114     DWORD           dwDriverCount;   // After init should be 2
00115     DWORD           WOW64_UMPDev;
00116     DWORD           WOW64_hMod;
00117     DWORD           Unknown;
00118     PVOID           apfn[INDEX_LAST]; // Print Driver pfn
00119 } UMPDEV, *PUMPDEV;
00120 
00121 #define LOCALFONT_COUNT 10
00122 typedef struct _LOCALFONT
00123 {
00124     FONT_ATTR  lfa[LOCALFONT_COUNT];
00125 } LOCALFONT, *PLOCALFONT;
00126 
00127 // sdk/winspool.h
00128 typedef BOOL (WINAPI *ABORTPRINTER) (HANDLE);
00129 typedef BOOL (WINAPI *CLOSEPRINTER) (HANDLE);
00130 typedef BOOL (WINAPI *CLOSESPOOLFILEHANDLE) (HANDLE, HANDLE); // W2k8
00131 typedef HANDLE (WINAPI *COMMITSPOOLDATA) (HANDLE,HANDLE,DWORD); // W2k8
00132 typedef LONG (WINAPI *DOCUMENTPROPERTIESW) (HWND,HANDLE,LPWSTR,PDEVMODEW,PDEVMODEW,DWORD);
00133 typedef BOOL (WINAPI *ENDDOCPRINTER) (HANDLE);
00134 typedef BOOL (WINAPI *ENDPAGEPRINTER) (HANDLE);
00135 typedef BOOL (WINAPI *GETPRINTERW) (HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
00136 typedef BOOL (WINAPI *GETPRINTERDRIVERW) (HANDLE,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
00137 typedef HANDLE (WINAPI *GETSPOOLFILEHANDLE) (HANDLE); // W2k8
00138 typedef BOOL (WINAPI *ISVALIDDEVMODEW) (PDEVMODEW,size_t);
00139 typedef BOOL (WINAPI *OPENPRINTERW) (LPWSTR,PHANDLE,LPPRINTER_DEFAULTSW);
00140 typedef BOOL (WINAPI *READPRINTER) (HANDLE,PVOID,DWORD,PDWORD);
00141 typedef BOOL (WINAPI *RESETPRINTERW) (HANDLE,LPPRINTER_DEFAULTSW);
00142 typedef LPWSTR (WINAPI *STARTDOCDLGW) (HANDLE,DOCINFOW *);
00143 typedef DWORD (WINAPI *STARTDOCPRINTERW) (HANDLE,DWORD,PBYTE);
00144 typedef BOOL (WINAPI *STARTPAGEPRINTER) (HANDLE);
00145 // ddk/winsplp.h
00146 typedef BOOL (WINAPI *SEEKPRINTER) (HANDLE,LARGE_INTEGER,PLARGE_INTEGER,DWORD,BOOL);
00147 typedef BOOL (WINAPI *SPLREADPRINTER) (HANDLE,LPBYTE *,DWORD);
00148 // Same as ddk/winsplp.h DriverUnloadComplete?
00149 typedef BOOL (WINAPI *SPLDRIVERUNLOADCOMPLETE) (LPWSTR);
00150 // Driver support:
00151 // DrvDocumentEvent api/winddiui.h not W2k8 DocumentEventAW
00152 typedef INT (WINAPI *DOCUMENTEVENT) (HANDLE,HDC,INT,ULONG,PVOID,ULONG,PVOID);
00153 // DrvQueryColorProfile
00154 typedef BOOL (WINAPI *QUERYCOLORPROFILE) (HANDLE,PDEVMODEW,ULONG,VOID*,ULONG,FLONG);
00155 // Unknown:
00156 typedef DWORD (WINAPI *QUERYSPOOLMODE) (HANDLE,DWORD,DWORD);
00157 typedef DWORD (WINAPI *QUERYREMOTEFONTS) (DWORD,DWORD,DWORD);
00158 
00159 extern CLOSEPRINTER fpClosePrinter;
00160 extern OPENPRINTERW fpOpenPrinterW;
00161 
00162 /* FUNCTIONS *****************************************************************/
00163 
00164 PVOID
00165 HEAP_alloc(DWORD len);
00166 
00167 NTSTATUS
00168 HEAP_strdupA2W(
00169     LPWSTR* ppszW,
00170     LPCSTR lpszA
00171 );
00172 
00173 VOID
00174 HEAP_free(LPVOID memory);
00175 
00176 VOID
00177 FASTCALL
00178 FONT_TextMetricWToA(
00179     const TEXTMETRICW *ptmW,
00180     LPTEXTMETRICA ptmA
00181 );
00182 
00183 VOID
00184 FASTCALL
00185 NewTextMetricW2A(
00186     NEWTEXTMETRICA *tma,
00187     NEWTEXTMETRICW *tmw
00188 );
00189 
00190 VOID
00191 FASTCALL
00192 NewTextMetricExW2A(
00193     NEWTEXTMETRICEXA *tma,
00194     NEWTEXTMETRICEXW *tmw
00195 );
00196 
00197 BOOL
00198 FASTCALL
00199 DeleteRegion( HRGN );
00200 
00201 BOOL
00202 GdiIsHandleValid(HGDIOBJ hGdiObj);
00203 
00204 BOOL
00205 GdiGetHandleUserData(
00206     HGDIOBJ hGdiObj,
00207     DWORD ObjectType,
00208     PVOID *UserData
00209 );
00210 
00211 PLDC
00212 FASTCALL
00213 GdiGetLDC(HDC hDC);
00214 
00215 HGDIOBJ
00216 WINAPI
00217 GdiFixUpHandle(HGDIOBJ hGO);
00218 
00219 BOOL
00220 WINAPI
00221 CalculateColorTableSize(
00222     CONST BITMAPINFOHEADER *BitmapInfoHeader,
00223     UINT *ColorSpec,
00224     UINT *ColorTableSize
00225 );
00226 
00227 LPBITMAPINFO
00228 WINAPI
00229 ConvertBitmapInfo(
00230     CONST BITMAPINFO *BitmapInfo,
00231     UINT ColorSpec,
00232     UINT *BitmapInfoSize,
00233     BOOL FollowedByData
00234 );
00235 
00236 DWORD
00237 WINAPI
00238 GetAndSetDCDWord( HDC, INT, DWORD, DWORD, DWORD, DWORD );
00239 
00240 DWORD
00241 WINAPI
00242 GetDCDWord( HDC, INT, DWORD);
00243 
00244 HGDIOBJ
00245 WINAPI
00246 GetDCObject( HDC, INT);
00247 
00248 VOID
00249 NTAPI
00250 LogFontA2W(
00251     LPLOGFONTW pW,
00252     CONST LOGFONTA *pA
00253 );
00254 
00255 VOID
00256 NTAPI
00257 LogFontW2A(
00258     LPLOGFONTA pA,
00259     CONST LOGFONTW *pW
00260 );
00261 
00262 VOID
00263 WINAPI
00264 EnumLogFontExW2A(
00265     LPENUMLOGFONTEXA fontA,
00266     CONST ENUMLOGFONTEXW *fontW );
00267 
00268 /* FIXME: Put in some public header */
00269 UINT
00270 WINAPI
00271 UserRealizePalette(HDC hDC);
00272 
00273 int
00274 WINAPI
00275 GdiAddFontResourceW(LPCWSTR lpszFilename,FLONG fl,DESIGNVECTOR *pdv);
00276 
00277 VOID
00278 WINAPI
00279 GdiSetLastError( DWORD dwErrCode );
00280 
00281 DWORD WINAPI GdiGetCodePage(HDC);
00282 
00283 int
00284 WINAPI
00285 GdiGetBitmapBitsSize(BITMAPINFO *lpbmi);
00286 
00287 VOID GdiSAPCallback(PLDC pldc);
00288 HGDIOBJ FASTCALL hGetPEBHandle(HANDLECACHETYPE,COLORREF);
00289 
00290 int FASTCALL DocumentEventEx(PVOID,HANDLE,HDC,int,ULONG,PVOID,ULONG,PVOID);
00291 BOOL FASTCALL EndPagePrinterEx(PVOID,HANDLE);
00292 BOOL FASTCALL LoadTheSpoolerDrv(VOID);
00293 
00294 FORCEINLINE
00295 PVOID
00296 GdiAllocBatchCommand(
00297     HDC hdc,
00298     USHORT Cmd)
00299 {
00300     PTEB pTeb;
00301     USHORT cjSize;
00302     PGDIBATCHHDR pHdr;
00303 
00304     /* Get a pointer to the TEB */
00305     pTeb = NtCurrentTeb();
00306 
00307     /* Check if we have a valid environment */
00308     if (!pTeb || !pTeb->Win32ThreadInfo) return NULL;
00309 
00310     /* Do we use a DC? */
00311     if (hdc)
00312     {
00313         /* If the batch DC is NULL, we set this one as the new one */
00314         if (!pTeb->GdiTebBatch.HDC) pTeb->GdiTebBatch.HDC = hdc;
00315 
00316         /* If not, check if the batch DC equal to our DC */
00317         else if (pTeb->GdiTebBatch.HDC != hdc) return NULL;
00318     }
00319 
00320     /* Get the size of the entry */
00321     if      (Cmd == GdiBCPatBlt) cjSize = 0;
00322     else if (Cmd == GdiBCPolyPatBlt) cjSize = 0;
00323     else if (Cmd == GdiBCTextOut) cjSize = 0;
00324     else if (Cmd == GdiBCExtTextOut) cjSize = 0;
00325     else if (Cmd == GdiBCSetBrushOrg) cjSize = 0;
00326     else if (Cmd == GdiBCExtSelClipRgn) cjSize = 0;
00327     else if (Cmd == GdiBCSelObj) cjSize = sizeof(GDIBSOBJECT);
00328     else if (Cmd == GdiBCDelRgn) cjSize = sizeof(GDIBSOBJECT);
00329     else if (Cmd == GdiBCDelObj) cjSize = sizeof(GDIBSOBJECT);
00330     else cjSize = 0;
00331 
00332     /* Unsupported operation */
00333     if (cjSize == 0) return NULL;
00334 
00335     /* Check if the buffer is full */
00336     if ((pTeb->GdiBatchCount >= GDI_BatchLimit) ||
00337             ((pTeb->GdiTebBatch.Offset + cjSize) > GDIBATCHBUFSIZE))
00338     {
00339         /* Call win32k, the kernel will call NtGdiFlushUserBatch to flush
00340            the current batch */
00341         NtGdiFlush();
00342     }
00343 
00344     /* Get the head of the entry */
00345     pHdr = (PVOID)((PUCHAR)pTeb->GdiTebBatch.Buffer + pTeb->GdiTebBatch.Offset);
00346 
00347     /* Update Offset and batch count */
00348     pTeb->GdiTebBatch.Offset += cjSize;
00349     pTeb->GdiBatchCount++;
00350 
00351     /* Fill in the core fields */
00352     pHdr->Cmd = Cmd;
00353     pHdr->Size = cjSize;
00354 
00355     return pHdr;
00356 }
00357 
00358 FORCEINLINE
00359 PDC_ATTR
00360 GdiGetDcAttr(HDC hdc)
00361 {
00362     PDC_ATTR pdcattr;
00363 
00364     if (!GdiGetHandleUserData((HGDIOBJ)hdc, GDI_OBJECT_TYPE_DC, (PVOID*)&pdcattr)) return NULL;
00365     return pdcattr;
00366 }
00367 
00368 #ifdef _M_IX86
00369 FLOATL FASTCALL EFtoF(EFLOAT_S * efp);
00370 #define FOtoF(pfo) EFtoF((EFLOAT_S*)pfo)
00371 #else
00372 #define FOtoF(pfo) (*(pfo))
00373 #endif
00374 
00375 /* This is an inlined version of lrintf. */
00376 FORCEINLINE
00377 int
00378 _lrintf(float f)
00379 {
00380 #if defined(_M_IX86) && defined(__GNUC__)
00381     int result;
00382     __asm__ __volatile__ ("fistpl %0" : "=m" (result) : "t" (f) : "st");
00383     return result;
00384 #elif defined(_M_IX86) && defined(_MSC_VER)
00385     int result;
00386     __asm
00387     {
00388         fld f;
00389         fistp result;
00390     }
00391 #else
00392     /* slow, but portable */
00393     return (int)(f >= 0 ? f+0.5 : f-0.5);
00394 #endif
00395 }
00396 
00397 /* EOF */

Generated on Sat May 26 2012 04:37:09 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.