Author: hbelusca Date: Sat Oct 12 15:37:50 2013 New Revision: 60629
URL: http://svn.reactos.org/svn/reactos?rev=60629&view=rev Log: [CONSRV] Implement SetConsolePalette (see r59711 for more details), but it is still WIP: - the helper function ConDrvSetConsolePalette uses a hardcoded palette for testing purposes, - lots of DPRINT1 are displayed when using this function or when swapping active screen buffers, - lot of code redundancy which will be put in some helper functions when this code will work correctly, - and I get some WIN32K warnings: WARNING: IntGdiRealizePalette at ../../win32ss/gdi/ntgdi/palette.c:777 is UNIMPLEMENTED! It would be great if a win32k guy can have a look at this!! And I suspect that's because of this that the changed palette is not used...
Also, deactivate the WM_NCRBUTTONDOWN/WM_NCRBUTTONUP hack I introduced in revision 58632, because James worked on this in revisions 60622 and 60626 (see CORE-7054 too).
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c trunk/reactos/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c trunk/reactos/win32ss/user/winsrv/consrv/frontendctl.c trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c trunk/reactos/win32ss/user/winsrv/consrv/frontends/tui/tuiterm.c trunk/reactos/win32ss/user/winsrv/consrv/include/conio.h trunk/reactos/win32ss/user/winsrv/consrv/include/term.h
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -58,11 +58,23 @@ CONSOLE_SCREEN_BUFFER_Destroy(IN OUT PCONSOLE_SCREEN_BUFFER Buffer) { if (Buffer->Header.Type == TEXTMODE_BUFFER) + { TEXTMODE_BUFFER_Destroy(Buffer); + } else if (Buffer->Header.Type == GRAPHICS_BUFFER) + { GRAPHICS_BUFFER_Destroy(Buffer); + } else if (Buffer->Header.Type == SCREEN_BUFFER) + { + // TODO: Free Buffer->Data + + /* Free the palette handle */ + if (Buffer->PaletteHandle != NULL) DeleteObject(Buffer->PaletteHandle); + + /* Free the screen buffer memory */ ConsoleFreeHeap(Buffer); + } // else // do_nothing; } @@ -218,12 +230,125 @@
NTSTATUS NTAPI ConDrvSetConsolePalette(IN PCONSOLE Console, - IN PGRAPHICS_SCREEN_BUFFER Buffer, + // IN PGRAPHICS_SCREEN_BUFFER Buffer, + IN PCONSOLE_SCREEN_BUFFER Buffer, IN HPALETTE PaletteHandle, - IN UINT Usage) -{ - DPRINT1("ConDrvSetConsolePalette is UNIMPLEMENTED but returns STATUS_SUCCESS\n"); - return STATUS_SUCCESS; + IN UINT PaletteUsage) +{ + BOOL Success; + +/******************************************************************************\ +|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************| +******************************************************************************/ + +#define PALETTESIZE 256 + + UINT i; + LPLOGPALETTE LogPalette; /* Pointer to logical palette */ + +PALETTEENTRY MyPalette[] = +{ {0, 0, 0x80,0} , // 1 + {0, 0x80,0, 0} , // 2 + {0, 0, 0, 0} , // 0 + {0, 0x80,0x80,0} , // 3 + {0x80,0, 0, 0} , // 4 + {0x80,0, 0x80,0} , // 5 + {0x80,0x80,0, 0} , // 6 + {0xC0,0xC0,0xC0,0} , // 7 + {0x80,0x80,0x80,0} , // 8 + {0, 0, 0xFF,0} , // 9 + {0, 0xFF,0, 0} , // 10 + {0, 0xFF,0xFF,0} , // 11 + {0xFF,0, 0, 0} , // 12 + {0xFF,0, 0xFF,0} , // 13 + {0xFF,0xFF,0, 0} , // 14 + {0xFF,0xFF,0xFF,0} }; // 15 + +/******************************************************************************\ +|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************| +******************************************************************************/ + + DPRINT1("ConDrvSetConsolePalette checkpt 0\n"); + + if (Console == NULL || Buffer == NULL) + return STATUS_INVALID_PARAMETER; + + DPRINT1("ConDrvSetConsolePalette checkpt 1\n"); + + // FIXME: Is it useful ? + if ( PaletteUsage != SYSPAL_STATIC && + PaletteUsage != SYSPAL_NOSTATIC && + PaletteUsage != SYSPAL_NOSTATIC256 ) + { + return STATUS_INVALID_PARAMETER; + } + + DPRINT1("ConDrvSetConsolePalette checkpt 2\n"); + + /* Validity check */ + ASSERT(Console == Buffer->Header.Console); + + + +/******************************************************************************\ +|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************| +******************************************************************************/ + + DPRINT1("HACK: FIXME: ConDrvSetConsolePalette - Use hacked palette for testing purposes!!\n"); + + LogPalette = (LPLOGPALETTE)ConsoleAllocHeap(HEAP_ZERO_MEMORY, + (sizeof(LOGPALETTE) + + (sizeof(PALETTEENTRY) * PALETTESIZE))); + + if (LogPalette) + { + LogPalette->palVersion = 0x300; + LogPalette->palNumEntries = PALETTESIZE; + + for(i=0; i < PALETTESIZE;i++) + { + LogPalette->palPalEntry[i] = MyPalette[i % sizeof(MyPalette)/sizeof(MyPalette[0])]; + } + + PaletteHandle = CreatePalette(LogPalette); + PaletteUsage = SYSPAL_NOSTATIC256; + ConsoleFreeHeap(LogPalette); + } + else + { + DPRINT1("ConDrvSetConsolePalette - Hacked LogPalette is NULL\n"); + } + +/******************************************************************************\ +|************** HACK! HACK! HACK! HACK! HACK! HACK! HACK! HACK! ***************| +******************************************************************************/ + + + + + /* Change the palette */ + DPRINT1("ConDrvSetConsolePalette calling TermSetPalette\n"); + Success = TermSetPalette(Console, PaletteHandle, PaletteUsage); + if (Success) + { + DPRINT1("TermSetPalette succeeded\n"); + /* Free the old palette handle if there was already one set */ + if ( Buffer->PaletteHandle != NULL && + Buffer->PaletteHandle != PaletteHandle ) + { + DeleteObject(Buffer->PaletteHandle); + } + + /* Save the new palette in the screen buffer */ + Buffer->PaletteHandle = PaletteHandle; + Buffer->PaletteUsage = PaletteUsage; + } + else + { + DPRINT1("TermSetPalette failed\n"); + } + + return (Success ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); }
NTSTATUS NTAPI
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/dummyfrontend.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -116,6 +116,14 @@ DummyGetLargestConsoleWindowSize(IN OUT PFRONTEND This, PCOORD pSize) { +} + +static BOOL NTAPI +DummySetPalette(IN OUT PFRONTEND This, + HPALETTE PaletteHandle, + UINT PaletteUsage) +{ + return TRUE; }
static ULONG NTAPI @@ -177,6 +185,7 @@ DummyChangeIcon, DummyGetConsoleWindowHandle, DummyGetLargestConsoleWindowSize, + DummySetPalette, DummyGetDisplayMode, DummySetDisplayMode, DummyShowMouseCursor,
Modified: trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -52,29 +52,42 @@
NTSTATUS NTAPI ConDrvSetConsolePalette(IN PCONSOLE Console, - IN PGRAPHICS_SCREEN_BUFFER Buffer, + // IN PGRAPHICS_SCREEN_BUFFER Buffer, + IN PCONSOLE_SCREEN_BUFFER Buffer, IN HPALETTE PaletteHandle, - IN UINT Usage); + IN UINT PaletteUsage); CSR_API(SrvSetConsolePalette) { NTSTATUS Status; PCONSOLE_SETPALETTE SetPaletteRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetPaletteRequest; - // PCONSOLE_SCREEN_BUFFER Buffer; - PGRAPHICS_SCREEN_BUFFER Buffer; - - DPRINT("SrvSetConsolePalette\n"); + // PGRAPHICS_SCREEN_BUFFER Buffer; + PCONSOLE_SCREEN_BUFFER Buffer; + + DPRINT1("SrvSetConsolePalette\n");
// NOTE: Tests show that this function is used only for graphics screen buffers - // and otherwise it returns false + sets last error to invalid handle. + // and otherwise it returns FALSE + sets last error to invalid handle. + // I think it's ridiculous, because if you are in text mode, simulating + // a change of VGA palette via DAC registers (done by a call to SetConsolePalette) + // cannot be done... So I allow it in ReactOS ! + /* Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), SetPaletteRequest->OutputHandle, &Buffer, GENERIC_WRITE, TRUE); - if (!NT_SUCCESS(Status)) return Status; + */ + Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), + SetPaletteRequest->OutputHandle, + &Buffer, GENERIC_WRITE, TRUE); + if (!NT_SUCCESS(Status)) return Status; + + DPRINT1("ConDrvSetConsolePalette calling...\n");
Status = ConDrvSetConsolePalette(Buffer->Header.Console, Buffer, SetPaletteRequest->PaletteHandle, SetPaletteRequest->Usage); + + DPRINT1("ConDrvSetConsolePalette returned Status 0x%08lx\n", Status);
ConSrvReleaseScreenBuffer(Buffer, TRUE); return Status;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontendctl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontendctl.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontendctl.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -220,7 +220,7 @@ PCONSOLE_SCREEN_BUFFER Buff;
// FIXME: Tests show that this function is used only for graphics screen buffers - // and otherwise it returns false + sets last error to invalid handle. + // and otherwise it returns FALSE + sets last error to invalid handle. // NOTE: I find that behaviour is ridiculous but ok, let's accept that at the moment... Status = ConSrvGetGraphicsBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process), SetCursorRequest->OutputHandle,
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guisettings.h [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -40,14 +40,18 @@ typedef struct _GUI_CONSOLE_DATA { CRITICAL_SECTION Lock; + BOOL WindowSizeLock; + HANDLE hGuiInitEvent; - BOOL WindowSizeLock; POINT OldCursor;
HWND hWindow; /* Handle to the console's window */ HICON hIcon; /* Handle to the console's icon (big) */ HICON hIconSm; /* Handle to the console's icon (small) */
+ HPALETTE hSysPalette; /* Handle to the original system palette */ + +/*** The following may be put per-screen-buffer !! ***/ HCURSOR hCursor; /* Handle to the mouse cursor */ INT MouseCursorRefCount; /* The reference counter associated with the mouse cursor. >= 0 and the cursor is shown; < 0 and the cursor is hidden. */ BOOL IgnoreNextMouseSignal; /* Used in cases where we don't want to treat a mouse signal */ @@ -63,9 +67,11 @@ HFONT Font; UINT CharWidth; UINT CharHeight; +/*****************************************************/
PCONSOLE Console; /* Pointer to the owned console */ PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to the active screen buffer (then maybe the previous Console member is redundant?? Or not...) */ + GUI_CONSOLE_INFO GuiInfo; /* GUI terminal settings */ } GUI_CONSOLE_DATA, *PGUI_CONSOLE_DATA;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -513,7 +513,7 @@ { PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA)Create->lpCreateParams; PCONSOLE Console; - HDC Dc; + HDC hDC; HFONT OldFont; TEXTMETRICW Metrics; SIZE CharSize; @@ -552,8 +552,8 @@ SetEvent(GuiData->hGuiInitEvent); return FALSE; } - Dc = GetDC(GuiData->hWindow); - if (NULL == Dc) + hDC = GetDC(GuiData->hWindow); + if (NULL == hDC) { DPRINT1("GuiConsoleNcCreate: GetDC failed\n"); DeleteObject(GuiData->Font); @@ -561,21 +561,21 @@ SetEvent(GuiData->hGuiInitEvent); return FALSE; } - OldFont = SelectObject(Dc, GuiData->Font); + OldFont = SelectObject(hDC, GuiData->Font); if (NULL == OldFont) { DPRINT1("GuiConsoleNcCreate: SelectObject failed\n"); - ReleaseDC(GuiData->hWindow, Dc); + ReleaseDC(GuiData->hWindow, hDC); DeleteObject(GuiData->Font); GuiData->hWindow = NULL; SetEvent(GuiData->hGuiInitEvent); return FALSE; } - if (!GetTextMetricsW(Dc, &Metrics)) + if (!GetTextMetricsW(hDC, &Metrics)) { DPRINT1("GuiConsoleNcCreate: GetTextMetrics failed\n"); - SelectObject(Dc, OldFont); - ReleaseDC(GuiData->hWindow, Dc); + SelectObject(hDC, OldFont); + ReleaseDC(GuiData->hWindow, hDC); DeleteObject(GuiData->Font); GuiData->hWindow = NULL; SetEvent(GuiData->hGuiInitEvent); @@ -585,12 +585,12 @@ GuiData->CharHeight = Metrics.tmHeight + Metrics.tmExternalLeading;
/* Measure real char width more precisely if possible. */ - if (GetTextExtentPoint32W(Dc, L"R", 1, &CharSize)) + if (GetTextExtentPoint32W(hDC, L"R", 1, &CharSize)) GuiData->CharWidth = CharSize.cx;
- SelectObject(Dc, OldFont); - - ReleaseDC(GuiData->hWindow, Dc); + SelectObject(hDC, OldFont); + + ReleaseDC(GuiData->hWindow, hDC);
// FIXME: Keep these instructions here ? /////////////////////////////////// Console->ActiveBuffer->CursorBlinkOn = TRUE; @@ -1700,6 +1700,52 @@ GuiConsoleHandlePaint(GuiData); break;
+ case WM_PALETTECHANGED: + { + PCONSOLE_SCREEN_BUFFER ActiveBuffer = GuiData->ActiveBuffer; // ConDrvGetActiveScreenBuffer(GuiData->Console); + + DPRINT1("WM_PALETTECHANGED called\n"); + + /* + * Protects against infinite loops: + * "... A window that receives this message must not realize + * its palette, unless it determines that wParam does not contain + * its own window handle." (WM_PALETTECHANGED description - MSDN) + * + * This message is sent to all windows, including the one that + * changed the system palette and caused this message to be sent. + * The wParam of this message contains the handle of the window + * that caused the system palette to change. To avoid an infinite + * loop, care must be taken to check that the wParam of this message + * does not match the window's handle. + */ + if ((HWND)wParam == hWnd) break; + + DPRINT1("WM_PALETTECHANGED ok\n"); + + // if (GetType(ActiveBuffer) == GRAPHICS_BUFFER) + if (ActiveBuffer->PaletteHandle) + { + /* Get the Device Context of the console window */ + HDC hDC = GetDC(GuiData->hWindow); + + DPRINT1("WM_PALETTECHANGED changing palette\n"); + + /* Specify the use of the system palette */ + SetSystemPaletteUse(hDC, ActiveBuffer->PaletteUsage); + + /* Realize the (logical) palette */ + RealizePalette(hDC); + + /* Release the Device Context and return */ + ReleaseDC(GuiData->hWindow, hDC); + } + + DPRINT1("WM_PALETTECHANGED quit\n"); + + break; + } + case WM_KEYDOWN: case WM_KEYUP: case WM_CHAR: @@ -1805,14 +1851,16 @@ * call after that DefWindowProc, on ReactOS, right-clicks on the * (non-client) application title-bar does not display the system * menu and does not trigger a WM_NCRBUTTONUP message too. - * See: http://git.reactos.org/?p=reactos.git;a=blob;f=reactos/win32ss/user/user32/w... + * See: http://git.reactos.org/?p=reactos.git;a=blob;f=reactos/win32ss/user/user32/w... * and line 1135 too. */ +#if 0 if (DefWindowProcW(hWnd, WM_NCHITTEST, 0, lParam) == HTCAPTION) { /* Call DefWindowProcW with the WM_CONTEXTMENU message */ msg = WM_CONTEXTMENU; } +#endif goto Default; } // case WM_NCRBUTTONUP: @@ -2370,6 +2418,9 @@ } }
+ /* Original system palette */ + GuiData->hSysPalette = NULL; + /* Mouse is shown by default with its default cursor shape */ GuiData->hCursor = ghDefaultCursor; GuiData->MouseCursorRefCount = 0; @@ -2567,6 +2618,9 @@ GuiSetActiveScreenBuffer(IN OUT PFRONTEND This) { PGUI_CONSOLE_DATA GuiData = This->Data; + PCONSOLE_SCREEN_BUFFER ActiveBuffer; // = GuiData->ActiveBuffer; // ConDrvGetActiveScreenBuffer(GuiData->Console); + HDC hDC; + HPALETTE hPalette;
EnterCriticalSection(&GuiData->Lock); GuiData->WindowSizeLock = TRUE; @@ -2577,10 +2631,37 @@ GuiData->WindowSizeLock = FALSE; LeaveCriticalSection(&GuiData->Lock);
+ ActiveBuffer = GuiData->ActiveBuffer; + + /* Change the current palette */ + if (ActiveBuffer->PaletteHandle == NULL) + { + hPalette = GuiData->hSysPalette; + } + else + { + hPalette = ActiveBuffer->PaletteHandle; + } + + DPRINT1("GuiSetActiveScreenBuffer using palette 0x%p\n", hPalette); + + /* Get the Device Context of the console window */ + hDC = GetDC(GuiData->hWindow); + + /* Set the new palette */ + SelectPalette(hDC, hPalette, FALSE); + + /* Specify the use of the system palette */ + SetSystemPaletteUse(hDC, ActiveBuffer->PaletteUsage); + + /* Realize the (logical) palette */ + RealizePalette(hDC); + + /* Release the Device Context */ + ReleaseDC(GuiData->hWindow, hDC); + GuiResizeTerminal(This); // ConioDrawConsole(Console); - - // FIXME: Change the palette. }
static VOID WINAPI @@ -2588,6 +2669,7 @@ IN PCONSOLE_SCREEN_BUFFER ScreenBuffer) { PGUI_CONSOLE_DATA GuiData = This->Data; + HDC hDC;
/* * If we were notified to release a screen buffer that is not actually @@ -2603,6 +2685,20 @@ * it ONLY. */
+ /* Get the Device Context of the console window */ + hDC = GetDC(GuiData->hWindow); + + /* Release the old active palette and set the default one */ + if (GetCurrentObject(hDC, OBJ_PAL) == ScreenBuffer->PaletteHandle) + { + /* Set the new palette */ + SelectPalette(hDC, GuiData->hSysPalette, FALSE); + } + + /* Release the Device Context */ + ReleaseDC(GuiData->hWindow, hDC); + + /* Set the adequate active screen buffer */ if (ScreenBuffer != GuiData->Console->ActiveBuffer) { GuiSetActiveScreenBuffer(This); @@ -2765,6 +2861,61 @@
pSize->X = (SHORT)(width / (int)WidthUnit ) /* HACK */ + 2; pSize->Y = (SHORT)(height / (int)HeightUnit) /* HACK */ + 1; +} + +static BOOL WINAPI +GuiSetPalette(IN OUT PFRONTEND This, + HPALETTE PaletteHandle, + UINT PaletteUsage) +{ + BOOL Success = TRUE; + PGUI_CONSOLE_DATA GuiData = This->Data; + // PCONSOLE_SCREEN_BUFFER ActiveBuffer = GuiData->ActiveBuffer; // ConDrvGetActiveScreenBuffer(GuiData->Console); + HDC hDC; + HPALETTE OldPalette; + + DPRINT1("GuiSetPalette checkpt 0\n"); + + // if (GetType(ActiveBuffer) != GRAPHICS_BUFFER) return FALSE; + if (PaletteHandle == NULL) return FALSE; + + DPRINT1("GuiSetPalette checkpt 1\n"); + + /* Get the Device Context of the console window */ + hDC = GetDC(GuiData->hWindow); + + DPRINT1("GuiSetPalette calling SelectPalette(0x%p, 0x%p, FALSE)\n", hDC, PaletteHandle); + + /* Set the new palette */ + OldPalette = SelectPalette(hDC, PaletteHandle, FALSE); + DPRINT1("OldPalette = 0x%p\n", OldPalette); + if (OldPalette == NULL) + { + DPRINT1("SelectPalette failed\n"); + Success = FALSE; + goto Quit; + } + + DPRINT1("GuiSetPalette checkpt 2\n"); + + /* Specify the use of the system palette */ + SetSystemPaletteUse(hDC, PaletteUsage); + + /* Realize the (logical) palette */ + RealizePalette(hDC); + + DPRINT1("GuiData->hSysPalette before == 0x%p\n", GuiData->hSysPalette); + + /* Save the original system palette handle */ + if (GuiData->hSysPalette == NULL) GuiData->hSysPalette = OldPalette; + + DPRINT1("GuiData->hSysPalette after == 0x%p\n", GuiData->hSysPalette); + +Quit: + DPRINT1("GuiSetPalette Quit\n"); + /* Release the Device Context and return */ + ReleaseDC(GuiData->hWindow, hDC); + return Success; }
static ULONG WINAPI @@ -2880,6 +3031,7 @@ GuiChangeIcon, GuiGetConsoleWindowHandle, GuiGetLargestConsoleWindowSize, + GuiSetPalette, GuiGetDisplayMode, GuiSetDisplayMode, GuiShowMouseCursor,
Modified: trunk/reactos/win32ss/user/winsrv/consrv/frontends/tui/tuiterm.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/frontends/tui/tuiterm.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/frontends/tui/tuiterm.c [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -746,6 +746,14 @@ *pSize = PhysicalConsoleSize; }
+static BOOL WINAPI +TuiSetPalette(IN OUT PFRONTEND This, + HPALETTE PaletteHandle, + UINT PaletteUsage) +{ + return TRUE; +} + static ULONG WINAPI TuiGetDisplayMode(IN OUT PFRONTEND This) { @@ -805,6 +813,7 @@ TuiChangeIcon, TuiGetConsoleWindowHandle, TuiGetLargestConsoleWindowSize, + TuiSetPalette, TuiGetDisplayMode, TuiSetDisplayMode, TuiShowMouseCursor,
Modified: trunk/reactos/win32ss/user/winsrv/consrv/include/conio.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/include/conio.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/include/conio.h [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -64,6 +64,8 @@
LIST_ENTRY ListEntry; /* Entry in console's list of buffers */
+ // PVOID Data; /* Private data for the frontend to use */ + COORD ScreenBufferSize; /* Size of this screen buffer. (Rows, Columns) for text-mode and (Width, Height) for graphics */ COORD ViewSize; /* Associated "view" (i.e. console) size */
@@ -81,6 +83,9 @@ // ULONG CursorSize; CONSOLE_CURSOR_INFO CursorInfo; // FIXME: Keep this member or not ?? /*********************************************/ + + HPALETTE PaletteHandle; /* Handle to the color palette associated to this buffer */ + UINT PaletteUsage; /* The new use of the system palette. See SetSystemPaletteUse 'uUsage' parameter */
// WORD ScreenDefaultAttrib; /* Default screen char attribute */ // WORD PopupDefaultAttrib; /* Default popup char attribute */ @@ -223,6 +228,9 @@ HWND (WINAPI *GetConsoleWindowHandle)(IN OUT PFRONTEND This); VOID (WINAPI *GetLargestConsoleWindowSize)(IN OUT PFRONTEND This, PCOORD pSize); + BOOL (WINAPI *SetPalette)(IN OUT PFRONTEND This, + HPALETTE PaletteHandle, + UINT PaletteUsage); ULONG (WINAPI *GetDisplayMode)(IN OUT PFRONTEND This); BOOL (WINAPI *SetDisplayMode)(IN OUT PFRONTEND This, ULONG NewMode);
Modified: trunk/reactos/win32ss/user/winsrv/consrv/include/term.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv/... ============================================================================== --- trunk/reactos/win32ss/user/winsrv/consrv/include/term.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/winsrv/consrv/include/term.h [iso-8859-1] Sat Oct 12 15:37:50 2013 @@ -38,6 +38,8 @@ (Console)->TermIFace.Vtbl->GetConsoleWindowHandle(&(Console)->TermIFace) #define TermGetLargestConsoleWindowSize(Console, pSize) \ (Console)->TermIFace.Vtbl->GetLargestConsoleWindowSize(&(Console)->TermIFace, (pSize)) +#define TermSetPalette(Console, PaletteHandle, PaletteUsage) \ + (Console)->TermIFace.Vtbl->SetPalette(&(Console)->TermIFace, (PaletteHandle), (PaletteUsage)) #define TermGetDisplayMode(Console) \ (Console)->TermIFace.Vtbl->GetDisplayMode(&(Console)->TermIFace) #define TermSetDisplayMode(Console, NewMode) \