MS Windows engine: draw elements in the right place.

Work in progress, still remains to be solved the problem of clipping.
This commit is contained in:
Martin Schlemmer
2010-09-03 22:18:21 +02:00
committed by Fridrich Štrba
parent 3b63ef0ac6
commit e6da33a302
2 changed files with 28 additions and 49 deletions

View File

@ -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;
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;
dc_info_out->data = 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;
x_offset = -x_off;
y_offset = -y_off;
cr = gdk_cairo_create (window);
crs = cairo_get_target (cr);
x_offset = 0;
y_offset = 0;
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;
}

View File

@ -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,