Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Gnome/demos/gtk-demo/   (Gnome Linux Desktop Version 4.23.2©)  Datei vom 30.5.2026 mit Größe 3 kB image not shown  

Quelle  svg_widget.c

  Sprache: C
 

/* SVG
 *
 * This demo uses a GtkSvgWidget to display a
 * scalable, animated, interactive SVG image.
 *
 * Hover over the faces of the cube to see
 * tooltips, click on them to activate links.
 *
 * Keyboard navigation with Tab and Enter works
 * as well.
 */


#include <gtk/gtk.h>

static void
open_response_cb (GObject      *source,
                  GAsyncResult *result,
                  void         *data)
{
  GtkFileDialog *dialog = GTK_FILE_DIALOG (source);
  GtkWidget *window = data;
  GFile *file;

  file = gtk_file_dialog_open_finish (dialog, result, NULL);
  if (file)
    {
      GtkSvgWidget *widget;
      GBytes *bytes;

      widget = GTK_SVG_WIDGET (gtk_window_get_child (GTK_WINDOW (window)));

      bytes = g_file_load_bytes (file, NULL, NULL, NULL);
      gtk_svg_widget_load_from_bytes (widget, bytes);
      g_bytes_unref (bytes);

      g_object_unref (file);
    }
}

static void
show_file_open (GtkWidget *button,
                GtkWidget *window)
{
  GtkFileFilter *filter;
  GtkFileDialog *dialog;
  GListStore *filters;

  dialog = gtk_file_dialog_new ();
  gtk_file_dialog_set_title (dialog, "Open SVG");

  filter = gtk_file_filter_new ();
  gtk_file_filter_add_mime_type (filter, "image/svg+xml");
  gtk_file_filter_add_mime_type (filter, "image/x-gtk-path-animation");
  gtk_file_filter_add_pattern (filter, "*.gpa");
  filters = g_list_store_new (GTK_TYPE_FILE_FILTER);
  g_list_store_append (filters, filter);
  g_object_unref (filter);
  gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters));
  g_object_unref (filters);

  gtk_file_dialog_open (dialog,
                        GTK_WINDOW (gtk_widget_get_root (button)),
                        NULL,
                        open_response_cb, window);
}

static void
launched_cb (GObject      *source,
             GAsyncResult *result,
             gpointer      data)
{
  GtkUriLauncher *launcher = GTK_URI_LAUNCHER (source);
  GtkWindow *window = data;
  GError *error = NULL;

  if (!gtk_uri_launcher_launch_finish (launcher, result, &error))
    {
      if (g_error_matches (error, GTK_DIALOG_ERROR, GTK_DIALOG_ERROR_FAILED))
        {
          GtkAlertDialog *alert = gtk_alert_dialog_new ("Opening url failed");
          gtk_alert_dialog_set_detail (alert, error->message);
          g_error_free (error);
          gtk_alert_dialog_show (alert, window);
          g_object_unref (alert);
        }
    }
}

static void
activate_cb (GtkSvgWidget *widget,
             const char   *id,
             const char   *url,
             GtkWindow    *window)
{
  if (url && g_str_has_prefix (url, "http://"))
    {
      GtkUriLauncher *launcher = gtk_uri_launcher_new (url);
      gtk_uri_launcher_launch (launcher, window, NULL, launched_cb, window);
      g_object_unref (launcher);
    }
}

static GtkWidget *window;

GtkWidget *
do_svg_widget (GtkWidget *do_widget)
{
  GtkWidget *header;
  GtkWidget *button;
  GtkWidget *widget;

  if (!window)
    {
      window = gtk_window_new ();
      header = gtk_header_bar_new ();
      gtk_window_set_titlebar (GTK_WINDOW (window), header);
      gtk_window_set_default_size (GTK_WINDOW (window), 330330);
      gtk_window_set_title (GTK_WINDOW (window), "SVG");
      g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);

      button = gtk_button_new_with_mnemonic ("_Open");
      gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);

      g_signal_connect (button, "clicked", G_CALLBACK (show_file_open), window);

      widget = GTK_WIDGET (gtk_svg_widget_new ());
      gtk_window_set_child (GTK_WINDOW (window), widget);

      g_object_set (widget, "resource""/svg_widget/gtk-logo-interactive.svg", NULL);
      gtk_widget_set_has_tooltip (widget, TRUE);

      g_signal_connect (widget, "activate", G_CALLBACK (activate_cb), window);
    }

  if (!gtk_widget_get_visible (window))
    gtk_window_present (GTK_WINDOW (window));
  else
    gtk_window_destroy (GTK_WINDOW (window));

  return window;
}

Messung V0.5 in Prozent
C=98 H=94 G=95

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-07-02) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.