notebook: Implement snapshot

This commit is contained in:
Benjamin Otte
2016-12-14 05:25:00 +01:00
parent 3ba5c70028
commit e755d9357d

View File

@@ -45,6 +45,7 @@
#include "gtkwidgetpath.h"
#include "gtkboxgadgetprivate.h"
#include "gtkbuiltiniconprivate.h"
#include "gtkcontainerprivate.h"
#include "gtkcsscustomgadgetprivate.h"
#include "gtkcssstylepropertyprivate.h"
#include "gtksizerequest.h"
@@ -372,8 +373,8 @@ static void gtk_notebook_measure (GtkWidget *widget,
int *natural_baseline);
static void gtk_notebook_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_notebook_draw (GtkWidget *widget,
cairo_t *cr);
static void gtk_notebook_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot);
static gboolean gtk_notebook_popup_menu (GtkWidget *widget);
static gboolean gtk_notebook_enter_notify (GtkWidget *widget,
GdkEventCrossing *event);
@@ -478,8 +479,8 @@ static void gtk_notebook_allocate_tabs (GtkCssGadget *gadget,
int baseline,
GtkAllocation *out_clip,
gpointer data);
static gboolean gtk_notebook_draw_tabs (GtkCssGadget *gadget,
cairo_t *cr,
static gboolean gtk_notebook_snapshot_tabs (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
int x,
int y,
int width,
@@ -498,8 +499,8 @@ static void gtk_notebook_allocate_stack (GtkCssGadget *gadget,
int baseline,
GtkAllocation *out_clip,
gpointer data);
static gboolean gtk_notebook_draw_stack (GtkCssGadget *gadget,
cairo_t *cr,
static gboolean gtk_notebook_snapshot_stack (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
int x,
int y,
int width,
@@ -714,7 +715,7 @@ gtk_notebook_class_init (GtkNotebookClass *class)
widget_class->unrealize = gtk_notebook_unrealize;
widget_class->measure = gtk_notebook_measure;
widget_class->size_allocate = gtk_notebook_size_allocate;
widget_class->draw = gtk_notebook_draw;
widget_class->snapshot = gtk_notebook_snapshot;
widget_class->popup_menu = gtk_notebook_popup_menu;
widget_class->enter_notify_event = gtk_notebook_enter_notify;
widget_class->leave_notify_event = gtk_notebook_leave_notify;
@@ -1215,8 +1216,8 @@ gtk_notebook_init (GtkNotebook *notebook)
NULL,
gtk_notebook_measure_stack,
gtk_notebook_allocate_stack,
gtk_notebook_draw_stack,
NULL,
gtk_notebook_snapshot_stack,
NULL,
NULL);
gtk_css_gadget_set_state (priv->stack_gadget, gtk_css_node_get_state (widget_node));
@@ -1237,8 +1238,8 @@ gtk_notebook_init (GtkNotebook *notebook)
NULL,
gtk_notebook_measure_tabs,
gtk_notebook_allocate_tabs,
gtk_notebook_draw_tabs,
NULL,
gtk_notebook_snapshot_tabs,
NULL,
NULL);
gtk_css_gadget_set_state (priv->tabs_gadget, gtk_css_node_get_state (widget_node));
@@ -1673,7 +1674,7 @@ gtk_notebook_get_property (GObject *object,
* gtk_notebook_unmap
* gtk_notebook_realize
* gtk_notebook_size_allocate
* gtk_notebook_draw
* gtk_notebook_snapshot
* gtk_notebook_scroll
* gtk_notebook_popup_menu
* gtk_notebook_enter_notify
@@ -2358,39 +2359,37 @@ gtk_notebook_size_allocate (GtkWidget *widget,
}
static gboolean
gtk_notebook_draw_stack (GtkCssGadget *gadget,
cairo_t *cr,
int x,
int y,
int width,
int height,
gpointer unused)
gtk_notebook_snapshot_stack (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
int x,
int y,
int width,
int height,
gpointer unused)
{
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
GtkNotebookPrivate *priv = notebook->priv;
if (gtk_notebook_has_current_page (notebook))
gtk_container_propagate_draw (GTK_CONTAINER (notebook),
gtk_container_snapshot_child (GTK_CONTAINER (notebook),
priv->cur_page->child,
cr);
snapshot);
return FALSE;
}
static gboolean
gtk_notebook_draw (GtkWidget *widget,
cairo_t *cr)
static void
gtk_notebook_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
GtkNotebookPrivate *priv = notebook->priv;
gtk_css_gadget_draw (priv->gadget, cr);
gtk_css_gadget_snapshot (priv->gadget, snapshot);
if (priv->operation == DRAG_OPERATION_REORDER)
gtk_css_gadget_draw (priv->cur_page->gadget, cr);
return FALSE;
gtk_css_gadget_snapshot (priv->cur_page->gadget, snapshot);
}
static gboolean
@@ -4579,22 +4578,22 @@ allocate_tab (GtkCssGadget *gadget,
}
static gboolean
draw_tab (GtkCssGadget *gadget,
cairo_t *cr,
int x,
int y,
int width,
int height,
gpointer data)
snapshot_tab (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
int x,
int y,
int width,
int height,
gpointer data)
{
GtkNotebookPage *page = data;
GtkWidget *widget;
widget = gtk_css_gadget_get_owner (gadget);
gtk_container_propagate_draw (GTK_CONTAINER (widget),
gtk_container_snapshot_child (GTK_CONTAINER (widget),
page->tab_label,
cr);
snapshot);
return gtk_widget_has_visible_focus (widget) &&
GTK_NOTEBOOK (widget)->priv->cur_page == page;
@@ -4640,8 +4639,8 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
sibling,
measure_tab,
allocate_tab,
draw_tab,
NULL,
snapshot_tab,
page,
NULL);
if (priv->tabs_reversed)
@@ -5063,13 +5062,13 @@ gtk_notebook_search_page (GtkNotebook *notebook,
}
static gboolean
gtk_notebook_draw_tabs (GtkCssGadget *gadget,
cairo_t *cr,
int x,
int y,
int width,
int height,
gpointer unused)
gtk_notebook_snapshot_tabs (GtkCssGadget *gadget,
GtkSnapshot *snapshot,
int x,
int y,
int width,
int height,
gpointer unused)
{
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
@@ -5139,7 +5138,7 @@ gtk_notebook_draw_tabs (GtkCssGadget *gadget,
if (!gtk_notebook_page_tab_label_is_visible (page))
continue;
gtk_css_gadget_draw (page->gadget, cr);
gtk_css_gadget_snapshot (page->gadget, snapshot);
}
if (children != NULL)
@@ -5162,7 +5161,7 @@ gtk_notebook_draw_tabs (GtkCssGadget *gadget,
for (children = other_order; children; children = children->next)
{
page = children->data;
gtk_css_gadget_draw (page->gadget, cr);
gtk_css_gadget_snapshot (page->gadget, snapshot);
}
g_list_free (other_order);
@@ -5175,12 +5174,12 @@ gtk_notebook_draw_tabs (GtkCssGadget *gadget,
if (priv->arrow_gadget[i] == NULL)
continue;
gtk_css_gadget_draw (priv->arrow_gadget[i], cr);
gtk_css_gadget_snapshot (priv->arrow_gadget[i], snapshot);
}
}
if (priv->operation != DRAG_OPERATION_DETACH)
gtk_css_gadget_draw (priv->cur_page->gadget, cr);
gtk_css_gadget_snapshot (priv->cur_page->gadget, snapshot);
return FALSE;
}