Add a GtkStack example to gtk-demo

This commit is contained in:
Matthias Clasen 2013-04-21 21:16:24 -04:00
parent 85ccb93b9f
commit 49511c7f42
4 changed files with 136 additions and 0 deletions

View File

@ -43,6 +43,7 @@ demos = \
search_entry.c \ search_entry.c \
sizegroup.c \ sizegroup.c \
spinner.c \ spinner.c \
stack.c \
stock_browser.c \ stock_browser.c \
textview.c \ textview.c \
textscroll.c \ textscroll.c \
@ -110,6 +111,7 @@ RESOURCES= $(demos) \
application.ui \ application.ui \
demo.ui \ demo.ui \
menus.ui \ menus.ui \
stack.ui \
theming.ui \ theming.ui \
alphatest.png \ alphatest.png \
apple-red.png \ apple-red.png \

View File

@ -55,6 +55,9 @@
<file preprocess="to-pixdata">gnome-fs-directory.png</file> <file preprocess="to-pixdata">gnome-fs-directory.png</file>
<file preprocess="to-pixdata">gnome-fs-regular.png</file> <file preprocess="to-pixdata">gnome-fs-regular.png</file>
</gresource> </gresource>
<gresource prefix="/stack">
<file>stack.ui</file>
</gresource>
<gresource prefix="/images"> <gresource prefix="/images">
<file>alphatest.png</file> <file>alphatest.png</file>
<file>floppybuddy.gif</file> <file>floppybuddy.gif</file>
@ -110,6 +113,7 @@
<file>rotated_text.c</file> <file>rotated_text.c</file>
<file>search_entry.c</file> <file>search_entry.c</file>
<file>sizegroup.c</file> <file>sizegroup.c</file>
<file>stack.c</file>
<file>spinner.c</file> <file>spinner.c</file>
<file>stock_browser.c</file> <file>stock_browser.c</file>
<file>textview.c</file> <file>textview.c</file>

48
demos/gtk-demo/stack.c Normal file
View File

@ -0,0 +1,48 @@
/* Stack
*
* GtkStack is a container that shows a single child at a time,
* with nice transitions when the visible child changes.
*
* GtkStackSwitcher adds buttons to control which child is visible.
*/
#include <gtk/gtk.h>
static GtkBuilder *builder;
GtkWidget *
do_stack (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GError *err = NULL;
if (!window)
{
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder, "/stack/stack.ui", &err);
if (err)
{
g_error ("ERROR: %s\n", err->message);
return NULL;
}
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
else
{
gtk_widget_destroy (window);
window = NULL;
}
return window;
}

82
demos/gtk-demo/stack.ui Normal file
View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.6 -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">GtkStack</property>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkStackSwitcher" id="switcher">
<property name="visible">True</property>
<property name="stack">stack</property>
<property name="halign">center</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="transition-type">crossfade</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin-top">20</property>
<property name="margin-bottom">20</property>
<property name="resource">/application/gtk-logo-48.png</property>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">Page 1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="checkbutton1">
<property name="label" translatable="yes">Page 2</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">Page 2</property>
</packing>
</child>
<child>
<object class="GtkSpinner" id="spinner1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="active">True</property>
</object>
<packing>
<property name="name">page3</property>
<property name="icon-name">face-laugh-symbolic</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>