1 /* 2 * Copyright © 2015 Red Hat Inc. 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 16 * 17 * Authors: Benjamin Otte <otte@gnome.org> 18 */ 19 20 #ifndef __GTK_CSS_GADGET_PRIVATE_H__ 21 #define __GTK_CSS_GADGET_PRIVATE_H__ 22 23 #include <cairo.h> 24 #include <glib-object.h> 25 26 #include "gtk/gtkwidget.h" 27 #include "gtk/gtkcssstylechangeprivate.h" 28 #include "gtk/gtkcsstypesprivate.h" 29 30 G_BEGIN_DECLS 31 32 #define GTK_TYPE_CSS_GADGET (gtk_css_gadget_get_type ()) 33 #define GTK_CSS_GADGET(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_CSS_GADGET, GtkCssGadget)) 34 #define GTK_CSS_GADGET_CLASS(cls) (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_CSS_GADGET, GtkCssGadgetClass)) 35 #define GTK_IS_CSS_GADGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_CSS_GADGET)) 36 #define GTK_IS_CSS_GADGET_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_CSS_GADGET)) 37 #define GTK_CSS_GADGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CSS_GADGET, GtkCssGadgetClass)) 38 39 typedef struct _GtkCssGadget GtkCssGadget; 40 typedef struct _GtkCssGadgetClass GtkCssGadgetClass; 41 42 struct _GtkCssGadget 43 { 44 GObject parent; 45 }; 46 47 struct _GtkCssGadgetClass 48 { 49 GObjectClass parent_class; 50 51 void (* get_preferred_size) (GtkCssGadget *gadget, 52 GtkOrientation orientation, 53 gint for_size, 54 gint *minimum, 55 gint *natural, 56 gint *minimum_baseline, 57 gint *natural_baseline); 58 59 void (* allocate) (GtkCssGadget *gadget, 60 const GtkAllocation *allocation, 61 int baseline, 62 GtkAllocation *out_clip); 63 64 gboolean (* draw) (GtkCssGadget *gadget, 65 cairo_t *cr, 66 int x, 67 int y, 68 int width, 69 int height); 70 71 void (* style_changed) (GtkCssGadget *gadget, 72 GtkCssStyleChange *change); 73 }; 74 75 GType gtk_css_gadget_get_type (void) G_GNUC_CONST; 76 77 GtkCssNode * gtk_css_gadget_get_node (GtkCssGadget *gadget); 78 GtkCssStyle * gtk_css_gadget_get_style (GtkCssGadget *gadget); 79 GtkWidget * gtk_css_gadget_get_owner (GtkCssGadget *gadget); 80 81 void gtk_css_gadget_set_node (GtkCssGadget *gadget, 82 GtkCssNode *node); 83 void gtk_css_gadget_set_visible (GtkCssGadget *gadget, 84 gboolean visible); 85 gboolean gtk_css_gadget_get_visible (GtkCssGadget *gadget); 86 87 gboolean gtk_css_gadget_margin_box_contains_point (GtkCssGadget *gadget, 88 int x, 89 int y); 90 gboolean gtk_css_gadget_border_box_contains_point (GtkCssGadget *gadget, 91 int x, 92 int y); 93 gboolean gtk_css_gadget_content_box_contains_point (GtkCssGadget *gadget, 94 int x, 95 int y); 96 void gtk_css_gadget_get_margin_box (GtkCssGadget *gadget, 97 GtkAllocation *box); 98 void gtk_css_gadget_get_border_box (GtkCssGadget *gadget, 99 GtkAllocation *box); 100 void gtk_css_gadget_get_content_box (GtkCssGadget *gadget, 101 GtkAllocation *box); 102 103 void gtk_css_gadget_add_class (GtkCssGadget *gadget, 104 const char *name); 105 void gtk_css_gadget_remove_class (GtkCssGadget *gadget, 106 const char *name); 107 void gtk_css_gadget_set_state (GtkCssGadget *gadget, 108 GtkStateFlags state); 109 void gtk_css_gadget_add_state (GtkCssGadget *gadget, 110 GtkStateFlags state); 111 void gtk_css_gadget_remove_state (GtkCssGadget *gadget, 112 GtkStateFlags state); 113 114 void gtk_css_gadget_get_preferred_size (GtkCssGadget *gadget, 115 GtkOrientation orientation, 116 gint for_size, 117 gint *minimum, 118 gint *natural, 119 gint *minimum_baseline, 120 gint *natural_baseline); 121 void gtk_css_gadget_allocate (GtkCssGadget *gadget, 122 const GtkAllocation *allocation, 123 int baseline, 124 GtkAllocation *out_clip); 125 void gtk_css_gadget_draw (GtkCssGadget *gadget, 126 cairo_t *cr); 127 128 void gtk_css_gadget_queue_resize (GtkCssGadget *gadget); 129 void gtk_css_gadget_queue_allocate (GtkCssGadget *gadget); 130 void gtk_css_gadget_queue_draw (GtkCssGadget *gadget); 131 132 void gtk_css_gadget_get_margin_allocation (GtkCssGadget *gadget, 133 GtkAllocation *allocation, 134 int *baseline); 135 void gtk_css_gadget_get_border_allocation (GtkCssGadget *gadget, 136 GtkAllocation *allocation, 137 int *baseline); 138 void gtk_css_gadget_get_content_allocation (GtkCssGadget *gadget, 139 GtkAllocation *allocation, 140 int *baseline); 141 142 G_END_DECLS 143 144 #endif /* __GTK_CSS_GADGET_PRIVATE_H__ */ 145