static void gtk_do_render_arrow (GtkStyleContext *context, cairo_t *cr, gdouble angle, gdouble x, gdouble y, gdouble size) { GtkCssImageBuiltinType image_type; /* map [0, 2 * pi) to [0, 4) */ angle = round (2 * angle / G_PI); switch (((int) angle) & 3) { case 0: image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_UP; break; case 1: image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_RIGHT; break; case 2: image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_DOWN; break; case 3: image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_LEFT; break; default: g_assert_not_reached (); image_type = GTK_CSS_IMAGE_BUILTIN_ARROW_UP; break; } gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, size, size, image_type); }
static void gtk_do_render_handle (GtkStyleContext *context, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { GtkCssImageBuiltinType type; gtk_render_background (context, cr, x, y, width, height); gtk_render_frame (context, cr, x, y, width, height); if (gtk_style_context_has_class (context, GTK_STYLE_CLASS_GRIP)) { GtkJunctionSides sides = gtk_style_context_get_junction_sides (context); /* order is important here for when too many (or too few) sides are set */ if ((sides & GTK_JUNCTION_CORNER_BOTTOMRIGHT) == GTK_JUNCTION_CORNER_BOTTOMRIGHT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOMRIGHT; else if ((sides & GTK_JUNCTION_CORNER_TOPRIGHT) == GTK_JUNCTION_CORNER_TOPRIGHT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_TOPRIGHT; else if ((sides & GTK_JUNCTION_CORNER_BOTTOMLEFT) == GTK_JUNCTION_CORNER_BOTTOMLEFT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOMLEFT; else if ((sides & GTK_JUNCTION_CORNER_TOPLEFT) == GTK_JUNCTION_CORNER_TOPLEFT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_TOPLEFT; else if (sides & GTK_JUNCTION_RIGHT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_RIGHT; else if (sides & GTK_JUNCTION_BOTTOM) type = GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOM; else if (sides & GTK_JUNCTION_TOP) type = GTK_CSS_IMAGE_BUILTIN_GRIP_TOP; else if (sides & GTK_JUNCTION_LEFT) type = GTK_CSS_IMAGE_BUILTIN_GRIP_LEFT; else type = GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOMRIGHT; } else if (gtk_style_context_has_class (context, GTK_STYLE_CLASS_PANE_SEPARATOR)) { type = GTK_CSS_IMAGE_BUILTIN_PANE_SEPARATOR; } else { type = GTK_CSS_IMAGE_BUILTIN_HANDLE; } gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, width, height, type); }
/** * gtk_render_activity: * @context: a #GtkStyleContext * @cr: a #cairo_t * @x: X origin of the rectangle * @y: Y origin of the rectangle * @width: rectangle width * @height: rectangle height * * Renders an activity indicator (such as in #GtkSpinner). * The state %GTK_STATE_FLAG_CHECKED determines whether there is * activity going on. * * Since: 3.0 **/ void gtk_render_activity (GtkStyleContext *context, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); g_return_if_fail (cr != NULL); if (width <= 0 || height <= 0) return; gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, width, height, GTK_CSS_IMAGE_BUILTIN_SPINNER); }
static void gtk_do_render_check (GtkStyleContext *context, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { GtkStateFlags state; GtkCssImageBuiltinType image_type; state = gtk_style_context_get_state (context); if (state & GTK_STATE_FLAG_INCONSISTENT) image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT; else if (state & GTK_STATE_FLAG_CHECKED) image_type = GTK_CSS_IMAGE_BUILTIN_CHECK_CHECKED; else image_type = GTK_CSS_IMAGE_BUILTIN_CHECK; gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, width, height, image_type); }
static void gtk_do_render_expander (GtkStyleContext *context, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { GtkCssImageBuiltinType image_type; GtkStateFlags state; state = gtk_style_context_get_state (context); if (gtk_style_context_has_class (context, "horizontal")) { if (state & GTK_STATE_FLAG_DIR_RTL) image_type = (state & GTK_STATE_FLAG_CHECKED) ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT_EXPANDED : GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT; else image_type = (state & GTK_STATE_FLAG_CHECKED) ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT_EXPANDED : GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT; } else { if (state & GTK_STATE_FLAG_DIR_RTL) image_type = (state & GTK_STATE_FLAG_CHECKED) ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT_EXPANDED : GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT; else image_type = (state & GTK_STATE_FLAG_CHECKED) ? GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT_EXPANDED : GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT; } gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, width, height, image_type); }
static void gtk_do_render_handle (GtkStyleContext *context, cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height) { GtkCssImageBuiltinType type; gtk_render_background (context, cr, x, y, width, height); gtk_render_frame (context, cr, x, y, width, height); if (gtk_style_context_has_class (context, GTK_STYLE_CLASS_PANE_SEPARATOR)) { type = GTK_CSS_IMAGE_BUILTIN_PANE_SEPARATOR; } else { type = GTK_CSS_IMAGE_BUILTIN_HANDLE; } gtk_css_style_render_icon (gtk_style_context_lookup_style (context), cr, x, y, width, height, type); }