diff --git a/configure.ac b/configure.ac index d25bc95..5b9d78b 100644 --- a/configure.ac +++ b/configure.ac @@ -31,7 +31,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-app.c b/src/ag-app.c index 6ef26e9..876572a 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) @@ -46,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); @@ -331,6 +338,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 diff --git a/src/ag-window.c b/src/ag-window.c index 08247b7..387b69b 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include @@ -30,6 +30,7 @@ struct _AgWindowPrivate { GtkWidget *second; GtkWidget *timezone; + GtkWidget *tab_chart; GtkWidget *tab_edit; GtkWidget *current_tab; @@ -512,9 +513,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); } @@ -695,19 +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); - webkit_web_view_load_string( - 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!

" \ - "" \ - "", - "text/html", "UTF-8", 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); @@ -758,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); } @@ -783,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/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/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 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; +}