diff options
author | Jonas Danielsson <jonas@threetimestwo.org> | 2015-11-12 11:58:14 +0100 |
---|---|---|
committer | Jiří Techet <techet@gmail.com> | 2015-11-16 21:03:29 +0100 |
commit | 8689ed647959defbfe11dec4b37736c5334a7547 (patch) | |
tree | 583c098d01a22b949a5f7ee70a4f7d97684e9f34 | |
parent | b6012f6a275e64b477319d926f80c4a5cb33add4 (diff) | |
download | libchamplain-8689ed647959defbfe11dec4b37736c5334a7547.tar.gz |
demos/launcher-gtk: Add export to png buton
https://bugzilla.gnome.org/show_bug.cgi?id=757350
-rw-r--r-- | demos/launcher-gtk.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/demos/launcher-gtk.c b/demos/launcher-gtk.c index 36c7db5..12a06c0 100644 --- a/demos/launcher-gtk.c +++ b/demos/launcher-gtk.c @@ -51,6 +51,7 @@ toggle_layer (GtkToggleButton *widget, { champlain_path_layer_set_visible (path_layer, TRUE); champlain_path_layer_set_visible (path, TRUE); + champlain_marker_layer_animate_in_all_markers (CHAMPLAIN_MARKER_LAYER (layer)); } else @@ -211,6 +212,51 @@ append_point (ChamplainPathLayer *layer, gdouble lon, gdouble lat) } static void +export_to_png_cb (GdkPixbuf *pixbuf, + GAsyncResult *res) +{ + gdk_pixbuf_save_to_stream_finish (res, NULL); +} + +static void +export_png (GtkButton *button, + ChamplainView *view) +{ + cairo_surface_t *surface; + GdkPixbuf *pixbuf; + GFileOutputStream *os; + GFile *file; + gint width, height; + + if (champlain_view_get_state (view) != CHAMPLAIN_STATE_DONE) + return; + + surface = champlain_view_to_surface (view, TRUE); + if (!surface) + return; + + width = cairo_image_surface_get_width (surface); + height = cairo_image_surface_get_height (surface); + pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, width, height); + if (!pixbuf) + return; + + file = g_file_new_for_path ("champlain-map.png"); + os = g_file_create (file, G_FILE_CREATE_NONE, NULL, NULL); + if (!os) + { + g_object_unref (pixbuf); + return; + } + + gdk_pixbuf_save_to_stream_async (pixbuf, + G_OUTPUT_STREAM (os), "png", + NULL, + (GAsyncReadyCallback) export_to_png_cb, + NULL); +} + +static void add_clicked (GtkButton *button, ChamplainView *view) { @@ -382,6 +428,12 @@ main (int argc, g_signal_connect (button, "clicked", G_CALLBACK (add_clicked), view); gtk_container_add (GTK_CONTAINER (bbox), button); + button = gtk_button_new (); + image = gtk_image_new_from_icon_name ("camera-photo-symbolic", GTK_ICON_SIZE_BUTTON); + gtk_button_set_image (GTK_BUTTON (button), image); + g_signal_connect (button, "clicked", G_CALLBACK (export_png), view); + gtk_container_add (GTK_CONTAINER (bbox), button); + button = gtk_image_new (); gtk_widget_set_size_request (button, 22, -1); g_signal_connect (view, "notify::state", G_CALLBACK (view_state_changed), |