Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1028 lines
22 KiB

  1. /*++ BUILD Version: 0007 // Increment this if a change has global effects
  2. Copyright (c) 1985 - 1999, Microsoft Corporation
  3. Module Name:
  4. gre.h
  5. Abstract:
  6. This module contains private GDI functions used by USER
  7. All of these function are named GRExxx.
  8. Author:
  9. Andre Vachon (andreva) 19-Apr-1995
  10. Revision History:
  11. --*/
  12. #include "w32wow64.h"
  13. DECLARE_HANDLE(HOBJ);
  14. DECLARE_KHANDLE(HOBJ);
  15. DECLARE_HANDLE(HLFONT);
  16. #define GGB_ENABLE_WINMGR 0x00000001
  17. #define GGB_DISABLE_WINMGR 0x00000002
  18. #define ULW_NOREPAINT 0x80000000
  19. #define ULW_DEFAULT_ATTRIBUTES 0x40000000
  20. #define ULW_NEW_ATTRIBUTES 0x20000000
  21. //
  22. // Various owner ship functions
  23. //
  24. // GDI object ownership flags
  25. // Note that normal process IDs (executive handles) use the upper 30 bits
  26. // of the handle. We set the second bit to 1 in the PIDs below so that
  27. // they will not conflict with normal PIDs. The lowest bit is reserved for
  28. // the OBJECTOWNER lock.
  29. #define OBJECT_OWNER_ERROR ( 0x80000022)
  30. #define OBJECT_OWNER_PUBLIC ( 0x00000000)
  31. #define OBJECT_OWNER_CURRENT ( 0x80000002)
  32. #define OBJECT_OWNER_NONE ( 0x80000012)
  33. //
  34. // WINBUG #83303 2-8-2000 bhouse Investigate old comment
  35. // Old Comment:
  36. // - make these functions call direct to NtGdi
  37. //
  38. #define GrePatBlt NtGdiPatBlt
  39. BOOL APIENTRY GrePatBlt(HDC,int,int,int,int,DWORD);
  40. //
  41. // Define _WINDOWBLT_NOTIFICATION_ to turn on Window BLT notification.
  42. // This notification will set a special flag in the SURFOBJ passed to
  43. // drivers when the DrvCopyBits operation is called to move a window.
  44. //
  45. // See also:
  46. // ntgdi\gre\maskblt.cxx
  47. //
  48. #ifndef _WINDOWBLT_NOTIFICATION_
  49. #define _WINDOWBLT_NOTIFICATION_
  50. #endif
  51. #ifdef _WINDOWBLT_NOTIFICATION_
  52. // Flags passed to NtGdiBitBlt:
  53. #define GBB_WINDOWBLT 0x00000001
  54. #define GreBitBlt(a,b,c,d,e,f,g,h,i,j) NtGdiBitBlt((a),(b),(c),(d),(e),(f),(g),(h),(i),(j),0)
  55. BOOL APIENTRY NtGdiBitBlt(HDC,int,int,int,int,HDC,int,int,DWORD,DWORD,FLONG);
  56. #else
  57. #define GreBitBlt NtGdiBitBlt
  58. BOOL APIENTRY GreBitBlt(HDC,int,int,int,int,HDC,int,int,DWORD,DWORD);
  59. #endif
  60. typedef struct _POLYPATBLT POLYPATBLT,*PPOLYPATBLT;
  61. BOOL
  62. GrePolyPatBlt(
  63. HDC hdc,
  64. DWORD rop,
  65. PPOLYPATBLT pPoly,
  66. DWORD Count,
  67. DWORD Mode);
  68. //
  69. // Owner APIs
  70. //
  71. BOOL
  72. GreSetBrushOwner(
  73. HBRUSH hbr,
  74. W32PID lPid
  75. );
  76. #define GreSetBrushOwnerPublic(x) GreSetBrushOwner((x), OBJECT_OWNER_PUBLIC)
  77. BOOL
  78. GreSetDCOwner(
  79. HDC hdc,
  80. W32PID lPid
  81. );
  82. BOOL
  83. GreSetBitmapOwner(
  84. HBITMAP hbm,
  85. W32PID lPid
  86. );
  87. HBITMAP
  88. GreMakeBitmapStock(
  89. HBITMAP hbm);
  90. HBITMAP
  91. GreMakeBitmapNonStock(
  92. HBITMAP hbm);
  93. HBRUSH
  94. GreMakeBrushStock(
  95. HBRUSH hbr);
  96. HBRUSH
  97. GreMakeBrushNonStock(
  98. HBRUSH hbr);
  99. W32PID
  100. GreGetObjectOwner(
  101. HOBJ hobj,
  102. DWORD objt
  103. );
  104. BOOL
  105. GreSetLFONTOwner(
  106. HLFONT hlfnt,
  107. W32PID lPid
  108. );
  109. BOOL
  110. GreSetRegionOwner(
  111. HRGN hrgn,
  112. W32PID lPid
  113. );
  114. int
  115. GreSetMetaRgn(
  116. HDC
  117. );
  118. HRGN APIENTRY NtGdiCreateRoundRectRgn(int, int, int, int, int, int);
  119. BOOL APIENTRY NtGdiFrameRgn(HDC, HRGN, HBRUSH, int, int);
  120. BOOL APIENTRY NtGdiRoundRect(HDC, int, int, int, int, int, int);
  121. BOOL
  122. GreSetPaletteOwner(
  123. HPALETTE hpal,
  124. W32PID lPid
  125. );
  126. BOOL
  127. GreWindowInsteadOfClient(
  128. PVOID pwo
  129. );
  130. //
  131. // Mark Global APIS
  132. //
  133. VOID
  134. GreSetBrushGlobal(HBRUSH hbr);
  135. //
  136. // Mark Delete\Undelete APIS
  137. //
  138. VOID
  139. GreMarkDeletableBrush(
  140. HBRUSH hbr
  141. );
  142. VOID
  143. GreMarkUndeletableBrush(
  144. HBRUSH hbr
  145. );
  146. VOID
  147. GreMarkUndeletableDC(
  148. HDC hdc
  149. );
  150. VOID
  151. GreMarkDeletableDC(
  152. HDC hdc
  153. );
  154. VOID
  155. GreMarkUndeletableFont(
  156. HFONT hfnt
  157. );
  158. VOID
  159. GreMarkDeletableFont(
  160. HFONT hfnt
  161. );
  162. BOOL
  163. GreMarkUndeletableBitmap(
  164. HBITMAP hbm
  165. );
  166. BOOL
  167. GreMarkDeletableBitmap(
  168. HBITMAP hbm
  169. );
  170. ULONG
  171. GreGetFontEnumeration(
  172. );
  173. ULONG
  174. GreGetFontContrast(
  175. );
  176. VOID
  177. GreLockDisplay(
  178. HDEV hdev
  179. );
  180. VOID
  181. GreUnlockDisplay(
  182. HDEV hdev
  183. );
  184. #if DBG
  185. BOOL
  186. GreIsDisplayLocked(
  187. HDEV hdev
  188. );
  189. #endif
  190. #if DBG || defined(PRERELEASE)
  191. VOID
  192. GreValidateVisrgn(
  193. HDC hdc,
  194. BOOL bValidateVisrgn
  195. );
  196. #endif
  197. BOOL APIENTRY GreIsValidRegion(HRGN hrgn);
  198. BOOL APIENTRY bSetDevDragRect(HDEV, RECTL*, RECTL *);
  199. BOOL APIENTRY bSetDevDragWidth(HDEV, ULONG);
  200. BOOL APIENTRY bMoveDevDragRect(HDEV, RECTL*);
  201. ULONG_PTR APIENTRY GreSaveScreenBits(HDEV hdev, ULONG iMode, ULONG_PTR iIdent, RECTL *prcl);
  202. typedef struct _CURSINFO *PCURSINFO;
  203. VOID APIENTRY GreSetPointer(HDEV hdev,PCURSINFO pci,ULONG fl, ULONG ulTrailLength, ULONG ulFreq);
  204. VOID APIENTRY GreMovePointer(HDEV hdev,int x,int y, ULONG ulFlags);
  205. //
  206. // Vis region calls
  207. //
  208. typedef enum _VIS_REGION_SELECT {
  209. SVR_DELETEOLD = 1,
  210. SVR_COPYNEW,
  211. SVR_ORIGIN,
  212. SVR_SWAP,
  213. } VIS_REGION_SELECT;
  214. BOOL
  215. GreSelectVisRgn(
  216. HDC hdc,
  217. HRGN hrgn,
  218. VIS_REGION_SELECT fl
  219. );
  220. BOOL
  221. GreGetDCOrgEx(
  222. HDC hdc,
  223. PPOINT ppt,
  224. PRECT prc
  225. );
  226. BOOL
  227. GreGetDCOrg(
  228. HDC hdc,
  229. LPPOINT pptl
  230. );
  231. BOOL
  232. GreSetDCOrg(
  233. HDC hdc,
  234. LONG x,
  235. LONG y,
  236. PRECTL prcl
  237. );
  238. //
  239. // DC creation
  240. //
  241. HDC
  242. GreCreateDisplayDC(
  243. HDEV hdev,
  244. ULONG iType,
  245. BOOL bAltType
  246. );
  247. BOOL
  248. GreDeleteDC(
  249. HDC hdc
  250. );
  251. BOOL
  252. GreCleanDC(
  253. HDC hdc
  254. );
  255. HBRUSH
  256. GreGetFillBrush(
  257. HDC hdc
  258. );
  259. int
  260. GreSetMetaRgn(
  261. HDC hdc
  262. );
  263. int
  264. GreGetDIBitsInternal(
  265. HDC hdc,
  266. HBITMAP hBitmap,
  267. UINT iStartScan,
  268. UINT cNumScan,
  269. LPBYTE pjBits,
  270. LPBITMAPINFO pBitsInfo,
  271. UINT iUsage,
  272. UINT cjMaxBits,
  273. UINT cjMaxInfo
  274. );
  275. HBITMAP APIENTRY
  276. GreCreateDIBitmapReal(
  277. HDC hdc,
  278. DWORD fInit,
  279. LPBYTE pInitBits,
  280. LPBITMAPINFO pInitInfo,
  281. DWORD iUsage,
  282. UINT cjMaxInitInfo,
  283. UINT cjMaxBits,
  284. HANDLE hSection,
  285. DWORD dwOffset,
  286. HANDLE hSecure,
  287. FLONG fl,
  288. ULONG_PTR dwClientColorSpace, //dwClientColorSpace used to pass pointer
  289. PVOID *ppvBits);
  290. HBRUSH
  291. GreCreateSolidBrush(
  292. COLORREF
  293. );
  294. ULONG
  295. GreRealizeDefaultPalette(
  296. HDC,
  297. BOOL
  298. );
  299. BOOL
  300. IsDCCurrentPalette(
  301. HDC
  302. );
  303. HPALETTE
  304. GreSelectPalette(
  305. HDC hdc,
  306. HPALETTE hpalNew,
  307. BOOL bForceBackground
  308. );
  309. DWORD
  310. GreRealizePalette(
  311. HDC
  312. );
  313. BOOL
  314. GreDeleteServerMetaFile(
  315. HANDLE hmo
  316. );
  317. //
  318. // Fonts
  319. //
  320. ULONG
  321. GreSetFontEnumeration(
  322. ULONG ulType
  323. );
  324. ULONG
  325. GreSetFontContrast(
  326. ULONG ulContrast
  327. );
  328. VOID
  329. GreSetLCDOrientation(
  330. DWORD dwOrientation
  331. );
  332. int
  333. GreGetTextCharacterExtra(
  334. HDC
  335. );
  336. int
  337. GreSetTextCharacterExtra(
  338. HDC,
  339. int
  340. );
  341. int
  342. GreGetTextCharsetInfo(
  343. HDC,
  344. LPFONTSIGNATURE,
  345. DWORD);
  346. VOID
  347. GreGetCannonicalName(
  348. const WCHAR*,
  349. WCHAR*,
  350. ULONG*,
  351. DESIGNVECTOR*);
  352. //
  353. // For fullscreen support
  354. //
  355. NTSTATUS
  356. GreDeviceIoControl(
  357. HANDLE hDevice,
  358. DWORD dwIoControlCode,
  359. LPVOID lpInBuffer,
  360. DWORD nInBufferSize,
  361. LPVOID lpOutBuffer,
  362. DWORD nOutBufferSize,
  363. LPDWORD lpBytesReturned
  364. );
  365. //
  366. // Pixel format support
  367. //
  368. int
  369. NtGdiDescribePixelFormat(
  370. HDC hdc,
  371. int ipfd,
  372. UINT cjpfd,
  373. PPIXELFORMATDESCRIPTOR ppfd
  374. );
  375. BOOL
  376. GreSetMagicColors(
  377. HDC,
  378. PALETTEENTRY,
  379. ULONG
  380. );
  381. COLORREF
  382. APIENTRY
  383. GreGetNearestColor(
  384. HDC,
  385. COLORREF);
  386. BOOL
  387. GreUpdateSharedDevCaps(
  388. HDEV hdev
  389. );
  390. INT
  391. GreNamedEscape(
  392. LPWSTR,
  393. int,
  394. int,
  395. LPSTR,
  396. int,
  397. LPSTR
  398. );
  399. typedef struct
  400. {
  401. UINT uiWidth;
  402. UINT uiHeight;
  403. BYTE ajBits[1];
  404. } STRINGBITMAP, *LPSTRINGBITMAP;
  405. UINT
  406. GreGetStringBitmapW(
  407. HDC hdc,
  408. LPWSTR pwsz,
  409. UINT cwc,
  410. LPSTRINGBITMAP lpSB,
  411. UINT cj
  412. );
  413. UINT
  414. GetStringBitmapW(
  415. HDC hdc,
  416. LPWSTR pwsz,
  417. ULONG cwc,
  418. UINT cj,
  419. LPSTRINGBITMAP lpSB
  420. );
  421. UINT
  422. GetStringBitmapA(
  423. HDC hdc,
  424. LPCSTR psz,
  425. ULONG cbStr,
  426. UINT cj,
  427. LPSTRINGBITMAP lpSB
  428. );
  429. INT
  430. GetSystemEUDCRange (
  431. BYTE *pbEUDCLeadByteTable ,
  432. INT cjSize
  433. );
  434. //
  435. // Hydra support
  436. //
  437. BOOL
  438. GreMultiUserInitSession(
  439. HANDLE hRemoteConnectionChannel,
  440. PBYTE pPerformanceStatistics,
  441. PFILE_OBJECT pVideoFile,
  442. PFILE_OBJECT pRemoteConnectionFileObject,
  443. ULONG DisplayDriverNameLength,
  444. PWCHAR DisplayDriverName
  445. );
  446. BOOL
  447. GreConsoleShadowStart(
  448. HANDLE hRemoteConnectionChannel,
  449. PBYTE pPerformanceStatistics,
  450. PFILE_OBJECT pVideoFile,
  451. PFILE_OBJECT pRemoteConnectionFileObject
  452. );
  453. BOOL
  454. GreConsoleShadowStop(
  455. VOID
  456. );
  457. BOOL
  458. MultiUserNtGreCleanup();
  459. BOOL
  460. bDrvReconnect(
  461. HDEV hdev,
  462. HANDLE RemoteConnectionChannel,
  463. PFILE_OBJECT pRemoteConnectionFileObject,
  464. BOOL bSetPalette
  465. );
  466. BOOL
  467. bDrvDisconnect(
  468. HDEV hdev,
  469. HANDLE RemoteConnectionChannel,
  470. PFILE_OBJECT pRemoteConnectionFileObject
  471. );
  472. BOOL
  473. bDrvShadowConnect(
  474. HDEV hdev,
  475. PVOID pRemoteConnectionData,
  476. ULONG RemoteConnectionDataLength
  477. );
  478. BOOL
  479. bDrvShadowDisconnect(
  480. HDEV hdev,
  481. PVOID pRemoteConnectionData,
  482. ULONG RemoteConnectionDataLength
  483. );
  484. VOID
  485. vDrvInvalidateRect(
  486. HDEV hdev,
  487. PRECT prcl
  488. );
  489. BOOL
  490. bDrvDisplayIOCtl(
  491. HDEV hdev,
  492. PVOID pbuffer,
  493. ULONG cbbuffer
  494. );
  495. BOOL
  496. HDXDrvEscape(
  497. HDEV hdev,
  498. ULONG iEsc,
  499. PVOID pInbuffer,
  500. ULONG cbInbuffer
  501. );
  502. //
  503. // DirectDraw support
  504. //
  505. VOID
  506. GreSuspendDirectDraw(
  507. HDEV hdev,
  508. BOOL bChildren
  509. );
  510. VOID
  511. GreResumeDirectDraw(
  512. HDEV hdev,
  513. BOOL bChildren
  514. );
  515. BOOL
  516. GreGetDirectDrawBounds(
  517. HDEV hdev,
  518. RECT* prcBounds
  519. );
  520. //
  521. // Driver support
  522. //
  523. // MDEV.ulFlags
  524. #define MDEV_MISMATCH_COLORDEPTH 0x01
  525. typedef struct _MDEV {
  526. HDEV hdevParent;
  527. HDEV Reserved;
  528. ULONG ulFlags;
  529. ULONG chdev;
  530. PVOID pDesktopId;
  531. struct {
  532. HDEV hdev;
  533. HDEV Reserved;
  534. RECT rect;
  535. } Dev[1];
  536. } MDEV, *PMDEV;
  537. BOOL
  538. DrvDisableMDEV(
  539. PMDEV pmdev,
  540. BOOL bHardware
  541. );
  542. BOOL
  543. DrvEnableMDEV(
  544. PMDEV pmdev,
  545. BOOL bHardware
  546. );
  547. NTSTATUS
  548. DrvGetMonitorPowerState(
  549. PMDEV pmdev,
  550. DEVICE_POWER_STATE PowerState
  551. );
  552. NTSTATUS
  553. DrvSetMonitorPowerState(
  554. PMDEV pmdev,
  555. DEVICE_POWER_STATE PowerState
  556. );
  557. BOOL
  558. DrvQueryMDEVPowerState(
  559. PMDEV mdev
  560. );
  561. VOID
  562. DrvSetMDEVPowerState(
  563. PMDEV mdev,
  564. BOOL On
  565. );
  566. BOOL
  567. DrvDisplaySwitchHandler(
  568. PVOID PhysDisp,
  569. PUNICODE_STRING pstrDeviceName,
  570. LPDEVMODEW pNewMode,
  571. PULONG pPrune
  572. );
  573. PVOID
  574. DrvWakeupHandler(
  575. HANDLE *ppdo
  576. );
  577. BOOL
  578. DrvUpdateGraphicsDeviceList(
  579. BOOL bDefaultDisplayDisabled,
  580. BOOL bReenumerationNeeded,
  581. BOOL bLocal
  582. );
  583. BOOL
  584. DrvGetHdevName(
  585. HDEV hdev,
  586. PWCHAR DeviceName
  587. );
  588. NTSTATUS
  589. DrvEnumDisplayDevices(
  590. PUNICODE_STRING pstrDeviceName,
  591. HDEV hdevPrimary,
  592. DWORD iDevNum,
  593. LPDISPLAY_DEVICEW lpDisplayDevice,
  594. DWORD dwFlags,
  595. MODE ExecutionMode
  596. );
  597. NTSTATUS
  598. DrvEnumDisplaySettings(
  599. PUNICODE_STRING pstrDeviceName,
  600. HDEV hdevPrimary,
  601. DWORD iModeNum,
  602. LPDEVMODEW lpDevMode,
  603. DWORD dwFlags
  604. );
  605. #define GRE_DISP_CHANGE_SUCCESSFUL 0
  606. #define GRE_DISP_CHANGE_RESTART 1
  607. #define GRE_DISP_CHANGE_NO_CHANGE 2
  608. #define GRE_DISP_CHANGE_FAILED -1
  609. #define GRE_DISP_CHANGE_BADMODE -2
  610. #define GRE_DISP_CHANGE_NOTUPDATED -3
  611. #define GRE_DISP_CHANGE_BADFLAGS -4
  612. #define GRE_DISP_CHANGE_BADPARAM -5
  613. #define GRE_DISP_CHANGE_BADDUALVIEW -6
  614. #define GRE_PRUNE TRUE
  615. #define GRE_RAWMODE FALSE
  616. #define GRE_DEFAULT 0xFFFFFFFF
  617. LONG
  618. DrvChangeDisplaySettings(
  619. PUNICODE_STRING pstrDeviceName,
  620. HDEV hdevPrimary,
  621. LPDEVMODEW lpDevMode,
  622. PVOID pDesktopId,
  623. MODE PreviousMode,
  624. BOOL bUpdateRegistry,
  625. BOOL bSetMode,
  626. PMDEV pOrgMdev,
  627. PMDEV *pNewMdev,
  628. DWORD PruneFlag,
  629. BOOL bTryClosest
  630. );
  631. #define GRE_DISP_CREATE_NODISABLE 0x00000001
  632. #define GRE_DISP_NOT_APARTOF_DESKTOP 0x00000002
  633. PMDEV
  634. DrvCreateMDEV(
  635. PUNICODE_STRING pstrDevice,
  636. LPDEVMODEW lpdevmodeInformation,
  637. PVOID pGroupId,
  638. ULONG ulFlags,
  639. PMDEV pMdevOrg,
  640. MODE PreviousMode,
  641. DWORD PruneFlag,
  642. BOOL bClosest
  643. );
  644. VOID
  645. DrvDestroyMDEV(
  646. PMDEV pmdev
  647. );
  648. VOID
  649. DrvSetBaseVideo(
  650. BOOL bSet
  651. );
  652. VOID
  653. DrvInitConsole(
  654. BOOL bEnumerationNeeded
  655. );
  656. LONG
  657. DrvSetVideoParameters(
  658. PUNICODE_STRING pstrDeviceName,
  659. HDEV hdevPrimary,
  660. MODE PreviousMode,
  661. PVOID VideoParameters
  662. );
  663. VOID
  664. GreStartTimers(
  665. VOID
  666. );
  667. #define GCR_WNDOBJEXISTS 0x00000001
  668. #define GCR_DELAYFINALUPDATE 0x00000002
  669. #define GreAlphaBlend NtGdiAlphaBlend
  670. BOOL APIENTRY NtGdiAlphaBlend(HDC,LONG,LONG,LONG,LONG,HDC,LONG,LONG,LONG,LONG,BLENDFUNCTION,HANDLE);
  671. VOID APIENTRY GreClientRgnUpdated(FLONG);
  672. VOID APIENTRY GreClientRgnDone(FLONG);
  673. VOID APIENTRY GreFlush(VOID);
  674. BOOL APIENTRY GreDPtoLP(HDC, LPPOINT, int);
  675. BOOL APIENTRY GreLPtoDP(HDC, LPPOINT, int);
  676. BOOL APIENTRY GreGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
  677. COLORREF APIENTRY GreSetBkColor(HDC, COLORREF);
  678. int APIENTRY GreSetBkMode(HDC, int);
  679. HFONT APIENTRY GreSelectFont(HDC hdc, HFONT hlfntNew);
  680. int APIENTRY GreCombineRgn(HRGN, HRGN, HRGN, int);
  681. COLORREF APIENTRY GreSetTextColor(HDC, COLORREF);
  682. HBITMAP APIENTRY GreSelectBitmap(HDC,HBITMAP);
  683. int APIENTRY GreOffsetRgn(HRGN, int, int);
  684. BOOL APIENTRY GreGetTextExtentW(HDC,LPWSTR,int,LPSIZE,UINT);
  685. BOOL APIENTRY GreExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);
  686. HBRUSH APIENTRY GreSelectBrush(HDC,HBRUSH);
  687. BOOL APIENTRY GreRestoreDC(HDC, int);
  688. int APIENTRY GreSaveDC(HDC);
  689. int APIENTRY GreExtGetObjectW(HANDLE, int, LPVOID);
  690. BOOL APIENTRY GreDeleteObject(HANDLE);
  691. HBITMAP APIENTRY GreCreateBitmap(int, int, UINT, UINT, LPBYTE);
  692. HBITMAP APIENTRY GreCreateCompatibleBitmap(HDC, int, int);
  693. HDC APIENTRY GreCreateCompatibleDC(HDC);
  694. int APIENTRY GreGetDeviceCaps(HDC, int);
  695. UINT APIENTRY GreGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
  696. UINT APIENTRY GreGetSystemPaletteUse(HDC);
  697. HPALETTE APIENTRY GreCreatePalette(LPLOGPALETTE);
  698. HPALETTE APIENTRY GreCreateHalftonePalette(HDC hdc);
  699. BOOL APIENTRY GreGetBounds(HDC hdc, LPRECT lprcBounds, DWORD fl);
  700. int APIENTRY GreSetDIBits(HDC, HBITMAP, UINT, UINT, LPBYTE, LPBITMAPINFO, UINT);
  701. ULONG APIENTRY GreGetBitmapSize(CONST BITMAPINFO *pbmi, ULONG iUsage);
  702. ULONG APIENTRY GreGetBitmapBitsSize(CONST BITMAPINFO *pbmi);
  703. VOID APIENTRY GreDeleteWnd(PVOID pwo);
  704. HBRUSH APIENTRY GreCreatePatternBrush(HBITMAP);
  705. BOOL APIENTRY GreGetWindowOrg(HDC, LPPOINT);
  706. BOOL APIENTRY GreSetWindowOrg(HDC hdc, int x, int y, LPPOINT pPoint);
  707. DWORD APIENTRY GreSetLayout(HDC hdc, LONG wox, DWORD dwLayout);
  708. DWORD APIENTRY GreGetLayout(HDC hdc);
  709. BOOL APIENTRY GreMirrorWindowOrg(HDC hdc);
  710. LONG APIENTRY GreGetDeviceWidth(HDC hdc);
  711. DWORD APIENTRY GreGetRegionData(HRGN, DWORD, LPRGNDATA);
  712. HRGN APIENTRY GreExtCreateRegion(XFORML *, DWORD, LPRGNDATA);
  713. BOOL APIENTRY GrePtInRegion(HRGN, int, int);
  714. BOOL APIENTRY GreRectInRegion(HRGN, LPRECT);
  715. int APIENTRY GreGetClipBox(HDC, LPRECT, BOOL);
  716. int APIENTRY GreGetRgnBox(HRGN, LPRECT);
  717. BOOL APIENTRY GreGetTextMetricsW(HDC, TMW_INTERNAL *);
  718. int APIENTRY GreGetRandomRgn(HDC, HRGN, int);
  719. BOOL APIENTRY GreStretchBlt(HDC,int,int,int,int,HDC,int,int,int,int,DWORD,DWORD);
  720. int APIENTRY GreExtSelectClipRgn(HDC, HRGN, int);
  721. int APIENTRY GreSetStretchBltMode(HDC, int);
  722. BOOL APIENTRY GreSetViewportOrg(HDC, int, int, LPPOINT);
  723. BOOL APIENTRY GreGetViewportOrg(HDC, LPPOINT);
  724. BOOL APIENTRY GreGetBrushOrg(HDC, LPPOINT);
  725. int APIENTRY GreCopyVisRgn(HDC, HRGN);
  726. int APIENTRY GreSubtractRgnRectList(HRGN, LPRECT, LPRECT, int);
  727. HRGN APIENTRY GreCreateRectRgnIndirect(LPRECT);
  728. BOOL APIENTRY GreSetBrushOrg(HDC, int, int, LPPOINT);
  729. VOID APIENTRY GreSetClientRgn(PVOID, HRGN, LPRECT);
  730. BOOL APIENTRY GreIntersectVisRect(HDC,int,int,int,int);
  731. int APIENTRY GreIntersectClipRect(HDC, int, int, int, int);
  732. HFONT APIENTRY GreGetHFONT(HDC);
  733. HANDLE APIENTRY GreGetStockObject(int);
  734. COLORREF APIENTRY GreGetBkColor(HDC);
  735. COLORREF APIENTRY GreGetTextColor(HDC);
  736. BOOL APIENTRY GreSetRectRgn(HRGN, int, int, int, int);
  737. BOOL APIENTRY GreSetSolidBrush(HBRUSH hbr, COLORREF clr);
  738. HFONT APIENTRY GreCreateFontIndirectW(LPLOGFONTW);
  739. BOOL APIENTRY GreValidateServerHandle(HANDLE hobj, ULONG ulType);
  740. COLORREF APIENTRY GreGetBrushColor(HBRUSH);
  741. BOOL APIENTRY GreGetColorAdjustment(HDC, PCOLORADJUSTMENT);
  742. UINT APIENTRY GreGetDIBColorTable(HDC hdc, UINT iStart, UINT cEntries, RGBQUAD *pRGB);
  743. int APIENTRY GreExcludeClipRect(HDC, int, int, int, int);
  744. BOOL APIENTRY GreRemoveAllButPermanentFonts();
  745. BOOL APIENTRY GreSetColorAdjustment(HDC, PCOLORADJUSTMENT);
  746. VOID APIENTRY GreMarkDCUnreadable(HDC);
  747. BOOL APIENTRY GreGetViewportExt(HDC, LPSIZE);
  748. BOOL APIENTRY GreGetWindowExt(HDC, LPSIZE);
  749. DWORD APIENTRY GreGetCharSet(HDC hdc);
  750. int APIENTRY GreGetMapMode(HDC);
  751. HRGN APIENTRY GreCreateRectRgn(int, int, int, int);
  752. BOOL APIENTRY GrePtInSprite(HDEV, HWND, int, int);
  753. VOID APIENTRY GreUpdateSpriteVisRgn(HDEV);
  754. VOID APIENTRY GreZorderSprite(HDEV, HWND, HWND);
  755. HANDLE APIENTRY GreCreateSprite(HDEV, HWND, RECT*);
  756. BOOL APIENTRY GreDeleteSprite(HDEV, HWND, HANDLE);
  757. BOOL APIENTRY GreGetSpriteAttributes(HDEV, HWND, HANDLE, COLORREF*, BLENDFUNCTION*, DWORD*);
  758. BOOL APIENTRY GreUpdateSprite(HDEV, HWND, HANDLE, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD, RECT*);
  759. BOOL APIENTRY GreIsPaletteDisplay(HDEV);
  760. VOID APIENTRY GreFreePool(PVOID);
  761. VOID GreIncQuotaCount(PW32PROCESS);
  762. VOID GreDecQuotaCount(PW32PROCESS);
  763. DWORD APIENTRY GreGetBoundsRect(HDC, LPRECT, DWORD);
  764. DWORD APIENTRY GreSetBoundsRect(HDC, LPRECT, DWORD);
  765. BOOL APIENTRY GreSelectRedirectionBitmap(HDC hdc, HBITMAP hbitmap);
  766. int APIENTRY GreSetGraphicsMode(HDC hdc, int iMode);
  767. BOOL APIENTRY GreEnableDirectDrawRedirection(HDEV, BOOL);
  768. #define GreFillRgn NtGdiFillRgn
  769. BOOL NtGdiFillRgn(HDC hdc, HRGN hrgn, HBRUSH hbr);
  770. #ifdef MOUSE_IP
  771. W32KAPI HRGN APIENTRY NtGdiCreateEllipticRgn(IN int xLeft,IN int yTop,IN int xRight,IN int yBottom);
  772. W32KAPI BOOL APIENTRY NtGdiFillRgn(IN HDC hdc,IN HRGN hrgn,IN HBRUSH hbrush);
  773. HPEN APIENTRY GreCreatePen(int, int, COLORREF,HBRUSH);
  774. HPEN APIENTRY GreSelectPen(HDC,HPEN);
  775. W32KAPI BOOL APIENTRY NtGdiEllipse(IN HDC hdc,IN int xLeft,IN int yTop,IN int xRight,IN int yBottom);
  776. #endif
  777. HANDLE NtGdiGetDCObject (HDC hdc, int itype);
  778. //
  779. // Private draw stream driver related declarations and defines.
  780. // Note, no driver currently supports draw stream and is only used
  781. // as an internal mechanism to support the private DS_NINEGRID
  782. // command used to render nine grids.
  783. //
  784. typedef struct _DSSTATE
  785. {
  786. ULONG ulSize;
  787. COLORREF crColorKey;
  788. BLENDFUNCTION blendFunction;
  789. POINTL ptlSrcOrigin;
  790. } DSSTATE;
  791. BOOL APIENTRY EngDrawStream(
  792. SURFOBJ *psoDst,
  793. SURFOBJ *psoSrc,
  794. CLIPOBJ *pco,
  795. XLATEOBJ *pxlo,
  796. PRECTL prclDstClip,
  797. PPOINTL pptlDstOffset,
  798. ULONG ulIn,
  799. PVOID pvIn,
  800. DSSTATE *pdss
  801. );
  802. BOOL APIENTRY DrvDrawStream(
  803. SURFOBJ *psoDst,
  804. SURFOBJ *psoSrc,
  805. CLIPOBJ *pco,
  806. XLATEOBJ *pxlo,
  807. PRECTL prclDstClip,
  808. PPOINTL pptlDstOffset,
  809. ULONG ulIn,
  810. PVOID pvIn,
  811. DSSTATE *pdss
  812. );
  813. typedef BOOL (APIENTRY *PFN_DrvDrawStream)(SURFOBJ *,SURFOBJ *,CLIPOBJ *, XLATEOBJ *,PRECTL,PPOINTL,ULONG,PVOID,DSSTATE*);
  814. //
  815. // Private draw nine grid driver related declarations and defines.
  816. //
  817. // The flags specified in flFlags correspond to the DSDNG_xxx flags
  818. // found as part of the draw stream command interface.
  819. typedef struct NINEGRID
  820. {
  821. ULONG flFlags;
  822. LONG ulLeftWidth;
  823. LONG ulRightWidth;
  824. LONG ulTopHeight;
  825. LONG ulBottomHeight;
  826. COLORREF crTransparent;
  827. } NINEGRID, *PNINEGRID;
  828. #define INDEX_DrvDrawStream INDEX_DrvReserved9
  829. // By specifying GCAPS2_REMOTEDRIVER, the remote driver indicates that it
  830. // supports DrvNineGrid and as such will be called to render nine grids.
  831. // The remote driver can safely punt the call to EngNineGrid.
  832. #define GCAPS2_REMOTEDRIVER GCAPS2_RESERVED1
  833. // Drivers which support DrvNineGrid will need to specify the following
  834. // driver entry index.
  835. #define INDEX_DrvNineGrid INDEX_DrvReserved10 // remote drivers only
  836. BOOL APIENTRY DrvNineGrid(
  837. SURFOBJ *psoDst,
  838. SURFOBJ *psoSrc,
  839. CLIPOBJ *pco,
  840. XLATEOBJ *pxlo,
  841. PRECTL prclDst,
  842. PRECTL prclSrc,
  843. PNINEGRID png,
  844. BLENDOBJ* pBlendObj,
  845. PVOID pvReserved
  846. );
  847. BOOL APIENTRY EngNineGrid(
  848. SURFOBJ *psoDst,
  849. SURFOBJ *psoSrc,
  850. CLIPOBJ *pco,
  851. XLATEOBJ *pxlo,
  852. PRECTL prclDst,
  853. PRECTL prclSrc,
  854. PNINEGRID png,
  855. BLENDOBJ* pBlendObj,
  856. PVOID pvReserved
  857. );
  858. typedef BOOL (APIENTRY *PFN_DrvNineGrid)(SURFOBJ *,SURFOBJ *,CLIPOBJ *, XLATEOBJ *,PRECTL,PRECTL,PNINEGRID,BLENDOBJ*,PVOID);