200 lines
6.4 KiB
C
200 lines
6.4 KiB
C
|
/* Layout Manager/Transformation
|
|||
|
* #Keywords: GtkLayoutManager, GskTransform
|
|||
|
*
|
|||
|
* This demo shows how to use transforms in a nontrivial
|
|||
|
* way with a custom layout manager. The layout manager places
|
|||
|
* icons on a sphere that can be rotated using arrow keys.
|
|||
|
*/
|
|||
|
|
|||
|
#include <gtk/gtk.h>
|
|||
|
|
|||
|
#include "demo2widget.h"
|
|||
|
#include "demo2layout.h"
|
|||
|
#include "demochild.h"
|
|||
|
|
|||
|
GtkWidget *
|
|||
|
do_layoutmanager2 (GtkWidget *parent)
|
|||
|
{
|
|||
|
static GtkWidget *window = NULL;
|
|||
|
|
|||
|
if (!window)
|
|||
|
{
|
|||
|
GtkWidget *widget;
|
|||
|
GtkWidget *child;
|
|||
|
const char *name[] = {
|
|||
|
"action-unavailable-symbolic",
|
|||
|
"address-book-new-symbolic",
|
|||
|
"application-exit-symbolic",
|
|||
|
"appointment-new-symbolic",
|
|||
|
"bookmark-new-symbolic",
|
|||
|
"call-start-symbolic",
|
|||
|
"call-stop-symbolic",
|
|||
|
"camera-switch-symbolic",
|
|||
|
"chat-message-new-symbolic",
|
|||
|
"color-select-symbolic",
|
|||
|
"contact-new-symbolic",
|
|||
|
"document-edit-symbolic",
|
|||
|
"document-new-symbolic",
|
|||
|
"document-open-recent-symbolic",
|
|||
|
"document-open-symbolic",
|
|||
|
"document-page-setup-symbolic",
|
|||
|
"document-print-preview-symbolic",
|
|||
|
"document-print-symbolic",
|
|||
|
"document-properties-symbolic",
|
|||
|
"document-revert-symbolic-rtl",
|
|||
|
"document-revert-symbolic",
|
|||
|
"document-save-as-symbolic",
|
|||
|
"document-save-symbolic",
|
|||
|
"document-send-symbolic",
|
|||
|
"edit-clear-all-symbolic",
|
|||
|
"edit-clear-symbolic-rtl",
|
|||
|
"edit-clear-symbolic",
|
|||
|
"edit-copy-symbolic",
|
|||
|
"edit-cut-symbolic",
|
|||
|
"edit-delete-symbolic",
|
|||
|
"edit-find-replace-symbolic",
|
|||
|
"edit-find-symbolic",
|
|||
|
"edit-paste-symbolic",
|
|||
|
"edit-redo-symbolic-rtl",
|
|||
|
"edit-redo-symbolic",
|
|||
|
"edit-select-all-symbolic",
|
|||
|
"edit-select-symbolic",
|
|||
|
"edit-undo-symbolic-rtl",
|
|||
|
"edit-undo-symbolic",
|
|||
|
"error-correct-symbolic",
|
|||
|
"find-location-symbolic",
|
|||
|
"folder-new-symbolic",
|
|||
|
"font-select-symbolic",
|
|||
|
"format-indent-less-symbolic-rtl",
|
|||
|
"format-indent-less-symbolic",
|
|||
|
"format-indent-more-symbolic-rtl",
|
|||
|
"format-indent-more-symbolic",
|
|||
|
"format-justify-center-symbolic",
|
|||
|
"format-justify-fill-symbolic",
|
|||
|
"format-justify-left-symbolic",
|
|||
|
"format-justify-right-symbolic",
|
|||
|
"format-text-bold-symbolic",
|
|||
|
"format-text-direction-symbolic-rtl",
|
|||
|
"format-text-direction-symbolic",
|
|||
|
"format-text-italic-symbolic",
|
|||
|
"format-text-strikethrough-symbolic",
|
|||
|
"format-text-underline-symbolic",
|
|||
|
"go-bottom-symbolic",
|
|||
|
"go-down-symbolic",
|
|||
|
"go-first-symbolic-rtl",
|
|||
|
"go-first-symbolic",
|
|||
|
"go-home-symbolic",
|
|||
|
"go-jump-symbolic-rtl",
|
|||
|
"go-jump-symbolic",
|
|||
|
"go-last-symbolic-rtl",
|
|||
|
"go-last-symbolic",
|
|||
|
"go-next-symbolic-rtl",
|
|||
|
"go-next-symbolic",
|
|||
|
"go-previous-symbolic-rtl",
|
|||
|
"go-previous-symbolic",
|
|||
|
"go-top-symbolic",
|
|||
|
"go-up-symbolic",
|
|||
|
"help-about-symbolic",
|
|||
|
"insert-image-symbolic",
|
|||
|
"insert-link-symbolic",
|
|||
|
"insert-object-symbolic",
|
|||
|
"insert-text-symbolic",
|
|||
|
"list-add-symbolic",
|
|||
|
"list-remove-all-symbolic",
|
|||
|
"list-remove-symbolic",
|
|||
|
"mail-forward-symbolic",
|
|||
|
"mail-mark-important-symbolic",
|
|||
|
"mail-mark-junk-symbolic",
|
|||
|
"mail-mark-notjunk-symbolic",
|
|||
|
"mail-message-new-symbolic",
|
|||
|
"mail-reply-all-symbolic",
|
|||
|
"mail-reply-sender-symbolic",
|
|||
|
"mail-send-receive-symbolic",
|
|||
|
"mail-send-symbolic",
|
|||
|
"mark-location-symbolic",
|
|||
|
"media-eject-symbolic",
|
|||
|
"media-playback-pause-symbolic",
|
|||
|
"media-playback-start-symbolic",
|
|||
|
"media-playback-stop-symbolic",
|
|||
|
"media-record-symbolic",
|
|||
|
"media-seek-backward-symbolic",
|
|||
|
"media-seek-forward-symbolic",
|
|||
|
"media-skip-backward-symbolic",
|
|||
|
"media-skip-forward-symbolic",
|
|||
|
"media-view-subtitles-symbolic",
|
|||
|
"object-flip-horizontal-symbolic",
|
|||
|
"object-flip-vertical-symbolic",
|
|||
|
"object-rotate-left-symbolic",
|
|||
|
"object-rotate-right-symbolic",
|
|||
|
"object-select-symbolic",
|
|||
|
"open-menu-symbolic",
|
|||
|
"process-stop-symbolic",
|
|||
|
"send-to-symbolic",
|
|||
|
"sidebar-hide-symbolic",
|
|||
|
"sidebar-show-symbolic",
|
|||
|
"star-new-symbolic",
|
|||
|
"system-log-out-symbolic",
|
|||
|
"system-reboot-symbolic",
|
|||
|
"system-run-symbolic",
|
|||
|
"system-search-symbolic",
|
|||
|
"system-shutdown-symbolic",
|
|||
|
"system-switch-user-symbolic",
|
|||
|
"tab-new-symbolic",
|
|||
|
"tools-check-spelling-symbolic",
|
|||
|
"value-decrease-symbolic",
|
|||
|
"value-increase-symbolic",
|
|||
|
"view-app-grid-symbolic",
|
|||
|
"view-conceal-symbolic",
|
|||
|
"view-continuous-symbolic",
|
|||
|
"view-dual-symbolic",
|
|||
|
"view-fullscreen-symbolic",
|
|||
|
"view-grid-symbolic",
|
|||
|
"view-list-bullet-symbolic",
|
|||
|
"view-list-ordered-symbolic",
|
|||
|
"view-list-symbolic",
|
|||
|
"view-mirror-symbolic",
|
|||
|
"view-more-horizontal-symbolic",
|
|||
|
"view-more-symbolic",
|
|||
|
"view-paged-symbolic",
|
|||
|
"view-pin-symbolic",
|
|||
|
"view-refresh-symbolic",
|
|||
|
"view-restore-symbolic",
|
|||
|
"view-reveal-symbolic",
|
|||
|
"view-sort-ascending-symbolic",
|
|||
|
"view-sort-descending-symbolic",
|
|||
|
"zoom-fit-best-symbolic",
|
|||
|
"zoom-in-symbolic",
|
|||
|
"zoom-original-symbolic",
|
|||
|
"zoom-out-symbolic",
|
|||
|
};
|
|||
|
int i;
|
|||
|
|
|||
|
window = gtk_window_new ();
|
|||
|
gtk_window_set_title (GTK_WINDOW (window), "Layout Manager — Transformation");
|
|||
|
gtk_window_set_default_size (GTK_WINDOW (window), 600, 620);
|
|||
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|||
|
|
|||
|
widget = demo2_widget_new ();
|
|||
|
|
|||
|
for (i = 0; i < 18 * 36; i++)
|
|||
|
{
|
|||
|
child = gtk_image_new_from_icon_name (name[i % G_N_ELEMENTS (name)]);
|
|||
|
gtk_widget_set_margin_start (child, 4);
|
|||
|
gtk_widget_set_margin_end (child, 4);
|
|||
|
gtk_widget_set_margin_top (child, 4);
|
|||
|
gtk_widget_set_margin_bottom (child, 4);
|
|||
|
demo2_widget_add_child (DEMO2_WIDGET (widget), child);
|
|||
|
}
|
|||
|
|
|||
|
gtk_window_set_child (GTK_WINDOW (window), widget);
|
|||
|
}
|
|||
|
|
|||
|
if (!gtk_widget_get_visible (window))
|
|||
|
gtk_widget_set_visible (window, TRUE);
|
|||
|
else
|
|||
|
gtk_window_destroy (GTK_WINDOW (window));
|
|||
|
|
|||
|
return window;
|
|||
|
|
|||
|
}
|