~GDIDisplay()
{
if(memDC) DeleteDC(memDC);
- if(memBitmap) DeleteObject(memBitmap);
+ if(memBitmap) DeleteObject(memBitmap);
if(palette) DeleteObject(palette);
delete logPalette;
}
~GDISystem()
{
- if(tmpDC)
+ if(tmpDC)
ReleaseDC(0, tmpDC);
}
};
static PixelFormat GetColorFormat(int depth)
{
- if(depth == 8)
+ if(depth == 8)
return pixelFormat8;
- else if(depth == 16)
+ else if(depth == 16)
return pixelFormat555;
- else
+ else
return pixelFormat888;
}
info->bmiHeader.biBitCount = (uint16)gdiSystem.depth;
info->bmiHeader.biWidth = gdiDisplay.bitmap.stride;
info->bmiHeader.biHeight = -height;
-
+
for(c=0; c<256; c++)
{
info->bmiColors[c].rgbReserved = 0;
ScrollDC(gdiDisplay.hdc, -x, -y, (RECT *)&box, (RECT *)&box, gdiDisplay.rgn, null);
}
ScrollDC(gdiDisplay.memDC, -x, -y, (RECT *)&box, (RECT *)&box, null, null);
-
+
numBytes = GetRegionData(gdiDisplay.rgn, 0, null);
gdiDisplay.data = (RGNDATA *) new0 byte[numBytes];
GetRegionData(gdiDisplay.rgn, numBytes, gdiDisplay.data);
}
else
{
- BitBlt(gdiDisplay.hdc,
- updateBox.left,updateBox.top,
+ BitBlt(gdiDisplay.hdc,
+ updateBox.left,updateBox.top,
updateBox.right - updateBox.left + 1, updateBox.bottom - updateBox.top + 1,
gdiDisplay.memDC, updateBox.left, updateBox.top, SRCCOPY);
}
surface.offset.x = x;
surface.offset.y = y;
surface.unclippedBox = surface.box = clip;
-
+
result = true;
}
}
surface.offset.x = x;
surface.offset.y = y;
surface.unclippedBox = surface.box = clip;
-
+
SetDCBrushColor(gdiSurface.hdc, RGB(0,0,0));
SetDCPenColor(gdiSurface.hdc, RGB(255,255,255));
void Clip(Display display, Surface surface, Box clip)
{
GDISurface gdiSurface = surface.driverData;
- HRGN clippedRgn = null;
+ HRGN clippedRgn = null;
if(clip != null)
{
Box box = clip;
}
else
clippedRgn = CreateRectRgn(0, 0, 0, 0);
-
+
if(clippedRgn)
SelectClipRgn(gdiSurface.hdc,clippedRgn);
}
HBITMAP screenBmp = CreateCompatibleBitmap(hdc, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
HBITMAP back = SelectObject(memDC, screenBmp);
uint16 depth;
-
+
switch(format)
{
case pixelFormat8: depth = 8; break;
DeleteDC(memDC);
result = true;
- }
+ }
}
return result;
}
GDISurface gdiSurface = surface.driverData;
GDIDisplay gdiDisplay = display ? display.driverData : null;
COLORREF rgb = RGB(color.color.r, color.color.g, color.color.b);
-
+
SetTextColor(gdiSurface.hdc, rgb);
gdiSurface.color = rgb;
}
((subclass(DisplayDriver))class(LFBDisplayDriver)).SetBackground(display, surface, color);
if(display && (!display.alphaBlend || display.pixelFormat != pixelFormat888))
- {
+ {
GDISurface gdiSurface = surface.driverData;
GDIDisplay gdiDisplay = display ? display.driverData : null;
COLORREF rgb;
-
+
if(gdiSurface.bitmap.pixelFormat == pixelFormat8 && display)
color = gdiSurface.bitmap.palette[gdiDisplay.rgbLookup[(uint16)(Color555) color]];
rgb = RGB(color.color.r, color.color.g, color.color.b);
else
{
return ((subclass(DisplayDriver))class(LFBDisplayDriver)).ConvertBitmap(displaySystem, src, format, palette);
- }
+ }
}
bool AllocateBitmap(DisplaySystem displaySystem, Bitmap bitmap, int width, int height, int stride, PixelFormat format, bool allocatePalette)
}
}
- bitmap.stride=stride;
+ bitmap.stride=stride;
bitmap.width=width;
bitmap.height=height;
bitmap.size=(uint)stride*(uint)height;
info->bmiHeader.biBitCount = depth;
info->bmiHeader.biWidth = bitmap.stride;
info->bmiHeader.biHeight = -height;
-
+
for(c=0; c<256; c++)
{
info->bmiColors[c].rgbReserved = 0;
{
if(gdiFont.gdiFont)
DeleteObject(gdiFont.gdiFont);
- if(gdiFont.font)
+ if(gdiFont.font)
((subclass(DisplayDriver))class(LFBDisplayDriver)).UnloadFont(displaySystem, gdiFont.font);
- delete gdiFont;
+ delete gdiFont;
}
}
{
if(!gdiFont.font)
{
- gdiFont.font = ((subclass(DisplayDriver))class(LFBDisplayDriver)).LoadFont(display.displaySystem,
- gdiFont.faceName, gdiFont.size, gdiFont.flags);
+ gdiFont.font = ((subclass(DisplayDriver))class(LFBDisplayDriver)).LoadFont(display.displaySystem,
+ gdiFont.faceName, gdiFont.size, gdiFont.flags);
}
- ((subclass(DisplayDriver))class(LFBDisplayDriver)).TextFont(display, surface, gdiFont.font);
- }
- else
+ ((subclass(DisplayDriver))class(LFBDisplayDriver)).TextFont(display, surface, gdiFont.font);
+ }
+ else
{
GDISurface gdiSurface = surface.driverData;
SelectObject(gdiSurface.hdc, gdiFont.gdiFont);
- }
+ }
}
void TextOpacity(Display display, Surface surface, bool opaque)
{
GDISurface gdiSurface = surface.driverData;
SetBkMode(gdiSurface.hdc, opaque ? OPAQUE : TRANSPARENT);
- }
+ }
}
void WriteText(Display display, Surface surface, int x, int y, char * text, int len)
GDIFont gdiFont = (GDIFont)surface.font;
if(!gdiFont.font)
{
- gdiFont.font = ((subclass(DisplayDriver))class(LFBDisplayDriver)).LoadFont(display.displaySystem,
- gdiFont.faceName, gdiFont.size, gdiFont.flags);
+ gdiFont.font = ((subclass(DisplayDriver))class(LFBDisplayDriver)).LoadFont(display.displaySystem,
+ gdiFont.faceName, gdiFont.size, gdiFont.flags);
}
if(surface.textOpacity)
{
// UNICODE FIX: proper space computation
if(width) *width = size.cx + (wordCount - realLen) * space.cx;
- if(height)
+ if(height)
{
if(realLen)
*height = size.cy;
else
*height = wordCount ? space.cy : 0;
}
- }
+ }
}
void FontExtent(DisplaySystem displaySystem, Font font, char * text, int len, int * width, int * height)
if(width) *width = 0;
if(height) *height = 0;
}
- }
+ }
}
void DrawingChar(Display display, Surface surface, byte character)