X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=tests%2Fstyleexamples.c;h=e583ce8aead2f017e8586942731fc274b5460442;hb=a6d741b6a46f78e4a71cdcaf8cd42ce19846dba8;hp=b66add59aca9545ad4b72c63284a68327a85302c;hpb=8589c5c65e70fce2ac415c5f3b9f9808e89ed440;p=~andy%2Fgtk diff --git a/tests/styleexamples.c b/tests/styleexamples.c index b66add59a..e583ce8ae 100644 --- a/tests/styleexamples.c +++ b/tests/styleexamples.c @@ -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; @@ -226,7 +197,88 @@ draw_cb_slider (GtkWidget *widget, cairo_t *cr) 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; @@ -249,6 +301,14 @@ draw_cb (GtkWidget *widget, cairo_t *cr) 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; } @@ -257,6 +317,8 @@ int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *ebox; + GtkStyleContext *context; + GtkStyleProvider *provider; gtk_init (&argc, &argv); @@ -271,12 +333,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; }