]> Pileus Git - ~andy/gtk/blobdiff - tests/styleexamples.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / tests / styleexamples.c
index 248ca645dd5ded058943e32bd1c123c43e6e0d61..b3169f4e9c5d473e8ffc8dea3fed064e02d8c494 100644 (file)
@@ -97,24 +97,17 @@ draw_cb_expanders (GtkWidget *widget, cairo_t *cr)
 static gboolean
 draw_cb_background (GtkWidget *widget, cairo_t *cr)
 {
-  GtkStyleProvider *provider;
   GtkStyleContext *context;
 
   context = gtk_widget_get_style_context (widget);
 
   gtk_style_context_save (context);
 
-  provider = (GtkStyleProvider *)gtk_css_provider_new ();
-  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
-                                   "* {\n"
-                                   "   border-radius: 10;\n"
-                                   "   border-width: 0;\n"
-                                   "   background-image: -gtk-gradient (linear, left top, right bottom, from(#ff00ff), to(#aabbcc));\n"
-                                   "}\n", -1, NULL);
-  gtk_style_context_add_provider (context, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+  gtk_style_context_add_class (context, "background");
   gtk_style_context_set_junction_sides (context, 0);
   gtk_render_background (context, cr, 12, 12, 100, 100);
-  gtk_style_context_remove_provider (context, provider);
+  gtk_style_context_remove_class (context, "background");
+
   gtk_style_context_restore (context);
 
   return TRUE;
@@ -123,33 +116,12 @@ draw_cb_background (GtkWidget *widget, cairo_t *cr)
 static gboolean
 draw_cb_frame (GtkWidget *widget, cairo_t *cr)
 {
-  GtkStyleProvider *provider;
   GtkStyleContext *context;
 
   context = gtk_widget_get_style_context (widget);
 
   gtk_style_context_save (context);
 
-  provider = (GtkStyleProvider *)gtk_css_provider_new ();
-  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
-                                   ".frame1 {\n"
-                                   "   border-image: url('gradient1.png') 10 10 10 10 stretch;\n"
-                                   "}\n"
-                                   ".frame2 {\n"
-                                   "   border-style: solid;\n"
-                                   "   border-color: rgb(255,0,0);\n"
-                                   "   border-width: 10;\n"
-                                   "   border-radius: 10;\n"
-                                   "}\n"
-                                   ".frame3 {\n"
-                                   "   border-style: solid;\n"
-                                   "   border-color: rgb(0,0,0);\n"
-                                   "   border-width: 2;\n"
-                                   "   border-radius: 10;\n"
-                                   "}\n",
-                                   -1, NULL);
-  gtk_style_context_add_provider (context, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
   gtk_style_context_add_class (context, "frame1");
   gtk_style_context_set_junction_sides (context, 0);
   gtk_render_frame (context, cr, 12, 12, 50, 50);
@@ -166,7 +138,6 @@ draw_cb_frame (GtkWidget *widget, cairo_t *cr)
   gtk_render_frame (context, cr, 68, 74, 56, 50);
   gtk_style_context_remove_class (context, "frame3");
 
-  gtk_style_context_remove_provider (context, provider);
   gtk_style_context_restore (context);
 
   return TRUE;
@@ -177,21 +148,131 @@ static gboolean
 draw_cb_activity (GtkWidget *widget, cairo_t *cr)
 {
   GtkStyleContext *context;
+  GtkWidgetPath *path;
 
   context = gtk_widget_get_style_context (widget);
   gtk_style_context_save (context);
 
-  gtk_style_context_add_class (context, "spinner");
-  gtk_style_context_set_state (context, 0);
+  path = gtk_widget_path_new ();
+  gtk_widget_path_append_type (path, GTK_TYPE_SPINNER);
+  gtk_widget_path_iter_add_class (path, 0, "spinner");
+  gtk_style_context_set_path (context, path);
+  gtk_widget_path_free (path);
+
+  gtk_style_context_set_state (context, GTK_STATE_FLAG_ACTIVE);
   gtk_render_activity (context, cr, 12, 12, 12, 12);
-  gtk_style_context_set_state (context, GTK_STATE_FLAG_INSENSITIVE);
-  gtk_render_activity (context, cr, 36, 12, 12, 12);
 
   gtk_style_context_restore (context);
 
   return TRUE;
 }
 
+static gboolean
+draw_cb_slider (GtkWidget *widget, cairo_t *cr)
+{
+  GtkStyleContext *context;
+  GtkWidgetPath *path;
+
+  context = gtk_widget_get_style_context (widget);
+  gtk_style_context_save (context);
+
+  path = gtk_widget_path_new ();
+  gtk_widget_path_append_type (path, GTK_TYPE_SCALE);
+  gtk_widget_path_iter_add_class (path, 0, "slider");
+  gtk_widget_path_iter_add_class (path, 0, "scale");
+  gtk_style_context_set_path (context, path);
+  gtk_widget_path_free (path);
+
+  gtk_render_slider (context, cr, 12, 22, 30, 10, GTK_ORIENTATION_HORIZONTAL);
+  gtk_render_slider (context, cr, 54, 12, 10, 30, GTK_ORIENTATION_VERTICAL);
+
+  gtk_style_context_restore (context);
+
+  return TRUE;
+}
+
+static gboolean
+draw_cb_focus (GtkWidget *widget, cairo_t *cr)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (widget);
+
+  gtk_style_context_save (context);
+
+  gtk_render_focus (context, cr, 12, 12, 50, 50);
+
+  gtk_style_context_restore (context);
+
+  return TRUE;
+}
+
+static gboolean
+draw_cb_extension (GtkWidget *widget, cairo_t *cr)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (widget);
+
+  gtk_style_context_save (context);
+
+  gtk_style_context_add_class (context, "notebook");
+  gtk_style_context_add_region (context, GTK_STYLE_REGION_TAB, 0);
+
+  gtk_style_context_set_state (context, 0);
+  gtk_render_extension (context, cr, 26, 12, 24, 12, GTK_POS_BOTTOM);
+  gtk_render_extension (context, cr, 12, 26, 12, 24, GTK_POS_RIGHT);
+  gtk_render_extension (context, cr, 26, 52, 24, 12, GTK_POS_TOP);
+  gtk_render_extension (context, cr, 52, 26, 12, 24, GTK_POS_LEFT);
+
+  gtk_style_context_restore (context);
+
+  return TRUE;
+}
+
+static gboolean
+draw_cb_frame_gap (GtkWidget *widget, cairo_t *cr)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (widget);
+
+  gtk_style_context_save (context);
+
+  gtk_style_context_add_class (context, "frame");
+  gtk_style_context_set_junction_sides (context, 0);
+  gtk_render_frame_gap (context, cr, 12, 12, 50, 50, GTK_POS_TOP, 15, 35);
+  gtk_style_context_remove_class (context, "frame");
+
+  gtk_style_context_restore (context);
+
+  return TRUE;
+}
+
+static gboolean
+draw_cb_handles (GtkWidget *widget, cairo_t *cr)
+{
+  GtkStyleContext *context;
+
+  context = gtk_widget_get_style_context (widget);
+  gtk_style_context_save (context);
+
+  gtk_style_context_add_class (context, "paned");
+  gtk_render_handle (context, cr, 12, 22, 20, 10);
+  gtk_render_handle (context, cr, 44, 12, 10, 20);
+  gtk_style_context_remove_class (context, "paned");
+
+  gtk_style_context_add_class (context, "grip");
+  gtk_style_context_set_junction_sides (context, GTK_JUNCTION_CORNER_BOTTOMLEFT);
+  gtk_render_handle (context, cr, 12, 48, 12, 12);
+
+  gtk_style_context_set_junction_sides (context, GTK_JUNCTION_CORNER_BOTTOMRIGHT);
+  gtk_render_handle (context, cr, 40, 48, 12, 12);
+
+  gtk_style_context_restore (context);
+
+  return TRUE;
+}
 
 static char *what;
 
