⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdkgeometry-x11.c

📁 linux下电话本所依赖的一些图形库
💻 C
📖 第 1 页 / 共 3 页
字号:
  parent = (GdkWindowObject *)wrapper->parent;  while (parent && parent->window_type == GDK_WINDOW_CHILD)    {      GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (parent->impl);            tmp_clip.x = - clip_xoffset;      tmp_clip.y = - clip_yoffset;      tmp_clip.width = impl->width;      tmp_clip.height = impl->height;      gdk_rectangle_intersect (&parent_pos->clip_rect, &tmp_clip, &parent_pos->clip_rect);      parent_pos->x += parent->x;      parent_pos->y += parent->y;      parent_pos->x11_x += impl->position_info.x;      parent_pos->x11_y += impl->position_info.y;      clip_xoffset += parent->x;      clip_yoffset += parent->y;      parent = (GdkWindowObject *)parent->parent;    }}static voidgdk_window_premove (GdkWindow          *window,		    GdkWindowParentPos *parent_pos){  GdkWindowImplX11 *impl;  GdkWindowObject *obj;  GdkXPositionInfo new_info;  GList *tmp_list;  gint d_xoffset, d_yoffset;  GdkWindowParentPos this_pos;  obj = (GdkWindowObject *) window;  impl = GDK_WINDOW_IMPL_X11 (obj->impl);    gdk_window_compute_position (impl, parent_pos, &new_info);  gdk_window_clip_changed (window, &impl->position_info.clip_rect, &new_info.clip_rect);  this_pos.x = parent_pos->x + obj->x;  this_pos.y = parent_pos->y + obj->y;  this_pos.x11_x = parent_pos->x11_x + new_info.x;  this_pos.x11_y = parent_pos->x11_y + new_info.y;  this_pos.clip_rect = new_info.clip_rect;  if (impl->position_info.mapped && !new_info.mapped)    XUnmapWindow (GDK_DRAWABLE_XDISPLAY (window), GDK_DRAWABLE_XID (window));  d_xoffset = new_info.x_offset - impl->position_info.x_offset;  d_yoffset = new_info.y_offset - impl->position_info.y_offset;    if (d_xoffset != 0 || d_yoffset != 0)    {      GdkRectangle new_position;      if (d_xoffset < 0 || d_yoffset < 0)	gdk_window_queue_translation (window, MIN (d_xoffset, 0), MIN (d_yoffset, 0));      compute_intermediate_position (&impl->position_info, &new_info, d_xoffset, d_yoffset,				     &new_position);      XMoveResizeWindow (GDK_DRAWABLE_XDISPLAY (window),			 GDK_DRAWABLE_XID (window),			 new_position.x, new_position.y, new_position.width, new_position.height);    }  tmp_list = obj->children;  while (tmp_list)    {      gdk_window_premove (tmp_list->data, &this_pos);      tmp_list = tmp_list->next;    }}static voidgdk_window_postmove (GdkWindow          *window,		     GdkWindowParentPos *parent_pos){  GdkWindowImplX11 *impl;  GdkWindowObject *obj;  GdkXPositionInfo new_info;  GList *tmp_list;  gint d_xoffset, d_yoffset;  GdkWindowParentPos this_pos;  obj = (GdkWindowObject *) window;  impl = GDK_WINDOW_IMPL_X11 (obj->impl);    gdk_window_compute_position (impl, parent_pos, &new_info);  this_pos.x = parent_pos->x + obj->x;  this_pos.y = parent_pos->y + obj->y;  this_pos.x11_x = parent_pos->x11_x + new_info.x;  this_pos.x11_y = parent_pos->x11_y + new_info.y;  this_pos.clip_rect = new_info.clip_rect;  d_xoffset = new_info.x_offset - impl->position_info.x_offset;  d_yoffset = new_info.y_offset - impl->position_info.y_offset;    if (d_xoffset != 0 || d_yoffset != 0)    {      if (d_xoffset > 0 || d_yoffset > 0)	gdk_window_queue_translation (window, MAX (d_xoffset, 0), MAX (d_yoffset, 0));	      XMoveResizeWindow (GDK_DRAWABLE_XDISPLAY (window),			 GDK_DRAWABLE_XID (window),			 new_info.x, new_info.y, new_info.width, new_info.height);    }  if (!impl->position_info.mapped && new_info.mapped && GDK_WINDOW_IS_MAPPED (obj))    XMapWindow (GDK_DRAWABLE_XDISPLAY (window), GDK_DRAWABLE_XID (window));  if (impl->position_info.no_bg)    _gdk_x11_window_tmp_reset_bg (window, FALSE);  impl->position_info = new_info;  tmp_list = obj->children;  while (tmp_list)    {      gdk_window_postmove (tmp_list->data, &this_pos);      tmp_list = tmp_list->next;    }}static Boolexpose_serial_predicate (Display *xdisplay,			 XEvent  *xev,			 XPointer arg){  gulong *serial = (gulong *)arg;  if (xev->xany.type == Expose)    *serial = MIN (*serial, xev->xany.serial);  return False;}/* Find oldest possible serial for an outstanding expose event */static gulongfind_current_serial (Display *xdisplay){  XEvent xev;  gulong serial = NextRequest (xdisplay);    XSync (xdisplay, False);  XCheckIfEvent (xdisplay, &xev, expose_serial_predicate, (XPointer)&serial);  return serial;}static voidqueue_delete_link (GQueue *queue,		   GList  *link){  if (queue->tail == link)    queue->tail = link->prev;    queue->head = g_list_remove_link (queue->head, link);  g_list_free_1 (link);  queue->length--;}static voidqueue_item_free (GdkWindowQueueItem *item){  if (item->window)    {      g_object_remove_weak_pointer (G_OBJECT (item->window),				    (gpointer *)&(item->window));    }    if (item->type == GDK_WINDOW_QUEUE_ANTIEXPOSE)    gdk_region_destroy (item->u.antiexpose.area);    g_free (item);}static voidgdk_window_queue (GdkWindow          *window,		  GdkWindowQueueItem *item){  GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (GDK_WINDOW_DISPLAY (window));    if (!display_x11->translate_queue)    display_x11->translate_queue = g_queue_new ();  /* Keep length of queue finite by, if it grows too long,   * figuring out the latest relevant serial and discarding   * irrelevant queue items.   */  if (display_x11->translate_queue->length >= 64)    {      gulong serial = find_current_serial (GDK_WINDOW_XDISPLAY (window));      GList *tmp_list = display_x11->translate_queue->head;            while (tmp_list)	{	  GdkWindowQueueItem *item = tmp_list->data;	  GList *next = tmp_list->next;	  	  if (serial > item->serial)	    {	      queue_delete_link (display_x11->translate_queue, tmp_list);	      queue_item_free (item);	    }	  tmp_list = next;	}    }  /* Catch the case where someone isn't processing events and there   * is an event stuck in the event queue with an old serial:   * If we can't reduce the queue length by the above method,   * discard anti-expose items. (We can't discard translate   * items    */  if (display_x11->translate_queue->length >= 64)    {      GList *tmp_list = display_x11->translate_queue->head;            while (tmp_list)	{	  GdkWindowQueueItem *item = tmp_list->data;	  GList *next = tmp_list->next;	  	  if (item->type == GDK_WINDOW_QUEUE_ANTIEXPOSE)	    {	      queue_delete_link (display_x11->translate_queue, tmp_list);	      queue_item_free (item);	    }	  tmp_list = next;	}    }  item->window = window;  item->serial = NextRequest (GDK_WINDOW_XDISPLAY (window));    g_object_add_weak_pointer (G_OBJECT (window),			     (gpointer *)&(item->window));  g_queue_push_tail (display_x11->translate_queue, item);}static voidgdk_window_queue_translation (GdkWindow *window,			      gint       dx,			      gint       dy){  GdkWindowQueueItem *item = g_new (GdkWindowQueueItem, 1);  item->type = GDK_WINDOW_QUEUE_TRANSLATE;  item->u.translate.dx = dx;  item->u.translate.dy = dy;  gdk_window_queue (window, item);}gboolean_gdk_windowing_window_queue_antiexpose (GdkWindow *window,					GdkRegion *area){  GdkWindowQueueItem *item = g_new (GdkWindowQueueItem, 1);  item->type = GDK_WINDOW_QUEUE_ANTIEXPOSE;  item->u.antiexpose.area = area;  gdk_window_queue (window, item);  return TRUE;}void_gdk_window_process_expose (GdkWindow    *window,			    gulong        serial,			    GdkRectangle *area){  GdkWindowImplX11 *impl;  GdkRegion *invalidate_region = gdk_region_rectangle (area);  GdkRegion *clip_region;  GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (GDK_WINDOW_DISPLAY (window));  impl = GDK_WINDOW_IMPL_X11 (GDK_WINDOW_OBJECT (window)->impl);        if (display_x11->translate_queue)    {      GList *tmp_list = display_x11->translate_queue->head;            while (tmp_list)	{	  GdkWindowQueueItem *item = tmp_list->data;	  tmp_list = tmp_list->next;	  	  if (serial < item->serial)	    {	      if (item->window == window)		{		  if (item->type == GDK_WINDOW_QUEUE_TRANSLATE)		    gdk_region_offset (invalidate_region, item->u.translate.dx, item->u.translate.dy);		  else		/* anti-expose */		    gdk_region_subtract (invalidate_region, item->u.antiexpose.area);		}	    }	  else	    {	      queue_delete_link (display_x11->translate_queue, 				 display_x11->translate_queue->head);	      queue_item_free (item);	    }	}    }  clip_region = gdk_region_rectangle (&impl->position_info.clip_rect);  gdk_region_intersect (invalidate_region, clip_region);  if (!gdk_region_empty (invalidate_region))    gdk_window_invalidate_region (window, invalidate_region, FALSE);    gdk_region_destroy (invalidate_region);  gdk_region_destroy (clip_region);}static voidgdk_window_clip_changed (GdkWindow *window, GdkRectangle *old_clip, GdkRectangle *new_clip){  GdkWindowImplX11 *impl;  GdkWindowObject *obj;  GdkRegion *old_clip_region;  GdkRegion *new_clip_region;    if (((GdkWindowObject *)window)->input_only)    return;  obj = (GdkWindowObject *) window;  impl = GDK_WINDOW_IMPL_X11 (obj->impl);    old_clip_region = gdk_region_rectangle (old_clip);  new_clip_region = gdk_region_rectangle (new_clip);  /* We need to update this here because gdk_window_invalidate_region makes   * use if it (through gdk_drawable_get_visible_region   */  impl->position_info.clip_rect = *new_clip;    /* Trim invalid region of window to new clip rectangle   */  if (obj->update_area)    gdk_region_intersect (obj->update_area, new_clip_region);  /* Invalidate newly exposed portion of window   */  gdk_region_subtract (new_clip_region, old_clip_region);  if (!gdk_region_empty (new_clip_region))    {      _gdk_x11_window_tmp_unset_bg (window, FALSE);;      gdk_window_invalidate_region (window, new_clip_region, FALSE);    }  gdk_region_destroy (new_clip_region);  gdk_region_destroy (old_clip_region);}#define __GDK_GEOMETRY_X11_C__#include "gdkaliasdef.c"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -