示例#1
0
/* Got when an area previously obscured need to be redrawn.
 * Needs GDK_EXPOSURE_MASK.
 * Gone with gtk+-3.0 or better replaced by "draw".
 */
static gboolean
canvas_expose_event (GtkWidget      *widget,
		     GdkEventExpose *event,
		     DDisplay       *ddisp)
{
  ddisplay_add_display_area (ddisp,
			     event->area.x, event->area.y,
			     event->area.x + event->area.width,
			     event->area.y + event->area.height);
  ddisplay_flush(ddisp);
  return FALSE;
}
示例#2
0
文件: display.c 项目: chebizarro/dia
void
ddisplay_add_update(DDisplay *ddisp, const Rectangle *rect)
{
  Rectangle *r;
  int top,bottom,left,right;
  Rectangle *visible;
  int width, height;

  if (!ddisp->renderer)
    return; /* can happen at creation time of the diagram */
  width = dia_renderer_get_width_pixels (ddisp->renderer);
  height = dia_renderer_get_height_pixels (ddisp->renderer);

  if (!rectangle_intersects(rect, &ddisp->visible))
    return;

  /* Temporarily just do a union of all rectangles: */
  if (ddisp->update_areas==NULL) {
    r = g_new(Rectangle,1);
    *r = *rect;
    rectangle_intersection(r, &ddisp->visible);
    ddisp->update_areas = g_slist_prepend(ddisp->update_areas, r);
  } else {
    r = (Rectangle *) ddisp->update_areas->data;
    rectangle_union(r, rect);
    rectangle_intersection(r, &ddisp->visible);
  }
  
  visible = &ddisp->visible;
  left = floor( (r->left - visible->left)  * (real)width /
		(visible->right - visible->left) ) - 1;
  top = floor( (r->top - visible->top)  * (real)height /
	       (visible->bottom - visible->top) ) - 1; 
  right = ceil( (r->right - visible->left)  * (real)width /
		(visible->right - visible->left) ) + 1;
  bottom = ceil( (r->bottom - visible->top)  * (real)height /
		 (visible->bottom - visible->top) ) + 1;

  ddisplay_add_display_area(ddisp,
			    left, top, 
			    right, bottom);
}