[gtk+] MS Windows engine: draw elements in the right place. Work in progress, still remains to be solved th
- From: Fridrich Strba <strba src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] MS Windows engine: draw elements in the right place. Work in progress, still remains to be solved th
- Date: Fri, 3 Sep 2010 20:21:57 +0000 (UTC)
commit e6da33a302a51783777e8da41c680cdf4dc783eb
Author: Martin Schlemmer <11285613 nwu ac za>
Date: Fri Sep 3 22:18:21 2010 +0200
MS Windows engine: draw elements in the right place.
Work in progress, still remains to be solved the problem of clipping.
modules/engines/ms-windows/xp_theme.c | 66 +++++++++++++-------------------
modules/engines/ms-windows/xp_theme.h | 11 +-----
2 files changed, 28 insertions(+), 49 deletions(-)
---
diff --git a/modules/engines/ms-windows/xp_theme.c b/modules/engines/ms-windows/xp_theme.c
index d23dfea..258f418 100755
--- a/modules/engines/ms-windows/xp_theme.c
+++ b/modules/engines/ms-windows/xp_theme.c
@@ -900,66 +900,54 @@ get_window_dc (GtkStyle *style,
gint x, gint y, gint width, gint height,
RECT *rect_out)
{
-#if 0
- GdkDrawable *drawable = NULL;
- GdkGC *gc = style->dark_gc[state_type];
- gint x_offset, y_offset;
-
- dc_info_out->data = NULL;
+ cairo_t *cr;
+ cairo_surface_t *surface;
+ HDC dc;
+ gint x_offset = 0, y_offset = 0;
+ double x_off, y_off;
+
+ dc_info_out->cr = NULL;
+ dc_info_out->dc = NULL;
- drawable = gdk_win32_begin_direct_draw_libgtk_only (window,
- gc, &dc_info_out->data,
- &x_offset, &y_offset);
- if (!drawable)
+ cr = gdk_cairo_create (window);
+ if (!cr)
return NULL;
- rect_out->left = x - x_offset;
- rect_out->top = y - y_offset;
- rect_out->right = rect_out->left + width;
- rect_out->bottom = rect_out->top + height;
+ surface = cairo_get_target (cr);
+ cairo_surface_get_device_offset (surface, &x_off, &y_off);
+ cairo_surface_flush (surface);
- dc_info_out->drawable = drawable;
- dc_info_out->gc = gc;
- dc_info_out->x_offset = x_offset;
- dc_info_out->y_offset = y_offset;
+ dc = cairo_win32_surface_get_dc (surface);
+ if (!dc)
+ return NULL;
- return gdk_win32_hdc_get (drawable, gc, 0);
-#else
- cairo_t *cr;
- cairo_surface_t *crs;
- gint x_offset, y_offset;
-
- cr = gdk_cairo_create (window);
- crs = cairo_get_target (cr);
- x_offset = 0;
- y_offset = 0;
+ x_offset = -x_off;
+ y_offset = -y_off;
-
- dc_info_out->data = NULL;
-
rect_out->left = x - x_offset;
rect_out->top = y - y_offset;
rect_out->right = rect_out->left + width;
rect_out->bottom = rect_out->top + height;
dc_info_out->cr = cr;
+ dc_info_out->dc = dc;
dc_info_out->x_offset = x_offset;
dc_info_out->y_offset = y_offset;
- return cairo_win32_surface_get_dc (crs);
-#endif
+ return dc;
}
void
release_window_dc (XpDCInfo *dc_info)
{
-#if 0
- gdk_win32_hdc_release (dc_info->drawable, dc_info->gc, 0);
+ if (!dc_info->cr || !dc_info->dc)
+ return;
- gdk_win32_end_direct_draw_libgtk_only (dc_info->data);
-#else
+ ReleaseDC (NULL, dc_info->dc);
cairo_destroy (dc_info->cr);
-#endif
+
+ dc_info->cr = NULL;
+ dc_info->dc = NULL;
}
gboolean
@@ -1014,7 +1002,7 @@ xp_theme_draw (GdkWindow *win, XpThemeElement element, GtkStyle *style,
part_state, &rect, pClip);
release_window_dc (&dc_info);
-
+
return TRUE;
}
diff --git a/modules/engines/ms-windows/xp_theme.h b/modules/engines/ms-windows/xp_theme.h
index 4e2a1f1..0ee9830 100755
--- a/modules/engines/ms-windows/xp_theme.h
+++ b/modules/engines/ms-windows/xp_theme.h
@@ -115,19 +115,10 @@ typedef enum
typedef struct
{
-#if 0
- GdkDrawable *drawable;
- GdkGC *gc;
-#else
cairo_t *cr;
- cairo_surface_t *crs;
-#endif
-
+ HDC dc;
gint x_offset;
gint y_offset;
-
- /*< private >*/
- gpointer data;
} XpDCInfo;
HDC get_window_dc (GtkStyle *style,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]