forked from AuroraMiddleware/gtk
demos/gtk-demo/offscreen_window.c: Use accessor functions to access GtkWidget
This commit is contained in:
parent
8c4783da05
commit
4011b70928
@ -74,7 +74,7 @@ to_child (GtkRotatedBin *bin,
|
|||||||
|
|
||||||
s = sin (bin->angle);
|
s = sin (bin->angle);
|
||||||
c = cos (bin->angle);
|
c = cos (bin->angle);
|
||||||
child_area = bin->child->allocation;
|
gtk_widget_get_allocation (bin->child, &child_area);
|
||||||
|
|
||||||
w = c * child_area.width + s * child_area.height;
|
w = c * child_area.width + s * child_area.height;
|
||||||
h = s * child_area.width + c * child_area.height;
|
h = s * child_area.width + c * child_area.height;
|
||||||
@ -114,7 +114,7 @@ to_parent (GtkRotatedBin *bin,
|
|||||||
|
|
||||||
s = sin (bin->angle);
|
s = sin (bin->angle);
|
||||||
c = cos (bin->angle);
|
c = cos (bin->angle);
|
||||||
child_area = bin->child->allocation;
|
gtk_widget_get_allocation (bin->child, &child_area);
|
||||||
|
|
||||||
w = c * child_area.width + s * child_area.height;
|
w = c * child_area.width + s * child_area.height;
|
||||||
h = s * child_area.width + c * child_area.height;
|
h = s * child_area.width + c * child_area.height;
|
||||||
@ -188,7 +188,7 @@ pick_offscreen_child (GdkWindow *offscreen_window,
|
|||||||
{
|
{
|
||||||
to_child (bin, widget_x, widget_y, &x, &y);
|
to_child (bin, widget_x, widget_y, &x, &y);
|
||||||
|
|
||||||
child_area = bin->child->allocation;
|
gtk_widget_get_allocation (bin->child, &child_area);
|
||||||
|
|
||||||
if (x >= 0 && x < child_area.width &&
|
if (x >= 0 && x < child_area.width &&
|
||||||
y >= 0 && y < child_area.height)
|
y >= 0 && y < child_area.height)
|
||||||
@ -224,6 +224,9 @@ static void
|
|||||||
gtk_rotated_bin_realize (GtkWidget *widget)
|
gtk_rotated_bin_realize (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
|
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
|
||||||
|
GtkAllocation allocation;
|
||||||
|
GtkStyle *style;
|
||||||
|
GdkWindow *window;
|
||||||
GdkWindowAttr attributes;
|
GdkWindowAttr attributes;
|
||||||
gint attributes_mask;
|
gint attributes_mask;
|
||||||
guint border_width;
|
guint border_width;
|
||||||
@ -231,12 +234,13 @@ gtk_rotated_bin_realize (GtkWidget *widget)
|
|||||||
|
|
||||||
gtk_widget_set_realized (widget, TRUE);
|
gtk_widget_set_realized (widget, TRUE);
|
||||||
|
|
||||||
|
gtk_widget_get_allocation (widget, &allocation);
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||||
|
|
||||||
attributes.x = widget->allocation.x + border_width;
|
attributes.x = allocation.x + border_width;
|
||||||
attributes.y = widget->allocation.y + border_width;
|
attributes.y = allocation.y + border_width;
|
||||||
attributes.width = widget->allocation.width - 2 * border_width;
|
attributes.width = allocation.width - 2 * border_width;
|
||||||
attributes.height = widget->allocation.height - 2 * border_width;
|
attributes.height = allocation.height - 2 * border_width;
|
||||||
attributes.window_type = GDK_WINDOW_CHILD;
|
attributes.window_type = GDK_WINDOW_CHILD;
|
||||||
attributes.event_mask = gtk_widget_get_events (widget)
|
attributes.event_mask = gtk_widget_get_events (widget)
|
||||||
| GDK_EXPOSURE_MASK
|
| GDK_EXPOSURE_MASK
|
||||||
@ -253,10 +257,11 @@ gtk_rotated_bin_realize (GtkWidget *widget)
|
|||||||
|
|
||||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
|
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
|
||||||
|
|
||||||
widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
|
window = gdk_window_new (gtk_widget_get_parent_window (widget),
|
||||||
&attributes, attributes_mask);
|
&attributes, attributes_mask);
|
||||||
gdk_window_set_user_data (widget->window, widget);
|
gtk_widget_set_window (widget, window);
|
||||||
g_signal_connect (widget->window, "pick-embedded-child",
|
gdk_window_set_user_data (window, widget);
|
||||||
|
g_signal_connect (window, "pick-embedded-child",
|
||||||
G_CALLBACK (pick_offscreen_child), bin);
|
G_CALLBACK (pick_offscreen_child), bin);
|
||||||
|
|
||||||
attributes.window_type = GDK_WINDOW_OFFSCREEN;
|
attributes.window_type = GDK_WINDOW_OFFSCREEN;
|
||||||
@ -264,24 +269,27 @@ gtk_rotated_bin_realize (GtkWidget *widget)
|
|||||||
child_requisition.width = child_requisition.height = 0;
|
child_requisition.width = child_requisition.height = 0;
|
||||||
if (bin->child && gtk_widget_get_visible (bin->child))
|
if (bin->child && gtk_widget_get_visible (bin->child))
|
||||||
{
|
{
|
||||||
attributes.width = bin->child->allocation.width;
|
GtkAllocation child_allocation;
|
||||||
attributes.height = bin->child->allocation.height;
|
|
||||||
|
gtk_widget_get_allocation (bin->child, &child_allocation);
|
||||||
|
attributes.width = child_allocation.width;
|
||||||
|
attributes.height = child_allocation.height;
|
||||||
}
|
}
|
||||||
bin->offscreen_window = gdk_window_new (gtk_widget_get_root_window (widget),
|
bin->offscreen_window = gdk_window_new (gtk_widget_get_root_window (widget),
|
||||||
&attributes, attributes_mask);
|
&attributes, attributes_mask);
|
||||||
gdk_window_set_user_data (bin->offscreen_window, widget);
|
gdk_window_set_user_data (bin->offscreen_window, widget);
|
||||||
if (bin->child)
|
if (bin->child)
|
||||||
gtk_widget_set_parent_window (bin->child, bin->offscreen_window);
|
gtk_widget_set_parent_window (bin->child, bin->offscreen_window);
|
||||||
gdk_offscreen_window_set_embedder (bin->offscreen_window, widget->window);
|
gdk_offscreen_window_set_embedder (bin->offscreen_window, window);
|
||||||
g_signal_connect (bin->offscreen_window, "to-embedder",
|
g_signal_connect (bin->offscreen_window, "to-embedder",
|
||||||
G_CALLBACK (offscreen_window_to_parent), bin);
|
G_CALLBACK (offscreen_window_to_parent), bin);
|
||||||
g_signal_connect (bin->offscreen_window, "from-embedder",
|
g_signal_connect (bin->offscreen_window, "from-embedder",
|
||||||
G_CALLBACK (offscreen_window_from_parent), bin);
|
G_CALLBACK (offscreen_window_from_parent), bin);
|
||||||
|
|
||||||
widget->style = gtk_style_attach (widget->style, widget->window);
|
gtk_widget_style_attach (widget);
|
||||||
|
style = gtk_widget_get_style (widget);
|
||||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
gtk_style_set_background (style, window, GTK_STATE_NORMAL);
|
||||||
gtk_style_set_background (widget->style, bin->offscreen_window, GTK_STATE_NORMAL);
|
gtk_style_set_background (style, bin->offscreen_window, GTK_STATE_NORMAL);
|
||||||
gdk_window_show (bin->offscreen_window);
|
gdk_window_show (bin->offscreen_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +413,7 @@ gtk_rotated_bin_size_allocate (GtkWidget *widget,
|
|||||||
gint w, h;
|
gint w, h;
|
||||||
gdouble s, c;
|
gdouble s, c;
|
||||||
|
|
||||||
widget->allocation = *allocation;
|
gtk_widget_set_allocation (widget, allocation);
|
||||||
|
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||||
|
|
||||||
@ -413,7 +421,7 @@ gtk_rotated_bin_size_allocate (GtkWidget *widget,
|
|||||||
h = allocation->height - border_width * 2;
|
h = allocation->height - border_width * 2;
|
||||||
|
|
||||||
if (gtk_widget_get_realized (widget))
|
if (gtk_widget_get_realized (widget))
|
||||||
gdk_window_move_resize (widget->window,
|
gdk_window_move_resize (gtk_widget_get_window (widget),
|
||||||
allocation->x + border_width,
|
allocation->x + border_width,
|
||||||
allocation->y + border_width,
|
allocation->y + border_width,
|
||||||
w, h);
|
w, h);
|
||||||
@ -454,7 +462,8 @@ static gboolean
|
|||||||
gtk_rotated_bin_damage (GtkWidget *widget,
|
gtk_rotated_bin_damage (GtkWidget *widget,
|
||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
gdk_window_invalidate_rect (widget->window, NULL, FALSE);
|
gdk_window_invalidate_rect (gtk_widget_get_window (widget),
|
||||||
|
NULL, FALSE);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -464,13 +473,15 @@ gtk_rotated_bin_expose (GtkWidget *widget,
|
|||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
|
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
|
||||||
|
GdkWindow *window;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
gdouble s, c;
|
gdouble s, c;
|
||||||
gdouble w, h;
|
gdouble w, h;
|
||||||
|
|
||||||
if (gtk_widget_is_drawable (widget))
|
if (gtk_widget_is_drawable (widget))
|
||||||
{
|
{
|
||||||
if (event->window == widget->window)
|
window = gtk_widget_get_window (widget);
|
||||||
|
if (event->window == window)
|
||||||
{
|
{
|
||||||
GdkPixmap *pixmap;
|
GdkPixmap *pixmap;
|
||||||
GtkAllocation child_area;
|
GtkAllocation child_area;
|
||||||
@ -479,9 +490,9 @@ gtk_rotated_bin_expose (GtkWidget *widget,
|
|||||||
if (bin->child && gtk_widget_get_visible (bin->child))
|
if (bin->child && gtk_widget_get_visible (bin->child))
|
||||||
{
|
{
|
||||||
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
|
pixmap = gdk_offscreen_window_get_pixmap (bin->offscreen_window);
|
||||||
child_area = bin->child->allocation;
|
gtk_widget_get_allocation (bin->child, &child_area);
|
||||||
|
|
||||||
cr = gdk_cairo_create (widget->window);
|
cr = gdk_cairo_create (window);
|
||||||
|
|
||||||
/* transform */
|
/* transform */
|
||||||
s = sin (bin->angle);
|
s = sin (bin->angle);
|
||||||
@ -507,7 +518,7 @@ gtk_rotated_bin_expose (GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
else if (event->window == bin->offscreen_window)
|
else if (event->window == bin->offscreen_window)
|
||||||
{
|
{
|
||||||
gtk_paint_flat_box (widget->style, event->window,
|
gtk_paint_flat_box (gtk_widget_get_style (widget), event->window,
|
||||||
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
|
GTK_STATE_NORMAL, GTK_SHADOW_NONE,
|
||||||
&event->area, widget, "blah",
|
&event->area, widget, "blah",
|
||||||
0, 0, -1, -1);
|
0, 0, -1, -1);
|
||||||
|
Loading…
Reference in New Issue
Block a user