📄 gdkwindow-fb.c
字号:
{ gdk_fb_window_move_resize (window, x, y, width, height, TRUE);}voidgdk_window_reparent (GdkWindow *window, GdkWindow *new_parent, gint x, gint y){ GdkWindowObject *window_private; GdkWindowObject *parent_private; GdkWindowObject *old_parent_private; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); g_return_if_fail (new_parent != NULL); g_return_if_fail (GDK_IS_WINDOW (new_parent)); if (!new_parent) new_parent = _gdk_parent_root; window_private = (GdkWindowObject*) window; old_parent_private = (GdkWindowObject*)window_private->parent; parent_private = (GdkWindowObject*) new_parent; g_assert(GDK_DRAWABLE_IMPL_FBDATA (window_private)->colormap); window_private->parent = (GdkWindowObject *)new_parent; if (old_parent_private) old_parent_private->children = g_list_remove (old_parent_private->children, window); parent_private->children = g_list_prepend (parent_private->children, window); if (GDK_WINDOW_IS_MAPPED (window_private)) { GdkRectangle r; GdkRegion *region; r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x; r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y; r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - r.x; r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - r.y; region = gdk_region_rectangle (&r); recompute_drawable ((GdkDrawable *)window); r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x; r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y; r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - r.x; r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - r.y; gdk_region_union_with_rect (region, &r); gdk_window_invalidate_region (_gdk_parent_root, region, TRUE); gdk_region_destroy (region); }}void_gdk_windowing_window_clear_area (GdkWindow *window, gint x, gint y, gint width, gint height){ GdkPixmap *bgpm; GdkWindow *relto; if (GDK_WINDOW_P (window)->input_only) return; bgpm = GDK_WINDOW_P (window)->bg_pixmap; if (width == 0) width = GDK_DRAWABLE_IMPL_FBDATA (window)->width - x; if (height == 0) height = GDK_DRAWABLE_IMPL_FBDATA (window)->height - y; relto = window; while ((bgpm == GDK_PARENT_RELATIVE_BG) && relto) { relto = (GdkWindow *)GDK_WINDOW_P(relto)->parent; bgpm = GDK_WINDOW_P (relto)->bg_pixmap; } if (bgpm && bgpm != GDK_NO_BG) { int curx, cury; int xstep, ystep; int xtrans, ytrans; GdkFBDrawingContext fbdc; gdk_fb_drawing_context_init (&fbdc, GDK_DRAWABLE_IMPL (window), NULL, FALSE, TRUE); xtrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_x; ytrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_y; for (cury = y; cury < (y + height); cury += ystep) { int drawh = (cury + ytrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height; ystep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height - drawh; ystep = MIN (ystep, y + height - cury); for (curx = x; curx < (x + width); curx += xstep) { int draww = (curx + xtrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width; xstep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width - draww; xstep = MIN (xstep, x + width - curx); gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL (window), _gdk_fb_screen_gc, GDK_DRAWABLE_IMPL (bgpm), &fbdc, draww, drawh, curx, cury, xstep, ystep); } } gdk_fb_drawing_context_finalize (&fbdc); } else if (!bgpm) { if (relto == window) gdk_draw_rectangle (window, _gdk_fb_screen_gc, TRUE, x, y, width, height); else { /* GDK_PARENT_RELATIVE_BG, but no pixmap, get the color from the parent window. */ GdkGC *gc; GdkGCValues values; values.foreground = GDK_WINDOW_P (relto)->bg_color; gc = gdk_gc_new_with_values (window, &values, GDK_GC_FOREGROUND); gdk_draw_rectangle (window, gc, TRUE, x, y, width, height); gdk_gc_unref (gc); } }}/* What's the diff? */void_gdk_windowing_window_clear_area_e (GdkWindow *window, gint x, gint y, gint width, gint height){ _gdk_windowing_window_clear_area (window, x, y, width, height);}static voidgdk_fb_window_raise (GdkWindow *window){ GdkWindowObject *parent; parent = GDK_WINDOW_OBJECT (window)->parent; parent->children = g_list_remove (parent->children, window); parent->children = g_list_prepend (parent->children, window);}static voidgdk_fb_window_lower (GdkWindow *window){ GdkWindowObject *parent; parent = GDK_WINDOW_OBJECT (window)->parent; parent->children = g_list_remove (parent->children, window); parent->children = g_list_append (parent->children, window);}voidgdk_window_raise (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); gdk_fb_window_raise (window); if (GDK_WINDOW_OBJECT (window)->parent) gdk_window_invalidate_rect (window, NULL, TRUE);}voidgdk_window_lower (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); gdk_fb_window_lower (window); if (GDK_WINDOW_OBJECT (window)->parent) gdk_window_invalidate_rect (window, NULL, TRUE);}voidgdk_window_set_hints (GdkWindow *window, gint x, gint y, gint min_width, gint min_height, gint max_width, gint max_height, gint flags){}void gdk_window_set_geometry_hints (GdkWindow *window, GdkGeometry *geometry, GdkWindowHints geom_mask){}voidgdk_window_set_title (GdkWindow *window, const gchar *title){}void gdk_window_set_role (GdkWindow *window, const gchar *role){}void gdk_window_set_transient_for (GdkWindow *window, GdkWindow *parent){ GdkWindowObject *private = GDK_WINDOW_OBJECT (window); GdkWindowObject *root = GDK_WINDOW_OBJECT (_gdk_parent_root); int i; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); g_return_if_fail (parent != NULL); g_return_if_fail (GDK_IS_WINDOW (parent)); g_return_if_fail ((GdkWindow *)private->parent == _gdk_parent_root); g_return_if_fail ((GdkWindow *)GDK_WINDOW_OBJECT (parent)->parent == _gdk_parent_root); root->children = g_list_remove (root->children, window); i = g_list_index (root->children, parent); if (i<0) root->children = g_list_prepend (root->children, window); else root->children = g_list_insert (root->children, window, i);}voidgdk_window_set_background (GdkWindow *window, const GdkColor *color){ GdkWindowObject *private = (GdkWindowObject *)window; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); private->bg_color = *color; if (private->bg_pixmap && private->bg_pixmap != GDK_PARENT_RELATIVE_BG && private->bg_pixmap != GDK_NO_BG) { gdk_pixmap_unref (private->bg_pixmap); private->bg_pixmap = NULL; }}voidgdk_window_set_back_pixmap (GdkWindow *window, GdkPixmap *pixmap, gboolean parent_relative){ GdkWindowObject *private = (GdkWindowObject *)window; GdkPixmap *old_pixmap; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); g_return_if_fail (pixmap == NULL || !parent_relative); g_return_if_fail (pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap)); old_pixmap = private->bg_pixmap; if (parent_relative) { private->bg_pixmap = GDK_PARENT_RELATIVE_BG; } else { if (pixmap) { gdk_pixmap_ref (pixmap); private->bg_pixmap = pixmap; } else { private->bg_pixmap = GDK_NO_BG; } } if (old_pixmap && old_pixmap != GDK_PARENT_RELATIVE_BG && old_pixmap != GDK_NO_BG) gdk_pixmap_unref (old_pixmap);}voidgdk_window_set_cursor (GdkWindow *window, GdkCursor *cursor){ GdkCursor *old_cursor = GDK_WINDOW_IMPL_FBDATA(window)->cursor; GdkRectangle window_reg; GDK_WINDOW_IMPL_FBDATA (window)->cursor = cursor ? gdk_cursor_ref (cursor) : NULL; if (old_cursor) gdk_cursor_unref (old_cursor); window_reg.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x; window_reg.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y; window_reg.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - window_reg.x; window_reg.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - window_reg.y; if (gdk_fb_cursor_need_hide (&window_reg)) gdk_fb_cursor_reset ();}voidgdk_window_get_geometry (GdkWindow *window, gint *x, gint *y, gint *width, gint *height, gint *depth){ GdkWindowObject *private = (GdkWindowObject *)window; g_return_if_fail (window == NULL || GDK_IS_WINDOW (window)); if (!window) window = _gdk_parent_root; if (!private->destroyed) { if (x) *x = private->x; if (y) *y = private->y; if (width) *width = GDK_DRAWABLE_IMPL_FBDATA (window)->width; if (height) *height = GDK_DRAWABLE_IMPL_FBDATA (window)->height; if (depth) *depth = gdk_display->modeinfo.bits_per_pixel; }}gbooleangdk_window_get_origin (GdkWindow *window, gint *x, gint *y){ g_return_val_if_fail (window != NULL, FALSE); if (x) *x = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x; if (y) *y = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y; return TRUE;}gbooleangdk_window_get_deskrelative_origin (GdkWindow *window, gint *x, gint *y){ gint tx = 0; gint ty = 0; gboolean return_val; g_return_val_if_fail (window != NULL, 0); if (!GDK_WINDOW_DESTROYED (window)) { tx = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x; ty = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y; return_val = TRUE; } else return_val = FALSE; if (x) *x = tx; if (y) *y = ty; return return_val;}voidgdk_window_get_root_origin (GdkWindow *window, gint *x, gint *y){ gdk_window_get_deskrelative_origin (window, x, y);}static GdkRegion*gdk_window_fb_get_visible_region (GdkDrawable *drawable){ GdkDrawableFBData *priv = GDK_DRAWABLE_FBDATA (drawable); GdkRectangle result_rect; GdkRectangle screen_rect; result_rect.x = 0; result_rect.y = 0; result_rect.width = priv->width; result_rect.height = priv->height; screen_rect.x = -priv->abs_x; screen_rect.y = -priv->abs_y; screen_rect.width = gdk_display->fb_width; screen_rect.height = gdk_display->fb_height; gdk_rectangle_intersect (&result_rect, &screen_rect, &result_rect); return gdk_region_rectangle (&result_rect);}GdkWindow *_gdk_windowing_window_get_pointer (GdkDisplay *display, GdkWindow *window, gint *x, gint *y, GdkModifierType *mask){ GdkWindow *return_val; int winx = 0; int winy = 0; int x_int, y_int; gint shape_dx, shape_dy; GdkRegion *shape; g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL); gdk_window_get_root_origin (window, &x_int, &y_int); gdk_fb_mouse_get_info (&winx, &winy, mask); winx -= x_int; winy -= y_int; *x = winx; *y = winy; return_val = NULL; shape = gdk_fb_window_peek_shape (window, &shape_dx, &shape_dy); if ((winx >= 0) && (winx < GDK_DRAWABLE_IMPL_FBDATA (window)->width) && (winy >= 0) && (winy < GDK_DRAWABLE_IMPL_FBDATA (window)->height) && (!shape || gdk_region_point_in (shape, winx - shape_dx, winy - shape_dy))) { GdkWindowObject *private; GdkWindowObject *sub; int subx = winx, suby = winy; for (private = sub = (GdkWindowObject *)window; sub; private = sub) { GList *ltmp; for (ltmp = private->children; ltmp; ltmp = ltmp->next) { sub = ltmp->data; if (!GDK_WINDOW_IS_MAPPED (sub)) continue; shape = gdk_fb_window_peek_shape (GDK_WINDOW (sub), &shape_dx, &shape_dy); if (subx >= sub->x && (subx < (GDK_DRAWABLE_IMPL_FBDATA (sub)->width + sub->x)) && (suby >= sub->y) && (suby < (GDK_DRAWABLE_IMPL_FBDATA (sub)->height + sub->y)) && (!shape || gdk_region_point_in (shape, subx - sub->x - shape_dx, suby - sub->y - shape_dy))) { subx -= sub->x; suby -= sub->y; break; } } if (!ltmp) { sub = NULL; break; } } return_val = (GdkWindow *)private; } if (!return_val) return_val = _gdk_parent_root; return return_val;}void_gdk_windowing_get_pointer (GdkDisplay *display, GdkScreen **screen, gint *x, gint *y, GdkModifierType *mask){ GdkScreen *default_screen = gdk_display_get_default_screen (display); GdkWindow *root_window = gdk_screen_get_root_window (default_screen); *screen = default_screen; _gdk_windowing_window_get_pointer (display, root_window, x, y, mask);}GdkWindow*_gdk_windowing_window_at_pointer (GdkDisplay *display, gint *win_x, gint *win_y){ gint rx, ry; GdkWindow *retval = gdk_window_get_pointer (NULL, win_x, win_y, NULL); if (retval) { gdk_window_get_origin (retval, &ry, &rx); (*win_x) -= rx; (*win_y) -= ry; } return retval;}GdkEventMask gdk_window_get_events (GdkWindow *window){ g_return_val_if_fail (window != NULL, 0); g_return_val_if_fail (GDK_IS_WINDOW (window), 0); if (GDK_WINDOW_DESTROYED (window)) return 0; else return GDK_WINDOW_OBJECT (window)->event_mask;}void gdk_window_set_events (GdkWindow *window, GdkEventMask event_mask){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); if (event_mask & GDK_BUTTON_MOTION_MASK) event_mask |= GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK; GDK_WINDOW_OBJECT (window)->event_mask = GDK_STRUCTURE_MASK | event_mask;}voidgdk_window_add_colormap_windows (GdkWindow *window){ g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); /* N/A */}GdkRegion*gdk_fb_region_create_from_bitmap (GdkBitmap *bitmap){ GdkDrawableFBData *private; GdkRegion *region; GdkRectangle rect; gboolean in_rect;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -