📄 gdkwindow-fb.c
字号:
gint x; guchar bit_mask; guchar *src; g_return_val_if_fail(bitmap != NULL, NULL); g_return_val_if_fail(GDK_IS_PIXMAP(bitmap), NULL); private = GDK_DRAWABLE_IMPL_FBDATA (bitmap); g_return_val_if_fail(private->depth == 1, NULL); region = gdk_region_new(); rect.height = 1; in_rect = FALSE; /* Haven't started a rectangle yet */ for (rect.y = 0; rect.y < private->height; (rect.y)++) { src = private->mem + rect.y * private->rowstride; bit_mask = 1; for (x = 0; x < private->width; x++) { if ((*src & bit_mask) && !in_rect) { /* Start of rect */ in_rect = TRUE; rect.x = x; } else if (!(*src & bit_mask) && in_rect) { /* End of rect */ in_rect = FALSE; rect.width = x - rect.x; gdk_region_union_with_rect (region, &rect); } if (bit_mask == 1<<7) { bit_mask = 1; src++; } else bit_mask <<= 1; } if (in_rect) { /* Past end of line */ in_rect = FALSE; rect.width = x - rect.x; gdk_region_union_with_rect (region, &rect); } } return region;}GdkRegion *gdk_fb_window_peek_shape (GdkDrawable *window, gint *dx, gint *dy){ gint x, y; if (!GDK_IS_WINDOW (window)) return NULL; if (GDK_WINDOW_IMPL_FBDATA (window)->shape == NULL) return NULL; x = y = 0; while (GDK_WINDOW_IMPL_FBDATA (window)->shape == GDK_FB_USE_CHILD_SHAPE) { GList *children; children = ((GdkWindowObject*)window)->children; if (children) { window = (GdkDrawable *)children->data; x += GDK_WINDOW_P(window)->x; y += GDK_WINDOW_P(window)->y; } else return NULL; } *dx = x; *dy = y; return GDK_WINDOW_IMPL_FBDATA (window)->shape;}GdkRegion *gdk_fb_window_get_abs_shape (GdkDrawable *window){ GdkRegion *shape; if (!GDK_IS_WINDOW (window)) return NULL; if (GDK_WINDOW_IMPL_FBDATA (window)->shape == NULL) return NULL; if (GDK_WINDOW_IMPL_FBDATA (window)->shape == GDK_FB_USE_CHILD_SHAPE) { GList *children; children = ((GdkWindowObject*)window)->children; if (children) return gdk_fb_window_get_abs_shape ((GdkDrawable *)children->data); else return NULL; } shape = gdk_region_copy (GDK_WINDOW_IMPL_FBDATA (window)->shape); gdk_region_offset (shape, GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x, GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y); return shape;}static void_gdk_window_shape_combine_region (GdkWindow *window, GdkRegion *shape, gint x, gint y){ GdkWindowFBData *private; GdkDrawableFBData *drawable_private; GdkRegion *old_region = NULL; GdkRegion *new_region = NULL; GdkRectangle rect; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); private = GDK_WINDOW_IMPL_FBDATA (window); drawable_private = GDK_DRAWABLE_IMPL_FBDATA (window); if (GDK_WINDOW_IS_MAPPED (window)) { old_region = gdk_fb_window_get_abs_shape (window); if (old_region == NULL) { rect.x = drawable_private->llim_x; rect.y = drawable_private->llim_y; rect.width = drawable_private->lim_x - rect.x; rect.height = drawable_private->lim_y - rect.y; old_region = gdk_region_rectangle (&rect); } } if (private->shape && private->shape != GDK_FB_USE_CHILD_SHAPE) gdk_region_destroy (private->shape); if (shape) { private->shape = shape; if (shape != GDK_FB_USE_CHILD_SHAPE) gdk_region_offset (private->shape, x, y); } else private->shape = NULL; if (GDK_WINDOW_IS_MAPPED (window)) { new_region = gdk_fb_window_get_abs_shape (window); if (new_region == NULL) { rect.x = drawable_private->llim_x; rect.y = drawable_private->llim_y; rect.width = drawable_private->lim_x - rect.x; rect.height = drawable_private->lim_y - rect.y; new_region = gdk_region_rectangle (&rect); } gdk_region_subtract (old_region, new_region); gdk_region_destroy (new_region); gdk_window_invalidate_region (_gdk_parent_root, old_region, TRUE); gdk_region_destroy (old_region); }}voidgdk_window_shape_combine_mask (GdkWindow *window, GdkBitmap *mask, gint x, gint y){ _gdk_window_shape_combine_region (window, (mask == GDK_FB_USE_CHILD_SHAPE)? GDK_FB_USE_CHILD_SHAPE : mask ? gdk_fb_region_create_from_bitmap (mask) : NULL, x, y);}voidgdk_window_shape_combine_region (GdkWindow *window, GdkRegion *shape, gint x, gint y){ _gdk_window_shape_combine_region (window, gdk_region_copy (shape), x, y);}voidgdk_window_set_override_redirect (GdkWindow *window, gboolean override_redirect){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* N/A */}voidgdk_window_set_accept_focus (GdkWindow *window, gboolean accept_focus){ GdkWindowObject *private; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); private = (GdkWindowObject *)window; accept_focus = accept_focus != FALSE; if (private->accept_focus != accept_focus) private->accept_focus = accept_focus;}voidgdk_window_set_focus_on_map (GdkWindow *window, gboolean focus_on_map){ GdkWindowObject *private; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); private = (GdkWindowObject *)window; focus_on_map = focus_on_map != FALSE; if (private->focus_on_map != focus_on_map) private->focus_on_map = focus_on_map;}void gdk_window_set_icon (GdkWindow *window, GdkWindow *icon_window, GdkPixmap *pixmap, GdkBitmap *mask){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* N/A */}void gdk_window_set_icon_name (GdkWindow *window, const gchar * name){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* N/A */}void gdk_window_set_group (GdkWindow *window, GdkWindow *leader){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); g_return_if_fail (leader != NULL); g_return_if_fail (GDK_IS_WINDOW (leader)); /* N/A */}voidgdk_fb_window_set_child_handler (GdkWindow *window, GdkWindowChildChanged changed, GdkWindowChildGetPos get_pos, gpointer user_data){ GdkWindowChildHandlerData *data; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); data = g_new (GdkWindowChildHandlerData, 1); data->changed = changed; data->get_pos = get_pos; data->user_data = user_data; g_object_set_data_full (G_OBJECT (window), "gdk-window-child-handler", data, (GDestroyNotify) g_free);}voidgdk_window_set_decorations (GdkWindow *window, GdkWMDecoration decorations){ GdkWMDecoration *dec; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); dec = g_new (GdkWMDecoration, 1); *dec = decorations; g_object_set_data_full (G_OBJECT (window), "gdk-window-decorations", dec, (GDestroyNotify) g_free);}gbooleangdk_window_get_decorations(GdkWindow *window, GdkWMDecoration *decorations){ GdkWMDecoration *dec; g_return_val_if_fail (window != NULL, FALSE); g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE); dec = g_object_get_data (G_OBJECT (window), "gdk-window-decorations"); if (dec) { *decorations = *dec; return TRUE; } return FALSE;}voidgdk_window_set_functions (GdkWindow *window, GdkWMFunction functions){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* N/A */}voidgdk_window_set_child_shapes (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); }voidgdk_window_merge_child_shapes (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); }/************************************************************* * gdk_window_set_static_gravities: * Set the bit gravity of the given window to static, * and flag it so all children get static subwindow * gravity. * arguments: * window: window for which to set static gravity * use_static: Whether to turn static gravity on or off. * results: * Does the XServer support static gravity? *************************************************************/gboolean gdk_window_set_static_gravities (GdkWindow *window, gboolean use_static){ g_return_val_if_fail (window != NULL, FALSE); g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE); return TRUE;}void_gdk_windowing_window_get_offsets (GdkWindow *window, gint *x_offset, gint *y_offset){ *x_offset = *y_offset = 0;}gboolean_gdk_windowing_window_queue_antiexpose (GdkWindow *window, GdkRegion *area){ return FALSE;}voidgdk_window_stick (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_unstick (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_maximize (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window)); gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_MAXIMIZED);}voidgdk_window_unmaximize (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window)); gdk_synthesize_window_state (window, GDK_WINDOW_STATE_MAXIMIZED, 0);}voidgdk_window_iconify (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); g_warning ("gdk_window_iconify() not implemented.\n");}voidgdk_window_deiconify (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* g_warning ("gdk_window_deiconify() not implemented.\n");*/}voidgdk_window_fullscreen (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window)); g_warning ("gdk_window_fullscreen() not implemented.\n");}voidgdk_window_unfullscreen (GdkWindow *window){ g_return_if_fail (GDK_IS_WINDOW (window)); /* g_warning ("gdk_window_unfullscreen() not implemented.\n");*/}voidgdk_window_set_keep_above (GdkWindow *window, gboolean setting){ g_return_if_fail (GDK_IS_WINDOW (window)); g_warning ("gdk_window_set_keep_above() not implemented.\n");}voidgdk_window_set_keep_below (GdkWindow *window, gboolean setting){ g_return_if_fail (GDK_IS_WINDOW (window)); g_warning ("gdk_window_set_keep_below() not implemented.\n");}voidgdk_window_focus (GdkWindow *window, guint32 timestamp){ g_return_if_fail (GDK_IS_WINDOW (window)); g_warning ("gdk_window_focus() not implemented.\n");}voidgdk_window_set_type_hint (GdkWindow *window, GdkWindowTypeHint hint){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_set_modal_hint (GdkWindow *window, gboolean modal){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_set_skip_taskbar_hint (GdkWindow *window, gboolean skips_taskbar){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_set_skip_pager_hint (GdkWindow *window, gboolean skips_pager){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_begin_resize_drag (GdkWindow *window, GdkWindowEdge edge, gint button, gint root_x, gint root_y, guint32 timestamp){ g_return_if_fail (GDK_IS_WINDOW (window)); }voidgdk_window_begin_move_drag (GdkWindow *window, gint button, gint root_x, gint root_y, guint32 timestamp){ g_return_if_fail (GDK_IS_WINDOW (window));}voidgdk_window_set_icon_list (GdkWindow *window, GList *pixbufs){ /* We don't support icons right now */}/* No need to care about frames. Decoration is done by GtkWindow */voidgdk_window_get_frame_extents (GdkWindow *window, GdkRectangle *rect){ g_return_if_fail (window != NULL); rect->x = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x; rect->y = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y; rect->width = GDK_DRAWABLE_IMPL_FBDATA (window)->width; rect->height = GDK_DRAWABLE_IMPL_FBDATA (window)->height;}GdkWindow*gdk_window_foreign_new_for_display (GdkDisplay *display, GdkNativeWindow anid){ return (GdkWindow*) gdk_drawable_ref ((GdkDrawable *)anid);}GdkWindow*gdk_window_lookup (GdkNativeWindow anid){ return (GdkWindow*) (anid);}GdkWindow *gdk_window_lookup_for_display (GdkDisplay *display, GdkNativeWindow anid){ g_return_val_if_fail (display == gdk_display_get_default(), NULL); return (GdkWindow*) (anid);}voidgdk_window_enable_synchronized_configure (GdkWindow *window){}voidgdk_window_configure_finished (GdkWindow *window){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -