From 6724f68dcf78c6a44f22f7e8297ff4e76e8d7e9a Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Tue, 8 Jul 2014 21:04:45 +0200 Subject: [PATCH 1/5] Started transitioning to Webkit 2.0 Unfortunately, webkit_web_view_load_string() is not implemented in the 2.0 API, so trying with load_html() for now. Seems not to work with SVG images without tweaking. --- configure.ac | 2 +- src/ag-window.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index ada3c9d..a4531a5 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,7 @@ PKG_CHECK_MODULES([GOBJECT], [gobject-2.0]) PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.8]) PKG_CHECK_MODULES([LIBXML], [libxml-2.0]) PKG_CHECK_MODULES([LIBXSLT], [libexslt]) -PKG_CHECK_MODULES([WEBKIT], [webkitgtk-3.0]) +PKG_CHECK_MODULES([WEBKIT], [webkit2gtk-3.0]) PKG_CHECK_MODULES([SWE_GLIB], [swe-glib >= 2.0.0]) AC_CONFIG_FILES([ diff --git a/src/ag-window.c b/src/ag-window.c index 068aa65..82b9251 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include @@ -511,9 +511,9 @@ ag_window_redraw_chart(AgWindow *window) gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } else { - webkit_web_view_load_string( + webkit_web_view_load_html( WEBKIT_WEB_VIEW(priv->chart_web_view), - svg_content, "image/svg+xml", "UTF-8", "file://"); + svg_content, NULL); g_free(svg_content); } @@ -682,7 +682,8 @@ ag_window_init(AgWindow *window) g_signal_connect(G_OBJECT(main_settings), "changed::planets-char", G_CALLBACK(ag_window_display_changed), window); g_signal_connect(G_OBJECT(main_settings), "changed::aspects-char", G_CALLBACK(ag_window_display_changed), window); - webkit_web_view_load_string( + // TODO: translate this error message! + webkit_web_view_load_html( WEBKIT_WEB_VIEW(priv->chart_web_view), "" \ "" \ @@ -693,7 +694,7 @@ ag_window_init(AgWindow *window) "

No chart is loaded. Create one on the edit view, or open one from the application menu!

" \ "" \ "", - "text/html", "UTF-8", NULL); + NULL); gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), "edit"); priv->current_tab = priv->tab_edit; From e6aa43cba7a9170112af22031cdb4076197b0d3c Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Thu, 10 Jul 2014 23:20:23 +0200 Subject: [PATCH 2/5] Add class private to AgApp --- src/ag-app.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ag-app.c b/src/ag-app.c index 6ef26e9..a4d3d13 100644 --- a/src/ag-app.c +++ b/src/ag-app.c @@ -1,4 +1,6 @@ #include +#include + #include "ag-app.h" #include "ag-window.h" #include "ag-chart.h" @@ -6,7 +8,11 @@ #include "config.h" #include "astrognome.h" -G_DEFINE_TYPE(AgApp, ag_app, GTK_TYPE_APPLICATION); +typedef struct _AgAppPrivate { + WebKitWebViewGroup *web_view_group; +} AgAppPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE(AgApp, ag_app, GTK_TYPE_APPLICATION); GtkWindow * ag_app_peek_first_window(AgApp *app) From 3efb358a4f91a3751ac38534c35c3b168d4160df Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Thu, 10 Jul 2014 23:22:16 +0200 Subject: [PATCH 3/5] Copy the default chart CSS to the resource database --- src/ag.gresource.xml | 1 + src/resources/ui/chart-default.css | 72 ++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/resources/ui/chart-default.css diff --git a/src/ag.gresource.xml b/src/ag.gresource.xml index 28f286b..ce38542 100644 --- a/src/ag.gresource.xml +++ b/src/ag.gresource.xml @@ -4,6 +4,7 @@ ui/astrognome.ui ui/ag-window.ui ui/ag-preferences.ui + ui/chart-default.css default-icons/planet-sun.svg diff --git a/src/resources/ui/chart-default.css b/src/resources/ui/chart-default.css new file mode 100644 index 0000000..abadf5f --- /dev/null +++ b/src/resources/ui/chart-default.css @@ -0,0 +1,72 @@ +circle.thick { + fill: none; + stroke-width: 2.5; + stroke: #0000cc; +} + +circle.thin { + fill: none; + stroke-width: 1; + stroke: #0000cc; +} + +line.degree-thick { + stroke-width: 2; + stroke: #0000cc; +} + +line.degree-thin { + stroke-width: 1; + stroke: #0000cc; +} + +line.house-cusp { + stroke-width: 1; + stroke: #0000cc; +} + +.sign { + stroke-width: 2; + stroke-linecap: butt; + stroke-linejoin: bevel; +} + +.sign-fire { + fill: none; + stroke: #cc2222; +} + +.sign-earth { + fill: none; + stroke: #22cc22; +} + +.sign-air { + fill: none; + stroke: #cccc22; +} + +.sign-water { + fill: none; + stroke: #2222cc; +} + +line.axis { + stroke-width: 3; + stroke: #000000; +} + +line.axis-end { + marker-end: url(#arrow_end); +} + +line.planet-marker { + stroke-width: 1.5; + stroke: #555555; +} + +path.planet-symbol { + stroke-width: 2; + fill: none; + stroke: #000080; +} From b8cc90912dd5cee2fed986ebb4bee5b589d04c51 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Thu, 10 Jul 2014 23:24:33 +0200 Subject: [PATCH 4/5] =?UTF-8?q?Load=20default=20chart=20CSS=20to=20AgApp?= =?UTF-8?q?=E2=80=99s=20private=20member,=20web=5Fview=5Fgroup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will make sure at least one CSS is loaded for each web view created later. --- src/ag-app.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/ag-app.c b/src/ag-app.c index a4d3d13..c75319c 100644 --- a/src/ag-app.c +++ b/src/ag-app.c @@ -337,6 +337,32 @@ ag_app_new(void) static void ag_app_init(AgApp *app) { + AgAppPrivate *priv; + GBytes *css_data; + const gchar *css_source; + gsize css_length; + + priv = ag_app_get_instance_private(app); + priv->web_view_group = webkit_web_view_group_new(NULL); + + css_data = g_resources_lookup_data( + "/eu/polonkai/gergely/Astrognome/ui/chart-default.css", + G_RESOURCE_LOOKUP_FLAGS_NONE, + NULL + ); + + if ((css_source = g_bytes_get_data(css_data, &css_length)) != NULL) { + webkit_web_view_group_add_user_style_sheet( + priv->web_view_group, + css_source, + NULL, + NULL, + NULL, + WEBKIT_INJECTED_CONTENT_FRAMES_TOP_ONLY + ); + } + + g_bytes_unref(css_data); } static void From 2af46ece40073b8bed96470d5463202bb7217d45 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Thu, 10 Jul 2014 23:33:22 +0200 Subject: [PATCH 5/5] Remove WebKitWebView creation from Glade The Glade template cannot assign an already created WebKitWebViewGroup to the WebKitWebView it creates. Thus we need to create it manuallp --- src/ag-app.c | 3 ++- src/ag-window.c | 41 +++++++++++++++++++++-------------- src/ag-window.h | 4 +++- src/resources/ui/ag-window.ui | 12 +++------- 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/ag-app.c b/src/ag-app.c index c75319c..876572a 100644 --- a/src/ag-app.c +++ b/src/ag-app.c @@ -52,8 +52,9 @@ static GtkWidget * ag_app_create_window(AgApp *app) { GtkWidget *window; + AgAppPrivate *priv = ag_app_get_instance_private(app); - window = ag_window_new(app); + window = ag_window_new(app, priv->web_view_group); gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window)); gtk_widget_show_all(window); diff --git a/src/ag-window.c b/src/ag-window.c index 5f1f79b..387b69b 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -30,6 +30,7 @@ struct _AgWindowPrivate { GtkWidget *second; GtkWidget *timezone; + GtkWidget *tab_chart; GtkWidget *tab_edit; GtkWidget *current_tab; @@ -695,20 +696,6 @@ ag_window_init(AgWindow *window) g_signal_connect(G_OBJECT(main_settings), "changed::planets-char", G_CALLBACK(ag_window_display_changed), window); g_signal_connect(G_OBJECT(main_settings), "changed::aspects-char", G_CALLBACK(ag_window_display_changed), window); - // TODO: translate this error message! - webkit_web_view_load_html( - WEBKIT_WEB_VIEW(priv->chart_web_view), - "" \ - "" \ - "No Chart" \ - "" \ - "" \ - "

No Chart

" \ - "

No chart is loaded. Create one on the edit view, or open one from the application menu!

" \ - "" \ - "", - NULL); - gtk_stack_set_visible_child_name(GTK_STACK(priv->stack), "edit"); priv->current_tab = priv->tab_edit; g_object_set(priv->year_adjust, "lower", (gdouble)G_MININT, "upper", (gdouble)G_MAXINT, NULL); @@ -759,9 +746,13 @@ ag_window_class_init(AgWindowClass *klass) gtk_widget_class_bind_template_child_private(widget_class, AgWindow, west_long); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, latitude); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, longitude); - gtk_widget_class_bind_template_child_private(widget_class, AgWindow, chart_web_view); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, aspect_table); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, year_adjust); + gtk_widget_class_bind_template_child_private( + widget_class, + AgWindow, + tab_chart + ); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, stack); gtk_widget_class_bind_template_child_private(widget_class, AgWindow, note_buffer); } @@ -784,11 +775,29 @@ ag_window_configure_event_cb(GtkWidget *widget, GdkEventConfigure *event, gpoint } GtkWidget * -ag_window_new(AgApp *app) +ag_window_new(AgApp *app, WebKitWebViewGroup *web_view_group) { AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL); AgWindowPrivate *priv = ag_window_get_instance_private(window); + priv->chart_web_view = webkit_web_view_new_with_group(web_view_group); + gtk_container_add(GTK_CONTAINER(priv->tab_chart), priv->chart_web_view); + + // TODO: translate this error message! + webkit_web_view_load_html( + WEBKIT_WEB_VIEW(priv->chart_web_view), + "" \ + "" \ + "No Chart" \ + "" \ + "" \ + "

No Chart

" \ + "

No chart is loaded. Create one on the " \ + "edit view, or open one from the application menu!

" \ + "" \ + "", + NULL); + gtk_window_set_application(GTK_WINDOW(window), GTK_APPLICATION(app)); gtk_window_set_icon_name(GTK_WINDOW(window), "astrognome"); diff --git a/src/ag-window.h b/src/ag-window.h index 3376bdd..66c591b 100644 --- a/src/ag-window.h +++ b/src/ag-window.h @@ -2,6 +2,8 @@ #define __AG_WINDOW_H__ #include +#include + #include "ag-app.h" #include "ag-chart.h" @@ -32,7 +34,7 @@ struct _AgWindowClass { }; GType ag_window_get_type(void) G_GNUC_CONST; -GtkWidget *ag_window_new(AgApp *app); +GtkWidget *ag_window_new(AgApp *app, WebKitWebViewGroup *web_view_group); void ag_window_set_chart(AgWindow *window, AgChart *chart); AgChart *ag_window_get_chart(AgWindow *window); diff --git a/src/resources/ui/ag-window.ui b/src/resources/ui/ag-window.ui index d7673a2..418743e 100644 --- a/src/resources/ui/ag-window.ui +++ b/src/resources/ui/ag-window.ui @@ -568,15 +568,9 @@ - - in - - - 600 - 600 - - - + + True + False chart