Exemple #1
0
HDC
get_window_dc (GtkStyle *style,
	       GdkWindow *window,
	       GtkStateType state_type,
	       XpDCInfo *dc_info_out,
	       gint x, gint y, gint width, gint height,
	       RECT *rect_out)
{
  GdkDrawable *drawable = NULL;
  GdkGC *gc = style->dark_gc[state_type];
  gint x_offset, y_offset;
  
  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)
    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;
  
  dc_info_out->drawable = drawable;
  dc_info_out->gc = gc;
  dc_info_out->x_offset = x_offset;
  dc_info_out->y_offset = y_offset;
  
  return gdk_win32_hdc_get (drawable, gc, 0);
}
Exemple #2
0
/* Handle a draw/expose by finding the paragraphs that intersect
 * the region and reexposing them.
 */
void
draw (GtkWidget *layout, GdkRectangle *area)
{
  GList *tmp_list;
  guint height = 0;
  HDC hdc;
  const GdkGCValuesMask mask = GDK_GC_FOREGROUND|GDK_GC_BACKGROUND|GDK_GC_FONT;
  
  gdk_draw_rectangle (GTK_LAYOUT (layout)->bin_window,
		      layout->style->base_gc[layout->state],
		      TRUE,
		      area->x, area->y, 
		      area->width, area->height);
  
  gdk_gc_set_clip_rectangle (layout->style->text_gc[layout->state], area);

  hdc = gdk_win32_hdc_get (GTK_LAYOUT (layout)->bin_window,
			   layout->style->text_gc[GTK_STATE_NORMAL],
			   mask);
  tmp_list = paragraphs;
  while (tmp_list &&
	 height < area->y + area->height + GTK_LAYOUT (layout)->yoffset)
    {
      Paragraph *para = tmp_list->data;
      tmp_list = tmp_list->next;
      
      if (height + para->height >= GTK_LAYOUT (layout)->yoffset + area->y)
	pango_win32_render_layout (hdc, para->layout,
				   0, height - GTK_LAYOUT (layout)->yoffset);
      height += para->height;
    }

  gdk_win32_hdc_release (GTK_LAYOUT (layout)->bin_window,
			 layout->style->text_gc[GTK_STATE_NORMAL],
			 mask);
  gdk_gc_set_clip_rectangle (layout->style->text_gc[layout->state], NULL);

  if (highlight_para)
    xor_char (layout, area, highlight_para, highlight_offset);
}