/* FUNCTIONS ******************************************************************/
+COLORREF RGBFromAttrib2(PCONSOLE Console, WORD Attribute)
+{
+ HPALETTE hPalette = Console->ActiveBuffer->PaletteHandle;
+ PALETTEENTRY pe;
+
+ if (hPalette == NULL) return RGBFromAttrib(Console, Attribute);
+
+ GetPaletteEntries(hPalette, Attribute, 1, &pe);
+ return PALETTERGB(pe.peRed, pe.peGreen, pe.peBlue);
+}
+
VOID
GuiCopyFromTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer)
{
VOID
GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
PGUI_CONSOLE_DATA GuiData,
- HDC hDC,
- PRECT rc)
+ PRECT rcView,
+ PRECT rcFramebuffer)
{
PCONSOLE Console = Buffer->Header.Console;
// ASSERT(Console == GuiData->Console);
if (Buffer->Buffer == NULL) return;
- TopLine = rc->top / GuiData->CharHeight + Buffer->ViewOrigin.Y;
- BottomLine = (rc->bottom + (GuiData->CharHeight - 1)) / GuiData->CharHeight - 1 + Buffer->ViewOrigin.Y;
- LeftChar = rc->left / GuiData->CharWidth + Buffer->ViewOrigin.X;
- RightChar = (rc->right + (GuiData->CharWidth - 1)) / GuiData->CharWidth - 1 + Buffer->ViewOrigin.X;
+ rcFramebuffer->left = Buffer->ViewOrigin.X * GuiData->CharWidth + rcView->left;
+ rcFramebuffer->top = Buffer->ViewOrigin.Y * GuiData->CharHeight + rcView->top;
+ rcFramebuffer->right = Buffer->ViewOrigin.X * GuiData->CharWidth + rcView->right;
+ rcFramebuffer->bottom = Buffer->ViewOrigin.Y * GuiData->CharHeight + rcView->bottom;
- LastAttribute = ConioCoordToPointer(Buffer, LeftChar, TopLine)->Attributes;
-
- SetTextColor(hDC, RGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute)));
- SetBkColor(hDC, RGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute)));
+ LeftChar = rcFramebuffer->left / GuiData->CharWidth;
+ TopLine = rcFramebuffer->top / GuiData->CharHeight;
+ RightChar = rcFramebuffer->right / GuiData->CharWidth;
+ BottomLine = rcFramebuffer->bottom / GuiData->CharHeight;
- if (BottomLine >= Buffer->ScreenBufferSize.Y) BottomLine = Buffer->ScreenBufferSize.Y - 1;
if (RightChar >= Buffer->ScreenBufferSize.X) RightChar = Buffer->ScreenBufferSize.X - 1;
+ if (BottomLine >= Buffer->ScreenBufferSize.Y) BottomLine = Buffer->ScreenBufferSize.Y - 1;
- OldFont = SelectObject(hDC, GuiData->Font);
+ LastAttribute = ConioCoordToPointer(Buffer, LeftChar, TopLine)->Attributes;
+
+ SetTextColor(GuiData->hMemDC, RGBFromAttrib2(Console, TextAttribFromAttrib(LastAttribute)));
+ SetBkColor(GuiData->hMemDC, RGBFromAttrib2(Console, BkgdAttribFromAttrib(LastAttribute)));
+
+ OldFont = SelectObject(GuiData->hMemDC, GuiData->Font);
for (Line = TopLine; Line <= BottomLine; Line++)
{
*/
if (From->Attributes != LastAttribute || (Char - Start == sizeof(LineBuffer) / sizeof(WCHAR)))
{
- TextOutW(hDC,
- (Start - Buffer->ViewOrigin.X) * GuiData->CharWidth ,
- (Line - Buffer->ViewOrigin.Y) * GuiData->CharHeight,
+ TextOutW(GuiData->hMemDC,
+ Start * GuiData->CharWidth,
+ Line * GuiData->CharHeight,
LineBuffer,
Char - Start);
Start = Char;
Attribute = From->Attributes;
if (Attribute != LastAttribute)
{
- SetTextColor(hDC, RGBFromAttrib(Console, TextAttribFromAttrib(Attribute)));
- SetBkColor(hDC, RGBFromAttrib(Console, BkgdAttribFromAttrib(Attribute)));
+ SetTextColor(GuiData->hMemDC, RGBFromAttrib2(Console, TextAttribFromAttrib(Attribute)));
+ SetBkColor(GuiData->hMemDC, RGBFromAttrib2(Console, BkgdAttribFromAttrib(Attribute)));
LastAttribute = Attribute;
}
}
*(To++) = (From++)->Char.UnicodeChar;
}
- TextOutW(hDC,
- (Start - Buffer->ViewOrigin.X) * GuiData->CharWidth ,
- (Line - Buffer->ViewOrigin.Y) * GuiData->CharHeight,
+ TextOutW(GuiData->hMemDC,
+ Start * GuiData->CharWidth,
+ Line * GuiData->CharHeight,
LineBuffer,
RightChar - Start + 1);
}
TopLine <= CursorY && CursorY <= BottomLine)
{
CursorHeight = ConioEffectiveCursorSize(Console, GuiData->CharHeight);
+
Attribute = ConioCoordToPointer(Buffer, Buffer->CursorPosition.X, Buffer->CursorPosition.Y)->Attributes;
+ if (Attribute == DEFAULT_SCREEN_ATTRIB) Attribute = Buffer->ScreenDefaultAttrib;
- if (Attribute != DEFAULT_SCREEN_ATTRIB)
- {
- CursorBrush = CreateSolidBrush(RGBFromAttrib(Console, Attribute));
- }
- else
- {
- CursorBrush = CreateSolidBrush(RGBFromAttrib(Console, Buffer->ScreenDefaultAttrib));
- }
+ CursorBrush = CreateSolidBrush(RGBFromAttrib2(Console, TextAttribFromAttrib(Attribute)));
+ OldBrush = SelectObject(GuiData->hMemDC, CursorBrush);
- OldBrush = SelectObject(hDC, CursorBrush);
- PatBlt(hDC,
- (CursorX - Buffer->ViewOrigin.X) * GuiData->CharWidth,
- (CursorY - Buffer->ViewOrigin.Y) * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight),
+ PatBlt(GuiData->hMemDC,
+ CursorX * GuiData->CharWidth,
+ CursorY * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight),
GuiData->CharWidth,
CursorHeight,
PATCOPY);
- SelectObject(hDC, OldBrush);
+ SelectObject(GuiData->hMemDC, OldBrush);
DeleteObject(CursorBrush);
}
}
- SelectObject(hDC, OldFont);
+ SelectObject(GuiData->hMemDC, OldFont);
}
/* EOF */