mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 14:10:30 +00:00
386b63b85d
In 99.9% of all cases, these are just NULL, NULL. So just do away with these arguments, people can use the setters for the rare cases where they want the scrolled window to use a different adjustment.
102 lines
3.4 KiB
C
102 lines
3.4 KiB
C
/* Overlay/Decorative Overlay
|
|
*
|
|
* Another example of an overlay with some decorative
|
|
* and some interactive controls.
|
|
*/
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
static GtkTextTag *tag;
|
|
|
|
static void
|
|
margin_changed (GtkAdjustment *adjustment,
|
|
GtkTextView *text)
|
|
{
|
|
gint value;
|
|
|
|
value = (gint)gtk_adjustment_get_value (adjustment);
|
|
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (text), value);
|
|
g_object_set (tag, "pixels-above-lines", value, NULL);
|
|
}
|
|
|
|
GtkWidget *
|
|
do_overlay2 (GtkWidget *do_widget)
|
|
{
|
|
static GtkWidget *window = NULL;
|
|
|
|
if (!window)
|
|
{
|
|
GtkWidget *overlay;
|
|
GtkWidget *sw;
|
|
GtkWidget *text;
|
|
GtkWidget *image;
|
|
GtkWidget *scale;
|
|
GtkTextBuffer *buffer;
|
|
GtkTextIter start, end;
|
|
GtkAdjustment *adjustment;
|
|
|
|
window = gtk_window_new ();
|
|
gtk_window_set_default_size (GTK_WINDOW (window), 500, 510);
|
|
gtk_window_set_title (GTK_WINDOW (window), "Decorative Overlay");
|
|
|
|
overlay = gtk_overlay_new ();
|
|
sw = gtk_scrolled_window_new ();
|
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
|
GTK_POLICY_AUTOMATIC,
|
|
GTK_POLICY_AUTOMATIC);
|
|
text = gtk_text_view_new ();
|
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
|
|
|
|
gtk_text_buffer_set_text (buffer, "Dear diary...", -1);
|
|
|
|
tag = gtk_text_buffer_create_tag (buffer, "top-margin",
|
|
"pixels-above-lines", 0,
|
|
NULL);
|
|
gtk_text_buffer_get_start_iter (buffer, &start);
|
|
end = start;
|
|
gtk_text_iter_forward_word_end (&end);
|
|
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
|
|
|
|
gtk_window_set_child (GTK_WINDOW (window), overlay);
|
|
gtk_overlay_set_child (GTK_OVERLAY (overlay), sw);
|
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), text);
|
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
|
|
|
image = gtk_picture_new_for_resource ("/overlay2/decor1.png");
|
|
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), image);
|
|
gtk_widget_set_can_target (image, FALSE);
|
|
gtk_widget_set_halign (image, GTK_ALIGN_START);
|
|
gtk_widget_set_valign (image, GTK_ALIGN_START);
|
|
|
|
image = gtk_picture_new_for_resource ("/overlay2/decor2.png");
|
|
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), image);
|
|
gtk_widget_set_can_target (image, FALSE);
|
|
gtk_widget_set_halign (image, GTK_ALIGN_END);
|
|
gtk_widget_set_valign (image, GTK_ALIGN_END);
|
|
|
|
adjustment = gtk_adjustment_new (0, 0, 100, 1, 1, 0);
|
|
g_signal_connect (adjustment, "value-changed",
|
|
G_CALLBACK (margin_changed), text);
|
|
|
|
scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
|
|
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
|
|
gtk_widget_set_size_request (scale, 120, -1);
|
|
gtk_widget_set_margin_start (scale, 20);
|
|
gtk_widget_set_margin_end (scale, 20);
|
|
gtk_widget_set_margin_bottom (scale, 20);
|
|
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), scale);
|
|
gtk_widget_set_halign (scale, GTK_ALIGN_START);
|
|
gtk_widget_set_valign (scale, GTK_ALIGN_END);
|
|
gtk_widget_set_tooltip_text (scale, "Margin");
|
|
|
|
gtk_adjustment_set_value (adjustment, 100);
|
|
}
|
|
|
|
if (!gtk_widget_get_visible (window))
|
|
gtk_widget_show (window);
|
|
else
|
|
gtk_window_destroy (GTK_WINDOW (window));
|
|
|
|
return window;
|
|
}
|