|
|
(12 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
− | '''See [[Arwinss]] page for the alternative win32 subsystem implementation effort.''' | + | {{stub}} |
| + | '''Kernel-mode subsystem server (Win32K)''' |
| | | |
− | '''See also [[Win32k_design_guideline]]'''
| + | The Graphics Device Interface Provides functionality for outputting graphical content to monitors, printers and other output devices. It resides in gdi.exe on 16-bit Windows, and [[gdi32.dll]] on 32-bit Windows in user-mode. Kernel-mode GDI support is provided by <code>win32k.sys</code> which communicates directly with the graphics driver. |
| | | |
− | http://en.wikipedia.org/wiki/Windows_API#Overview
| + | {{Code history|subsystems/win32/win32k}} |
| | | |
− | The Graphics Device Interface Provides functionality for outputting graphical content to monitors, printers and other output devices. It resides in gdi.exe on 16-bit Windows, and gdi32.dll on 32-bit Windows in user-mode. Kernel-mode GDI support is provided by '''win32k.sys''' which communicates directly with the graphics driver.
| + | == See also == |
| + | * [[Arwinss]] page for the alternative win32 subsystem implementation effort. |
| + | * [[Win32k design guideline]] |
| + | * [[Csrss.exe|User-mode subsystem server]] |
| + | * [[wikipedia:Windows API#Overview]] |
| | | |
− | http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/?view=log
| + | [[Category:Development]] |
− | | + | [[Category:Drivers]] |
− | [[ChangeLog-0.0.21]] | + | [[Category:System Services]] |
− | * Win32k: Initial implementation of regions and clipping
| |
− | * Win32k: Object cleanup on process deletion [[Eugene Ingerman]]
| |
− | * Win32k: Initial window painting code, bitmap loading [[David Welch]]
| |
− | * Win32k: Callbacks and messaging improvements [[David Welch]]
| |
− | * Win32k: Mouse messaging [[David Welch]]
| |
− | * Win32k: DIB Fixes [[Jason Filby]]
| |
− | | |
− | [[ChangeLog-0.1.0]]
| |
− | * Win32k: Rewrote gdi (Engxxx) objects,
| |
− | * Made GDI object locking exclusive,
| |
− | * Added functions for locking multiple objects,
| |
− | * Color translation now works properly,
| |
− | * Implemented several DC functions ([[Eugene Ingerman]])
| |
− | * Win32k: Initial scrollbar code ([[Jason Filby]])
| |
− | | |
− | [[ChangeLog-0.1.1]]
| |
− | * Win32k: Support for VMware video drivers ([[Gé van Geldorp]])
| |
− | * Win32k: VGA Driver loaded from registry key ([[Gé van Geldorp]])
| |
− | * Win32k: Support for MS VGA driver under VMware ([[Gé van Geldorp]])
| |
− | * Win32k: Add support for 8-bit and 32-bit displays ([[Gé van Geldorp]])
| |
− | * Win32k: Switch back to the command prompt when pressing Close button ([[Gé van Geldorp]])
| |
− | * Win32k: Implemented several window positioning functions ([[Richard Campbell]])
| |
− | * Win32k: InvalidateRgn, InvalidateRect, PolyLine ([[Tim Jobling]])
| |
− | * Win32k: Added support for allocating a DCE for each window ([[Richard Campbell]])
| |
− | | |
− | [[ChangeLog-0.1.4]]
| |
− | | |
− | * Scrollbar thumbs ([[Thomas Weidenmueller]])
| |
− | * Implemented several scrollbar functions ([[Thomas Weidenmueller]])
| |
− | * Improved mouse (buttons) handling ([[Thomas Weidenmueller]])
| |
− | * RoundRect ([[Royce Mitchell III]])
| |
− | * Implemented partial ReleaseDC() ([[Gé van Geldorp]])
| |
− | | |
− | [[ChangeLog-0.1.5]]
| |
− | | |
− | * Fix 1bbp blits ([[Filip Navara]])
| |
− | * Implement GUI consoles ([[Gé van Geldorp]])
| |
− | * Resolution and screen depth change support for VMWare ([[Gé van Geldorp]])
| |
− | * DirectDraw groundwork ([[Peter Bajusz]])
| |
− | | |
− | [[ChangeLog-0.2.0]]
| |
− | * Window activation/focus ([[Filip Navara]], [[Gé van Geldorp]])
| |
− | * StretchDIBits implementation ([[Filip Navara]])
| |
− | * Initial implementation of message hooks ([[Gé van Geldorp]])
| |
− | * Support for the FR_PRIVATE and FR_NOT_ENUM flags for AddFontResourceEx ([[Thomas Weidenmueller]])
| |
− | * Implement real locking for GDIOBJ objects ([[Gé van Geldorp]])
| |
− | * Stretchblitting 32->32, 8->8 bpp implemented ([[Aleksey Bragin]])
| |
− | * GetMessageExtraInfo and SetMessageExtraInfo implementations ([[Thomas Weidenmueller]])
| |
− | * Initial implementation of maximize/restore and minimize buttons for windows ([[Thomas Weidenmueller]])
| |
− | * Implemented WM_SETCURSOR messages ([[Thomas Weidenmueller]])
| |
− | * Serialize access to display driver ([[Gé van Geldorp]])
| |
− | * Implemented SetCursor and rewrote some cursor/icon routines ([[Thomas Weidenmueller]])
| |
− | * Support for RASTERCAPS in NtGdiGetDeviceCaps ([[Filip Navara]])
| |
− | * RLE4/8 Bitmap Compression support (Jonathan Wilson)
| |
− | * LR_SHARED flag support for LoadIcon and LoadCursor ([[Thomas Weidenmueller]])
| |
− | * Rewritten painting implementation ([[Filip Navara]])
| |
− | * Font smoothing implementation ([[Thomas Weidenmueller]])
| |
− | * GetGUIThreadInfo implementation ([[Thomas Weidenmueller]])
| |
− | * EnumProps, EnumPropsEx implementations ([[Thomas Weidenmueller]])
| |
− | * Marshall messages across process boundaries (not complete yet) and generalize message sending from kernel ([[Gé van Geldorp]])
| |
− | * Initial NtGdiStretchBlt implementation ([[Aleksey Bragin]])
| |
− | * Message queue fixes ([[Thomas Weidenmueller]], [[Mike Nordell]])
| |
− | * Palette fixes ([[Filip Navara]])
| |
− | * Move desktop window proc from WIN32K to CSRSS ([[Gé van Geldorp]])
| |
− | | |
− | [[ChangeLog-0.2.1]]
| |
− | * Fixed window activation bug (GA_ROOTOWNER -> GA_ROOT) ([[Filip Navara]])
| |
− | * Preparing for the win32k emulated mouse cursor support ([[Filip Navara]])
| |
− | * Implemented MenuItemFromPoint() ([[Thomas Weidenmueller]])
| |
− | * Fixed hittest-code so it returns HTMENU properly ([[Thomas Weidenmueller]])
| |
− | * Implemented multiline menu bars ([[Thomas Weidenmueller]])
| |
− | * Release mutex on error exit ([[Gé van Geldorp]])
| |
− | * GetAncestor() doesn't set a last-error if the handle passed is the desktop window, it just returns NULL ([[Thomas Weidenmueller]])
| |
− | * Don't activate disabled windows ([[Thomas Weidenmueller]])
| |
− | * Release window object when destroying window children and skip only children that have a different parent window ([[Thomas Weidenmueller]])
| |
− | * Activate modal dialog when clicking on a disabled window ([[Thomas Weidenmueller]])
| |
− | * Fix cross-thread WM_SETTEXT messages ([[Gé van Geldorp]])
| |
− | * Dynamically load fonts on startup
| |
− | * Seperated the Caption font and the icon title font ([[Richard Campbell]])
| |
− | * Fixed missing release of window objects ([[Thomas Weidenmueller]])
| |
− | * Resolve two GDI handle leaks ([[Filip Navara]])
| |
− | * Faster GDI handle allocation strategy ([[Filip Navara]])
| |
− | * Update DC when moving a window. Fixes bug #5 ([[Gé van Geldorp]], [[Filip Navara]])
| |
− | * Handle NULL window as special case when computing visible region for GetDC. Fixes bug #59 ([[Gé van Geldorp]])
| |
− | * Fix NtUserScroll[WindowEx/DC] ([[Filip Navara]])
| |
− | * Implemented ChildWindowFromPoint(Ex) ([[Richard Campbell]])
| |
− | * Rewritten NtGdiEllipse with improved and optimized algorithm ([[Filip Navara]])
| |
− | * Use window thread instead of current thread to obtain desktop ([[Gé van Geldorp]])
| |
− | * Fix race condition when one thread changes the update region of a window and another thread retrieves a paint message for that window ([[Gé van Geldorp]])
| |
− | * Don't callback from kernel to usermode if the thread is exiting; fixes bug #83 ([[Gé van Geldorp]])
| |
− | * Clip region to be bitblt'ed against the valid source region. Fixes bug #152 ([[Gé van Geldorp]])
| |
− | * Fixed software mouse pointer handling to work correctly with MouseSafety* routines ([[Filip Navara]])
| |
− | * Fixed algorithm for 4BPP bitblts with ROP != SRCCOPY ([[Filip Navara]])
| |
− | * Reclaculate window client size in NtUserSetMenu even if the window isn't visible ([[Filip Navara]])
| |
− | * Properly move child windows in NtUserSetWindowPos ([[Filip Navara]])
| |
− | * Very basic implementation of ExtEscape ([[Filip Navara]])
| |
− | * Fix race condition resulting in WM_xBUTTONUP sometimes being delivered before WM_xBUTTONDOWN ([[Gé van Geldorp]])
| |
− | * Fix double click ([[Gé van Geldorp]])
| |
− | * Implemented horizontal and vertical gradients in GradientFill() ([[Thomas Weidenmueller]])
| |
− | * Use GradientFill() for gradient captions ([[Thomas Weidenmueller]])
| |
− | * Don't copy from/to outside the visible screen region ([[Gé van Geldorp]])
| |
− | * Return more correct error codes from NtUserRegisterClassExWOW ([[Filip Navara]])
| |
− | * Delete atom in NtUserUnregisterClass ([[Filip Navara]])
| |
− | * Corrected DC locking in NtGdiSetDIBColorTable ([[Filip Navara]])
| |
− | * Check region handles in NtGdiPaintRgn ([[Filip Navara]])
| |
− | * Added EngGetCurrentProcessId() and EngGetCurrentThreadId() ([[Thomas Weidenmueller]])
| |
− | * Fixed clipping code in NtGdiGetPixel ([[James Pritchard]])
| |
− | * Fix distortion by StretchBlt ([[Filip Navara]], [[Waldo Alvarez Cañizares]])
| |
− | * Implement menu handling ([[Gé van Geldorp]])
| |
− | * Top level windows have menus, child windows have IDs ([[Gé van Geldorp]])
| |
− | * SPI_GETNONCLIENTMETRICS and SPI_GETICONTITLELOGFONT now load their settings from the registry ([[Richard Campbell]])
| |
− | * Fixed WindowFromPoint() to search backwards ([[Thomas Weidenmueller]])
| |
− | * Fixed 8 8 bpp, 1616 bpp and 32 32 bpp stretchblitting ([[Waldo Alvarez Cañizares]])
| |
− | * Added pool tags for better debugging ([[Thomas Weidenmueller]])
| |
− | * Fixed a few race conditions in painting code ([[Filip Navara]])
| |
− | * Fix double release of fast mutex ([[Gé van Geldorp]])
| |
− | * Fixed releasing of window object in IntValidateParent and NtUserRedrawWindow ([[Thomas Weidenmueller]])
| |
− | * Fixed potencial deadlock in IntPaintWindows ([[Thomas Weidenmueller]])
| |
− | * Modifed DceUpdateVisRgn to correctly handle situations when DceGetVisRgn returns NULL ([[Filip Navara]])
| |
− | * Fixed the alternative version of VIS_ComputeVisibleRegion and made it the one and only, because it's smaller and faster than the original one ([[Filip Navara]])
| |
− | * Prevent double unlinking of window ([[Filip Navara]])
| |
− | * Implement keyboard navigation for menus ([[Gé van Geldorp]])
| |
− | * Fix mono -> color bitblts ([[Gé van Geldorp]])
| |
− | * Fixed WindowFromPoint() to send WM_NCHITTEST messages to windows that belong to the current process ([[Thomas Weidenmueller]])
| |
− | * Fix bug #129 ([[Filip Navara]])
| |
− | * Fixed bug 167 ([[Art Yerkes]])
| |
− | | |
− | [[ChangeLog-0.2.2]]
| |
− | *Fix race condition resulting in WM_xBUTTONUP sometimes being broken ([[Ge van Geldorp]])
| |
− | *Don't copy from/to outside the visible screen region ([[Ge van Geldorp]])
| |
− | *Implement menu handling ([[Ge van Geldorp]])
| |
− | *Top level windows have menus, child windows have IDs ([[Ge van Geldorp]])
| |
− | *Fix double release of fast mutex ([[Ge van Geldorp]])
| |
− | *Implement keyboard navigation for menus ([[Ge van Geldorp]])
| |
− | *Fix race condition ([[Ge van Geldorp]])
| |
− | *Recursively search sub menus when a command id is specified ([[Ge van Geldorp]])
| |
− | *Fixed mono -> color bitblts ([[Ge van Geldorp]])
| |
− | *Correct menu bars for windows not originating at top-left of screen ([[Ge van Geldorp]])
| |
− | *Mark update regions as global objects ([[Ge van Geldorp]])
| |
− | *Delay unlinking of windows until after all messages have been sent ([[Ge van Geldorp]])
| |
− | *Translate pixel value from internal pixel format to RGB; fixes bug #251 ([[Ge van Geldorp]])
| |
− | *Return a valid (empty) visible region when the window is not visible ([[Ge van Geldorp]])
| |
− | *Handle 1bpp DIBs in NtGdiCreateDIBitmap ([[Ge van Geldorp]])
| |
− | *Implement EnumFontFamilies(Ex)A/W() and TranslateCharsetInfo() ([[Ge van Geldorp]])
| |
− | *Implement GetCharWidthA/W() ([[Ge van Geldorp]])
| |
− | *Implement GetUpdateRect() and harden NtUserGetUpdateRect() ([[Ge van Geldorp]])
| |
− | *Implement GetObjectA/W() for fonts ([[Ge van Geldorp]])
| |
− | *Prevent deletion of system-owned objects ([[Ge van Geldorp]])
| |
− | *Fix filling of MENUITEMINFO in InsertMenu() ([[Ge van Geldorp]])
| |
− | *Implement scrollbar controls ([[Ge van Geldorp]])
| |
− | *Simple font substitution and matching ([[Ge van Geldorp]])
| |
− | *Implement TOPMOST windows ([[Ge van Geldorp]])
| |
− | *Remove window timers when window is destroyed ([[Ge van Geldorp]])
| |
− | *Implement 32bpp -> 32bpp copy with color translation ([[Ge van Geldorp]])
| |
− | *Use lookaside lists for better performance ([[Ge van Geldorp]])
| |
− | *Special case for faster one rectangle regions ([[Ge van Geldorp]])
| |
− | *Honour font spacing requested by caller ([[Ge van Geldorp]])
| |
− | *Fix scanline increment for 32bpp stretch blts ([[Ge van Geldorp]])
| |
− | *andle regions in SelectObject() ([[Ge van Geldorp]])
| |
− | *Pass args to MsqSendMessage in correct order ([[Ge van Geldorp]])
| |
− | *Fix for mouse detection problem ([[Filip Navara]])
| |
− | *Fixed algorithm for 4BPP bitblts with ROP != SRCCOPY ([[Filip Navara]])
| |
− | *Reclaculate window client size in NtUserSetMenu even if the window isn't visible ([[Filip Navara]])
| |
− | *Fixed clipping bug in TransparentBlt() ([[Filip Navara]])
| |
− | *Return more correct error codes from NtUserRegisterClassExWOW ([[Filip Navara]])
| |
− | *Check region handles in NtGdiPaintRgn ([[Filip Navara]])
| |
− | *Fixed releasing of window object in IntValidateParent and NtUserRedrawWindow ([[Filip Navara]])
| |
− | *Fixed deadlock in IntFindWindowToRepaint ([[Filip Navara]])
| |
− | *Modifed DceUpdateVisRgn for performance enhancment ([[Filip Navara]])
| |
− | *Fixed couple of mutex locking issues ([[Filip Navara]])
| |
− | *Fixed GDI handle leak ([[Filip Navara]])
| |
− | *Fix for race condition that should never happen ([[Filip Navara]])
| |
− | *Implemented EngModifySurface, DRIVER_FindMPDriver ([[Filip Navara]])
| |
− | *Fixed NtGdiCreateCompatibleBitmap fix to use correct Bits ([[Filip Navara]])
| |
− | *Minor corrections to emulated mouse pointer handling ([[Filip Navara]])
| |
− | *Fixed few bugs related to SUROBJ initialization ([[Filip Navara]])
| |
− | *Unlock surface in error case of EngModifySurface ([[Filip Navara]])
| |
− | *Fixed non-SRCCOPY BitBlts to 1bpp surfaces ([[Filip Navara]])
| |
− | *Fixed BitBlts from 4bpp surfaces ([[Filip Navara]])
| |
− | *Fixed handling of WM_GETICON message ([[Filip Navara]])
| |
− | *Fixed window-less timers ([[Filip Navara]])
| |
− | *Changed the internal brush object to be ([[almost]]) Win32k compatible ([[Filip Navara]])
| |
− | *Fixed 8bpp StretchBlt ([[Filip Navara]])
| |
− | *Fixed 4bpp to 4bpp non-SRCCOPY blits ([[Filip Navara]])
| |
− | *Fixed 1bpp to 1bpp non-SRCCOPY blits to work when the destination doesn't start at exact byte ([[Filip Navara]])
| |
− | *Reenabled 55AA brush for scrollbar ([[Filip Navara]])
| |
− | *Fixed BITMAPOBJ_GetWidthBits to do WORD alignment and not DWORD ([[Filip Navara]])
| |
− | *Implemented TransparentBlt() on 32bpp surfaces ([[Filip Navara]])
| |
− | *Fixed bugs in 1bpp code causing memory corruption ([[Filip Navara]])
| |
− | *Lock the surface even for GDI blits in IntEngBitBlt ([[Filip Navara]])
| |
− | *Fixed order of bits in a byte for pattern brushes ([[Filip Navara]])
| |
− | *Implement brush origin for 4bpp blits ([[Filip Navara]])
| |
− | *Implemented horizontal and vertical gradients in GradientFill() ([[Thomas Weidenmueller]])
| |
− | *Use GradientFill() for gradient captions ([[Thomas Weidenmueller]])
| |
− | *Basic implementation of filling gradient triangles in GradientFill() ([[Thomas Weidenmueller]])
| |
− | *Added EngGetCurrentProcessId() and EngGetCurrentThreadId() ([[Thomas Weidenmueller]])
| |
− | *Fixed WindowFromPoint() to search backwards ([[Thomas Weidenmueller]])
| |
− | *Added pool tags for better debugging ([[Thomas Weidenmueller]])
| |
− | *Fixed WindowFromPoint() to send WM_NCHITTEST messages appropriately ([[Thomas Weidenmueller]])
| |
− | *Fixed crashes that could be caused by the thread cleanup routine when destroying ([[Thomas Weidenmueller]])
| |
− | *Fixed missing window dereference ([[Thomas Weidenmueller]])
| |
− | *Don't lock the screen dc if it's NULL ([[Thomas Weidenmueller]])
| |
− | *Don't hold more than one WM_MOUSEMOVE message at the same time in the message queue ([[Thomas Weidenmueller]])
| |
− | *Added ability to cache gdi objects ([[Thomas Weidenmueller]])
| |
− | *First attempt to implement SendMessageTimeout() ([[Thomas Weidenmueller]])
| |
− | *Simplified calls to MsqPostMessage() ([[Thomas Weidenmueller]])
| |
− | *Count all gdi handles and serialize removing gdi handles from the table. ([[Thomas Weidenmueller]])
| |
− | *Fixed wrong rendering of clipped characters ([[Thomas Weidenmueller]])
| |
− | *Fixed a couple of dead-locks in the region code ([[Thomas Weidenmueller]])
| |
− | *Implemented SetWindowRgn() and added support for window regions ([[Thomas Weidenmueller]])
| |
− | *Don't use the window region when minimized ([[Thomas Weidenmueller]])
| |
− | *Implemented GetWindowRgn() and GetWindowRgnBox() ([[Thomas Weidenmueller]])
| |
− | *Fixed accessing memory that has already been freed ([[Thomas Weidenmueller]])
| |
− | *Fixed a crash caused by removing a message twice from the queue ([[Thomas Weidenmueller]])
| |
− | *Partly ([[not working]]) implementation of TransparentBlt() ([[Thomas Weidenmueller]])
| |
− | *Fixed NtUserGetAncestor() ([[Thomas Weidenmueller]])
| |
− | *Implemented GetWindowInfo() ([[Thomas Weidenmueller]])
| |
− | *Implemented GetWindowModuleFileName() ([[Thomas Weidenmueller]])
| |
− | *Partially implemented IsHungAppWindow() ([[Thomas Weidenmueller]])
| |
− | *Fixed a crash caused by requesting a large number of extra class space ([[Thomas Weidenmueller]])
| |
− | *Made the DCE list thread-safe ([[Thomas Weidenmueller]])
| |
− | *Implemented TransparentBlt() on 8bpp, 16bpp and 24bpp surfaces ([[Thomas Weidenmueller]])
| |
− | *Fixed missing dereferences of threads ([[Thomas Weidenmueller]])
| |
− | *Fixed clipping code in NtGdiGetPixel ([[James Pritchard]])
| |
− | *Fix bug in NtGdiExtEscape not checking for NULL == DriverFunctions.Escape ([[Royce Mitchell III]])
| |
− | *If nWidth or nHeight is zero, CreateBitmap returns the handle to a 1by 1-pixel ([[Royce Mitchell III]])
| |
− | *Fix RoundRect compatibility issue ([[Royce Mitchell III and MT]])
| |
− | *NtGdiPolygon simplification ([[Royce Mitchell III]])
| |
− | *Performance improvement for 1bpp dib -> 1bpp dib blitting ([[Royce Mitchell III]])
| |
− | *Change to NtGdiGetPixel to handle device DCs ([[Royce Mitchell III]])
| |
− | *Implement SetPixelV ([[Royce Mitchell III]])
| |
− | *Implemented event services ([[David Welch]])
| |
− | *Added an implementation of LdrFindImageProcAddress ([[David Welch]])
| |
− | *Return any error code from the miniport device i/o control to the display driver; fixes crash when running with ATI drivers ([[David Welch]])
| |
− | *Fixed 8 8 bpp and 32 32 bpp StretchBlt ([[Waldo Alvarez Cares]])
| |
− | *Fixed IntGdiExtEscape ([[Anich Gregor]])
| |
− | *Initialized the win32k timer as SynchronizationTimer ([[Hartmut Birr]])
| |