summaryrefslogtreecommitdiff
path: root/gdk/linux-fb/gdkwindow-fb.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2001-01-11 16:39:21 +0000
committerAlexander Larsson <alexl@src.gnome.org>2001-01-11 16:39:21 +0000
commitb29eece81f4b4457a15397b0476fec6e036f72e8 (patch)
tree685bd8045b3bed3605c64497a250376d049d95ad /gdk/linux-fb/gdkwindow-fb.c
parentd2c345480b590bbd2f95e8e92687bce18fd4c289 (diff)
downloadgdk-pixbuf-b29eece81f4b4457a15397b0476fec6e036f72e8.tar.gz
Added ENABLE_SHADOW_FB
2001-01-11 Alexander Larsson <alexl@redhat.com> * acconfig.h: Added ENABLE_SHADOW_FB * configure.in: Added --disable-shadowfb * gdk/linux-fb/gdkcursor-fb.c: Update shadowfb when updating cursor * gdk/linux-fb/gdkdrawable-fb2.c: Added wrappers for shadowfb that calls the normal drawable methods, but calls gdk_shadow_fb_update(bounding box) when GdkWindows are drawed to. Moved gdk_draw_glyphs implementation to _gdk_draw_glyphs which also returns the bounding box. * gdk/linux-fb/gdkfb.h: Added GdkFBAngle type and gdk_fb_set_rotation declaration. * gdk/linux-fb/gdkgeometry-fb.c: Update shadowfb when scrolling window. * gdk/linux-fb/gdkglobals-fb.c: Add _gdk_fb_screen_angle. * gdk/linux-fb/gdkkeyboard-fb.c: Test code for screen rotation. Shift-F2 in the xlate driver rotates the screen. * gdk/linux-fb/gdkmain-fb.c: Handle shadowfb. Add gdk_fb_set_rotation(). Remove CM and RP. * gdk/linux-fb/gdkmouse-fb.c: Use fb_width/height instead of modeinfo.xres/yres. * gdk/linux-fb/gdkprivate-fb.h: Added fb_men, fb_width, fb_height & fb_stride. When using shadow fb these can differ from the framebuffer stuff. Declarations for gdk_shadow_fb_update, gdk_shadow_fb_init, gdk_shadow_fb_stop_updates, gdk_fb_recompute_all, _gdk_fb_screen_angle. Removed CM, RP. * gdk/linux-fb/gdkrender-fb.c: Added code for shadowfb handling and screen rotation using shadowfb. * gdk/linux-fb/gdkwindow-fb.c: Use fb_mem, fb_stride, fb_width, fb_height. Added recompute_rowstride to reset the rowstride of all windows. Added gdk_fb_recompute_all() which recomputes rootwindow size, window abs positions and window rowstrides. Usefull when the rotation has changed.
Diffstat (limited to 'gdk/linux-fb/gdkwindow-fb.c')
-rw-r--r--gdk/linux-fb/gdkwindow-fb.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c
index ec656dd92..2030036d9 100644
--- a/gdk/linux-fb/gdkwindow-fb.c
+++ b/gdk/linux-fb/gdkwindow-fb.c
@@ -209,8 +209,8 @@ gdk_window_new (GdkWindow *parent,
impl->drawable_data.width = (attributes->width > 1) ? (attributes->width) : (1);
impl->drawable_data.height = (attributes->height > 1) ? (attributes->height) : (1);
private->window_type = impl->drawable_data.window_type = attributes->window_type;
- impl->drawable_data.mem = gdk_display->fbmem;
- impl->drawable_data.rowstride = gdk_display->sinfo.line_length;
+ impl->drawable_data.mem = gdk_display->fb_mem;
+ impl->drawable_data.rowstride = gdk_display->fb_stride;
gdk_window_move_resize (window, x, y,
impl->drawable_data.width, impl->drawable_data.height);
@@ -775,9 +775,6 @@ gdk_window_hide (GdkWindow *window)
private->mapped = FALSE;
- if (private->parent == GDK_WINDOW_P(gdk_parent_root))
- gdk_fb_drawable_clear(gdk_parent_root);
-
mousewin = gdk_window_at_pointer (NULL, NULL);
gdk_fb_window_send_crossing_events (mousewin,
GDK_CROSSING_NORMAL);
@@ -909,6 +906,33 @@ recompute_abs_positions(GdkDrawable *drawable,
}
static void
+recompute_rowstride(GdkDrawable *drawable)
+{
+ GList *l;
+ GdkWindowObject *private;
+
+ g_return_if_fail (GDK_IS_WINDOW (drawable));
+
+ private = GDK_WINDOW_P (drawable);
+
+ GDK_DRAWABLE_IMPL_FBDATA (private)->rowstride = gdk_display->fb_stride;
+ for (l = private->children; l; l = l->next)
+ recompute_rowstride (l->data);
+}
+
+void
+gdk_fb_recompute_all (void)
+{
+ GDK_DRAWABLE_IMPL_FBDATA (gdk_parent_root)->width = gdk_display->fb_width;
+ GDK_DRAWABLE_IMPL_FBDATA (gdk_parent_root)->height = gdk_display->fb_height;
+
+ recompute_abs_positions (gdk_parent_root,
+ 0, 0, 0, 0,
+ gdk_display->fb_width, gdk_display->fb_height);
+ recompute_rowstride (gdk_parent_root);
+}
+
+static void
recompute_drawable (GdkDrawable *drawable)
{
if (GDK_IS_WINDOW (drawable))
@@ -1035,7 +1059,9 @@ gdk_fb_window_move_resize (GdkWindow *window,
}
gdk_fb_drawing_context_finalize (&fbdc);
}
-
+ gdk_shadow_fb_update (region->extents.x1, region->extents.y1,
+ region->extents.x2, region->extents.y2);
+
gdk_region_union (new_region, old_region);
gdk_region_subtract (new_region, region);
gdk_region_destroy (region);
@@ -1197,7 +1223,7 @@ _gdk_windowing_window_clear_area (GdkWindow *window,
gdk_fb_drawing_context_finalize (&fbdc);
}
else if (!bgpm)
- gdk_fb_draw_rectangle (GDK_DRAWABLE_IMPL (window), _gdk_fb_screen_gc, TRUE, x, y, width, height);
+ gdk_draw_rectangle (window, _gdk_fb_screen_gc, TRUE, x, y, width, height);
}
/* What's the diff? */
@@ -1489,8 +1515,8 @@ gdk_window_fb_get_visible_region (GdkDrawable *drawable)
screen_rect.x = -priv->abs_x;
screen_rect.y = -priv->abs_y;
- screen_rect.width = gdk_display->modeinfo.xres;
- screen_rect.height = gdk_display->modeinfo.yres;
+ screen_rect.width = gdk_display->fb_width;
+ screen_rect.height = gdk_display->fb_width;
gdk_rectangle_intersect (&result_rect, &screen_rect, &result_rect);