63 text_align = TA_LEFT | TA_BOTTOM;
66 text_align = TA_LEFT | TA_BASELINE;
69 text_align = TA_LEFT | TA_TOP;
72 text_align = TA_CENTER | TA_BOTTOM;
75 text_align = TA_CENTER | TA_BASELINE;
78 text_align = TA_CENTER | TA_TOP;
81 text_align = TA_RIGHT | TA_BOTTOM;
84 text_align = TA_RIGHT | TA_BASELINE;
87 text_align = TA_RIGHT | TA_TOP;
90 text_align = TA_BASELINE;
145 gdk_win32_function_to_string(values->
function)),
149 data->
rop2 = R2_COPYPEN;
157 data->
rop2 = R2_XORPEN;
161 data->
rop2 = R2_BLACK;
165 data->
rop2 = R2_MASKPEN;
169 data->
rop2 = R2_MASKPENNOT;
173 data->
rop2 = R2_MASKNOTPEN;
181 data->
rop2 = R2_MERGEPEN;
185 data->
rop2 = R2_NOTXORPEN;
189 data->
rop2 = R2_MERGEPENNOT;
193 data->
rop2 = R2_NOTCOPYPEN;
197 data->
rop2 = R2_MERGENOTPEN;
201 data->
rop2 = R2_NOTMASKPEN;
205 data->
rop2 = R2_WHITE;
219 gdk_win32_fill_style_to_string(data->
fill_style)),
244 #if 0 // not valid anymore, it was not possible to create brushes (stipples)
246 if (sw != 8 || sh != 8) {
437 data->
rop2 = R2_COPYPEN;
444 data->
pen_style = PS_GEOMETRIC | PS_ENDCAP_FLAT | PS_JOIN_MITER;
487 switch (data->
rop2) {
541 #if 0 // bb mod 15.02.06
555 hbr = GetStockObject (WHITE_BRUSH);
556 if ((hdc = CreateCompatibleDC (
NULL)) ==
NULL)
558 if (ok && (oldbitmap =
562 hbr = GetStockObject (BLACK_BRUSH);
563 if (hbr ==
NULL || !FillRect (hdc, &rect, hbr))
567 hbr = GetStockObject (WHITE_BRUSH);
571 if (hdc !=
NULL && oldbitmap !=
NULL) {
572 if (SelectObject (hdc, oldbitmap) ==
NULL)
579 else if (pixmap !=
NULL)
582 #endif // bb mod 15.02.06
602 else if (data->
pen_style & PS_ENDCAP_SQUARE)
610 else if (data->
pen_style & PS_JOIN_BEVEL)
649 g_print(
"gdk_win32_gc_set_dashes: not fully supported\n"));
657 if ((dash_list[0] == dash_list[1]) && (dash_list[0] > 2)) {
660 g_print(
"gdk_win32_gc_set_dashes: PS_DASH (%d,%d)\n",
661 dash_list[0], dash_list[1]));
665 g_print(
"gdk_win32_gc_set_dashes: PS_DOT (%d,%d)\n",
666 dash_list[0], dash_list[1]));
672 (
"gdk_win32_gc_set_dashes: PS_DASHDOT (%d,%d,%d,%d)\n",
673 dash_list[0], dash_list[1], dash_list[2],
679 (
"gdk_win32_gc_set_dashes: PS_DASHDOTDOT (%d,%d,%d,%d,%d,%d)\n",
680 dash_list[0], dash_list[1], dash_list[2], dash_list[3],
681 dash_list[4], dash_list[5]));
686 (
"gdk_win32_gc_set_dashes: no guess for %d dashes\n",
693 if ((data->
pen_width <= 1) && (n == 0)) {
703 for (i = 0; i <
n; i++)
721 g_print(
"gdk_gc_set_clip_rectangle: (%d) %dx%d@+%d+%d\n",
724 rectangle->
x, rectangle->
y));
726 CreateRectRgn(rectangle->
x, rectangle->
y,
727 rectangle->
x + rectangle->
width,
750 data, (region !=
NULL ?
"xxx" :
"None")));
786 *dst_data = *src_data;
793 ExtCreateRegion(
NULL, nbytes, rgn)) ==
NULL)
816 return PALETTEINDEX(pixel);
820 r = (r * 255) / bitmask[visual->
red_prec];
824 b = (b * 255) / bitmask[visual->
blue_prec];
839 if (colormap_private ==
NULL) {
844 PALETTEENTRY palPalEntry[2];
846 static HPALETTE hpal =
NULL;
850 logpal.palVersion = 0x300;
851 logpal.palNumEntries = 2;
852 logpal.palPalEntry[0].peRed =
853 logpal.palPalEntry[0].peGreen =
854 logpal.palPalEntry[0].peBlue = 0x00;
855 logpal.palPalEntry[0].peFlags = 0x00;
856 logpal.palPalEntry[1].peRed =
857 logpal.palPalEntry[1].peGreen =
858 logpal.palPalEntry[1].peBlue = 0xFF;
859 logpal.palPalEntry[1].peFlags = 0x00;
860 if ((hpal = CreatePalette((LOGPALETTE *) & logpal)) ==
NULL)
863 SelectPalette(data->
xgc, hpal,
FALSE);
864 RealizePalette(data->
xgc);
872 if ((k = RealizePalette(data->
xgc)) == GDI_ERROR)
877 g_print(
"Selected palette %#x for gc %#x, realized %d colors\n",
889 logbrush.lbStyle = BS_SOLID;
890 logbrush.lbColor = fg;
891 logbrush.lbHatch = 0;
898 if ((data->
pen_style & PS_STYLE_MASK) == PS_SOLID) {
917 if (SetBkMode(data->
xgc, TRANSPARENT) == 0)
920 if (SelectObject(data->
xgc, hpen) ==
NULL)
944 if ((hbr = CreateSolidBrush(fg)) ==
NULL)
948 if (SelectObject(data->
xgc, hbr) ==
NULL)
979 if ((
data->saved_dc = SaveDC(
data->xgc)) == 0)
988 if ((
data->saved_dc = SaveDC(
data->xgc)) == 0)
996 && (
data->values_mask & GDK_GC_BACKGROUND))
1001 if (SetBkMode(
data->xgc, TRANSPARENT) == 0)
1006 if (SetBkMode(
data->xgc, TRANSPARENT) == 0)
1014 if (
data->rop2 != R2_COPYPEN)
1015 if (SetROP2(
data->xgc,
data->rop2) == 0)
1022 OffsetRgn(
data->clip_region,
data->clip_x_origin,
1023 data->clip_y_origin);
1024 SelectClipRgn(
data->xgc,
data->clip_region);
1038 HGDIOBJ hpen =
NULL;
1042 if ((hpen = GetCurrentObject(
data->xgc, OBJ_PEN)) ==
NULL)
1045 if ((hbr = GetCurrentObject(
data->xgc, OBJ_BRUSH)) ==
NULL)
1049 if (!RestoreDC(
data->xgc,
data->saved_dc))
1052 if (colormap_private !=
NULL
1055 SelectPalette(
data->xgc, GetStockObject(DEFAULT_PALETTE),
FALSE);
1061 if (!DeleteDC(
data->xgc))
1068 if (!DeleteObject(hpen))
1072 if (!DeleteObject(hbr))
1079 OffsetRgn(
data->clip_region, -
data->clip_x_origin,
1080 -
data->clip_y_origin);
1119 BITMAPINFOHEADER bmiHeader;
1123 RGBQUAD bmiColors[2];
1131 PALETTEENTRY palPalEntry[2];
1133 static HPALETTE bwPalette =
NULL;
1147 if (bwPalette ==
NULL) {
1149 logpal.palVersion = 0x300;
1150 logpal.palNumEntries = 2;
1151 logpal.palPalEntry[0].peRed =
1152 logpal.palPalEntry[0].peGreen = logpal.palPalEntry[0].peBlue = 0;
1153 logpal.palPalEntry[0].peFlags = 0;
1154 logpal.palPalEntry[1].peRed =
1155 logpal.palPalEntry[1].peGreen =
1156 logpal.palPalEntry[1].peBlue = 0xFF;
1157 logpal.palPalEntry[1].peFlags = 0;
1158 if ((bwPalette = CreatePalette((LOGPALETTE *) & logpal)) ==
NULL)
1163 hMemDC = CreateCompatibleDC(
NULL);
1169 SelectPalette(hMemDC, bwPalette,
FALSE);
1170 RealizePalette(hMemDC);
1176 bmi.bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
1177 bmi.bmiHeader.biWidth = bm.bmWidth;
1178 bmi.bmiHeader.biHeight = bm.bmHeight;
1179 bmi.bmiHeader.biPlanes = 1;
1180 bmi.bmiHeader.biBitCount = 8;
1181 bmi.bmiHeader.biCompression = BI_RGB;
1182 bmi.bmiHeader.biSizeImage = 0;
1183 bmi.bmiHeader.biXPelsPerMeter = 0;
1184 bmi.bmiHeader.biYPelsPerMeter = 0;
1185 bmi.bmiHeader.biClrUsed = 2;
1186 bmi.bmiHeader.biClrImportant = 2;
1188 bmi.bmiColors[0] = 0;
1189 bmi.bmiColors[1] = 1;
1190 hbm8 = CreateDIBSection(hMemDC, (BITMAPINFO *) & bmi,
1191 DIB_PAL_COLORS, &pbits8,
NULL, 0);
1193 bmi.bmiColors[0].rgbBlue =
1194 bmi.bmiColors[0].rgbGreen = bmi.bmiColors[0].rgbRed = 0x00;
1195 bmi.bmiColors[0].rgbReserved = 0x00;
1197 bmi.bmiColors[1].rgbBlue =
1198 bmi.bmiColors[1].rgbGreen = bmi.bmiColors[1].rgbRed = 0xFF;
1199 bmi.bmiColors[0].rgbReserved = 0x00;
1201 hbm8 = CreateDIBSection(hMemDC, (BITMAPINFO *) & bmi,
1202 DIB_RGB_COLORS, &pbits8,
NULL, 0);
1210 holdBmp = (HBITMAP) SelectObject(hMemDC, hbm8);
1213 hDC = CreateCompatibleDC(hMemDC);
1216 SelectObject(hMemDC, holdBmp);
1232 bm8.bmWidthBytes = (((bm8.bmWidthBytes - 1) / 4) + 1) * 4;
1235 holdBmp2 = (HBITMAP) SelectObject(hDC, hBmp);
1237 if (!BitBlt(hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, 0, 0, SRCCOPY)) {
1239 SelectObject(hDC, holdBmp2);
1240 SelectObject(hMemDC, holdBmp);
1245 SelectObject(hDC, holdBmp2);
1253 #define ALLOC_UNIT 200
1256 pData =
g_malloc(
sizeof(RGNDATAHEADER) + (
sizeof(RECT) * maxRects));
1257 memset(pData, 0,
sizeof(RGNDATAHEADER) + (
sizeof(RECT) * maxRects));
1258 pData->rdh.dwSize =
sizeof(RGNDATAHEADER);
1259 pData->rdh.iType = RDH_RECTANGLES;
1260 pData->rdh.nCount = pData->rdh.nRgnSize = 0;
1261 SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
1264 p8 = (BYTE *) pbits8 + (bm8.bmHeight - 1) * bm8.bmWidthBytes;
1265 for (y = 0; y < bm.bmHeight; y++) {
1267 for (x = 0; x < bm.bmWidth; x++) {
1271 while (x < bm.bmWidth) {
1284 if (pData->rdh.nCount >= maxRects) {
1286 pData =
g_realloc(pData,
sizeof(RGNDATAHEADER)
1287 + (
sizeof(RECT) * maxRects));
1289 pr = (RECT *) & pData->Buffer;
1290 SetRect(&pr[pData->rdh.nCount], x0, y, x, y + 1);
1291 if (x0 < pData->rdh.rcBound.left)
1292 pData->rdh.rcBound.left = x0;
1293 if (y < pData->rdh.rcBound.top)
1294 pData->rdh.rcBound.top =
y;
1295 if (x > pData->rdh.rcBound.right)
1296 pData->rdh.rcBound.right =
x;
1297 if (y + 1 > pData->rdh.rcBound.bottom)
1298 pData->rdh.rcBound.bottom = y + 1;
1299 pData->rdh.nCount++;
1306 if (pData->rdh.nCount == 2000) {
1307 HRGN h = ExtCreateRegion(
NULL,
1308 sizeof(RGNDATAHEADER) +
1309 (
sizeof(RECT) * maxRects), pData);
1311 CombineRgn(hRgn, hRgn, h, RGN_OR);
1315 pData->rdh.nCount = 0;
1316 SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
1322 p8 -= bm8.bmWidthBytes;
1326 h = ExtCreateRegion(
NULL,
sizeof(RGNDATAHEADER)
1327 + (
sizeof(RECT) * maxRects), pData);
1329 CombineRgn(hRgn, hRgn, h, RGN_OR);
1336 SelectObject(hMemDC, holdBmp);
1343 #ifdef G_ENABLE_DEBUG
1347 switch (cap_style) {
1348 #define CASE(x) case x: return #x + strlen ("GDK_CAP_")
1355 return (
"illegal GdkCapStyle value");
1364 #define CASE(x) case x: return #x + strlen ("GDK_")
1371 return (
"illegal GdkFill value");
1380 #define CASE(x) case x: return #x + strlen ("GDK_")
1398 return (
"illegal GdkFunction value");
1406 switch (join_style) {
1407 #define CASE(x) case x: return #x + strlen ("GDK_JOIN_")
1413 return (
"illegal GdkJoinStyle value");
1421 switch (line_style) {
1422 #define CASE(x) case x: return #x + strlen ("GDK_LINE_")
1428 return (
"illegal GdkLineStyle value");
GdkPixmap * gdk_pixmap_new(GdkWindow *window, gint width, gint height, gint depth)
void gdk_gc_unref(GdkGC *gc)
void gdk_drawable_get_size(GdkDrawable *drawable, gint *width, gint *height)
GdkSubwindowMode subwindow_mode
#define GDK_NOTE(type, action)
gpointer g_malloc(gulong n_bytes)
GdkDrawable * gdk_drawable_ref(GdkDrawable *drawable)
gboolean gdk_color_white(GdkColormap *colormap, GdkColor *color)
static void gdk_win32_gc_get_values(GdkGC *gc, GdkGCValues *values)
G_BEGIN_DECLS typedef char gchar
#define IS_WIN_NT(dwVersion)
HDC gdk_win32_hdc_get(GdkDrawable *drawable, GdkGC *gc, GdkGCValuesMask usage)
COLORREF gdk_colormap_color(GdkColormapPrivateWin32 *colormap_private, gulong pixel)
void gdk_font_unref(GdkFont *font)
gchar * gdk_font_full_name_get(GdkFont *font)
guint gdk_gc_set_text_align(GdkGC *gc, guint tAlign)
#define g_return_if_fail(expr)
GdkGC * gdk_gc_new(GdkDrawable *drawable)
#define g_new(struct_type, n_structs)
GdkBitmap * gdk_bitmap_create_from_data(GdkWindow *window, const gchar *data, gint width, gint height)
HDC gdk_gc_predraw(GdkDrawable *drawable, GdkGCPrivate *gc_private, GdkGCValuesMask usage)
void gdk_win32_hdc_release(GdkDrawable *drawable, GdkGC *gc, GdkGCValuesMask usage)
gboolean gdk_color_black(GdkColormap *colormap, GdkColor *color)
static void gdk_win32_gc_set_values(GdkGC *gc, GdkGCValues *values, GdkGCValuesMask values_mask)
GdkColormap * gdk_colormap_get_system(void)
void gdk_gc_set_clip_rectangle(GdkGC *gc, GdkRectangle *rectangle)
static void gdk_win32_gc_destroy(GdkGC *gc)
#define WIN32_GDI_FAILED(api)
static void usage(const char *argv0)
void g_free(gpointer mem)
void gdk_gc_set_clip_region(GdkGC *gc, GdkRegion *region)
GdkGCValuesMask values_mask
static GdkGCClass gdk_win32_gc_class
static void gdk_win32_gc_values_to_win32values(GdkGCValues *values, GdkGCValuesMask mask, GdkGCWin32Data *data)
void gdk_gc_copy(GdkGC *dst_gc, GdkGC *src_gc)
static RooMathCoreReg dummy
HRGN BitmapToRegion(HBITMAP hBmp)
void gdk_font_full_name_free(gchar *name)
gpointer g_realloc(gpointer mem, gulong n_bytes)
GdkFont * gdk_font_ref(GdkFont *font)
virtual void SetTextColor(Color_t cindex)
#define GDK_DRAWABLE_TYPE(d)
GdkSubwindowMode subwindow_mode
GdkGC * gdk_gc_alloc(void)
void gdk_drawable_unref(GdkDrawable *drawable)
#define GDK_DRAWABLE_XID(win)
static void gdk_win32_gc_set_dashes(GdkGC *gc, gint dash_offset, gchar dash_list[], gint n)
void g_print(const gchar *format,...)
GdkGC * _gdk_win32_gc_new(GdkDrawable *drawable, GdkGCValues *values, GdkGCValuesMask mask)
static void predraw_set_foreground(GdkGCWin32Data *data, GdkColormapPrivateWin32 *colormap_private)
void gdk_draw_drawable(GdkDrawable *drawable, GdkGC *gc, GdkDrawable *src, gint xsrc, gint ysrc, gint xdest, gint ydest, gint width, gint height)
void gdk_gc_postdraw(GdkDrawable *drawable, GdkGCPrivate *gc_private, GdkGCValuesMask usage)
void predraw_set_background(GdkGCWin32Data *data, GdkColormapPrivateWin32 *colormap_private)
#define GDK_GC_WIN32DATA(gc)