From 52ff709e14ee5d5ea1c15fc82e5ec63a8f7ca7e5 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Sun, 5 Oct 2014 19:36:20 +0200 Subject: [PATCH 1/2] Refactor ag_chart_export_jpg_to_file() as ag_chart_export_to_image() It is capable of saving in any format (as long as GdkPixbuf supports it) --- src/ag-chart.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/ag-chart.c b/src/ag-chart.c index 60ea2cc..d3e9d6b 100644 --- a/src/ag-chart.c +++ b/src/ag-chart.c @@ -1983,11 +1983,12 @@ ag_chart_get_pixbuf(AgChart *chart, return pixbuf; } -void -ag_chart_export_jpg_to_file(AgChart *chart, - GFile *file, - AgDisplayTheme *theme, - GError **err) +static void +ag_chart_export_to_image(AgChart *chart, + GFile *file, + AgDisplayTheme *theme, + gchar *format, + GError **err) { gchar *jpg; gsize jpg_length; @@ -2003,7 +2004,7 @@ ag_chart_export_jpg_to_file(AgChart *chart, pixbuf, &jpg, &jpg_length, - "jpeg", + format, err, NULL )) { @@ -2029,6 +2030,15 @@ ag_chart_export_jpg_to_file(AgChart *chart, g_free(jpg); } +void +ag_chart_export_jpg_to_file(AgChart *chart, + GFile *file, + AgDisplayTheme *theme, + GError **err) +{ + ag_chart_export_to_image(chart, file, theme, "jpeg", err); +} + void ag_chart_set_note(AgChart *chart, const gchar *note) { From f4749dea65f3030b7dbfe08af2b27efbdfde9d1c Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Sun, 5 Oct 2014 19:36:44 +0200 Subject: [PATCH 2/2] Add PNG save support --- TODO.org | 4 ++-- src/ag-chart.c | 9 +++++++++ src/ag-chart.h | 5 +++++ src/ag-window.c | 4 ++++ src/astrognome.c | 6 ++++++ src/astrognome.h | 1 + 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/TODO.org b/TODO.org index bcc06f8..811551e 100644 --- a/TODO.org +++ b/TODO.org @@ -152,11 +152,11 @@ dependent on the chart's size (currently, for the big chart it's * Regiomontanus import :version_2.0: -* Chart export as different image types [2/3] :version_1.0: +* Chart export as different image types [3/3] :version_1.0: - [X] SVG - [X] JPEG - - [ ] PNG + - [X] PNG Other formats supported by GDK-PixBuf are considered useless, and most people should be able to open these types. diff --git a/src/ag-chart.c b/src/ag-chart.c index d3e9d6b..98f5d20 100644 --- a/src/ag-chart.c +++ b/src/ag-chart.c @@ -2039,6 +2039,15 @@ ag_chart_export_jpg_to_file(AgChart *chart, ag_chart_export_to_image(chart, file, theme, "jpeg", err); } +void +ag_chart_export_png_to_file(AgChart *chart, + GFile *file, + AgDisplayTheme *theme, + GError **err) +{ + ag_chart_export_to_image(chart, file, theme, "png", err); +} + void ag_chart_set_note(AgChart *chart, const gchar *note) { diff --git a/src/ag-chart.h b/src/ag-chart.h index 6082762..a3875b6 100644 --- a/src/ag-chart.h +++ b/src/ag-chart.h @@ -110,6 +110,11 @@ void ag_chart_export_jpg_to_file(AgChart *chart, AgDisplayTheme *theme, GError **err); +void ag_chart_export_png_to_file(AgChart *chart, + GFile *file, + AgDisplayTheme *theme, + GError **err); + void ag_chart_set_name(AgChart *chart, const gchar *name); diff --git a/src/ag-window.c b/src/ag-window.c index e0a1b32..ec48320 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -922,6 +922,7 @@ ag_window_export_image(AgWindow *window, GError **err) NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_svg); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_jpg); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_png); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter_svg); gtk_dialog_set_default_response(GTK_DIALOG(fs), GTK_RESPONSE_ACCEPT); gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(fs), FALSE); @@ -953,6 +954,9 @@ ag_window_export_image(AgWindow *window, GError **err) } else if (filter == filter_jpg) { extension = ".jpg"; save_func = &ag_chart_export_jpg_to_file; + } else if (filter == filter_png) { + extension = ".png"; + save_func = &ag_chart_export_png_to_file; } else { g_warning("Unknown file type"); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter_svg); diff --git a/src/astrognome.c b/src/astrognome.c index e6c9757..a9c8daa 100644 --- a/src/astrognome.c +++ b/src/astrognome.c @@ -44,6 +44,7 @@ GtkFileFilter *filter_chart = NULL; GtkFileFilter *filter_hor = NULL; GtkFileFilter *filter_svg = NULL; GtkFileFilter *filter_jpg = NULL; +GtkFileFilter *filter_png = NULL; GtkTreeModel *country_list = NULL; GtkTreeModel *city_list = NULL; GHashTable *xinclude_positions; @@ -117,6 +118,11 @@ init_filters(void) gtk_file_filter_add_pattern(filter_jpg, "*.jpe"); gtk_file_filter_add_pattern(filter_jpg, "*.jpeg"); g_object_ref_sink(filter_jpg); + + filter_png = gtk_file_filter_new(); + gtk_file_filter_set_name(filter_png, _("PNG image")); + gtk_file_filter_add_pattern(filter_png, "*.png"); + g_object_ref_sink(filter_png); } static int diff --git a/src/astrognome.h b/src/astrognome.h index 1501fdb..5e6d497 100644 --- a/src/astrognome.h +++ b/src/astrognome.h @@ -33,6 +33,7 @@ extern GtkFileFilter *filter_chart; extern GtkFileFilter *filter_hor; extern GtkFileFilter *filter_svg; extern GtkFileFilter *filter_jpg; +extern GtkFileFilter *filter_png; extern GtkTreeModel *country_list; extern GtkTreeModel *city_list; extern const GswePlanet used_planets[];