@@ -212,6 +293,16 @@ draw_cb (GtkWidget *widget, cairo_t *cr)
     return draw_cb_frame (widget, cr);
   else if (strcmp (what, "activity") == 0)
     return draw_cb_activity (widget, cr);
+  else if (strcmp (what, "slider") == 0)
+    return draw_cb_slider (widget, cr);
+  else if (strcmp (what, "focus") == 0)
+    return draw_cb_focus (widget, cr);
+  else if (strcmp (what, "extension") == 0)
+    return draw_cb_extension (widget, cr);
+  else if (strcmp (what, "frame-gap") == 0)
+    return draw_cb_frame_gap (widget, cr);
+  else if (strcmp (what, "handle") == 0)
+    return draw_cb_handles (widget, cr);
 
   return FALSE;
 }
@@ -220,6 +311,8 @@ int main (int argc, char *argv[])
 {
   GtkWidget *window;
   GtkWidget *ebox;
+  GtkStyleContext *context;
+  GtkStyleProvider *provider;
 
   gtk_init (&argc, &argv);
 
@@ -234,12 +327,45 @@ int main (int argc, char *argv[])
   gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), TRUE);
   gtk_container_add (GTK_CONTAINER (window), ebox);
   gtk_widget_set_name (ebox, "ebox");
+
+  context = gtk_widget_get_style_context (ebox);
+  provider = (GtkStyleProvider *)gtk_css_provider_new ();
+  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
+                                   ".frame1 {\n"
+                                   "   border-image: url('gradient1.png') 10 10 10 10 stretch;\n"
+                                   "}\n"
+                                   ".frame2 {\n"
+                                   "   border-style: solid;\n"
+                                   "   border-color: rgb(255,0,0);\n"
+                                   "   border-width: 10;\n"
+                                   "   border-radius: 10;\n"
+                                   "}\n"
+                                   ".frame3 {\n"
+                                   "   border-style: solid;\n"
+                                   "   border-color: rgb(0,0,0);\n"
+                                   "   border-width: 2;\n"
+                                   "   border-radius: 10;\n"
+                                   "}\n"
+                                   ".background {\n"
+                                   "   border-radius: 10;\n"
+                                   "   border-width: 0;\n"
+                                   "   background-image: -gtk-gradient (linear, left top, right bottom, from(#ff00ff), to(#aabbcc));\n"
+                                   "}\n"
+                                   ".frame {\n"
+                                   "   border-style: solid;\n"
+                                   "   border-width: 1;\n"
+                                   "   border-radius: 0;\n"
+                                   "}\n", -1, NULL);
+  gtk_style_context_add_provider (context, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
   g_signal_connect_after (ebox, "draw", G_CALLBACK (draw_cb), NULL);
 
   gtk_widget_show_all (window);
 
   gtk_main ();
 
+  gtk_style_context_remove_provider (context, provider);
+
   return 0;
 }