Merge pull request #31 from gergelypolonkai/webkit2

Move to WebKit2
This commit is contained in:
Gergely Polonkai 2014-07-10 23:45:48 +02:00
commit e8ae023033
7 changed files with 143 additions and 31 deletions

View File

@ -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([

View File

@ -1,4 +1,6 @@
#include <glib/gi18n.h>
#include <webkit2/webkit2.h>
#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

View File

@ -3,7 +3,7 @@
#include <glib/gi18n.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <webkit/webkit.h>
#include <webkit2/webkit2.h>
#include <swe-glib.h>
@ -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),
"<html>" \
"<head>" \
"<title>No Chart</title>" \
"</head>" \
"<body>" \
"<h1>No Chart</h1>" \
"<p>No chart is loaded. Create one on the edit view, or open one from the application menu!</p>" \
"</body>" \
"</html>",
"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),
"<html>" \
"<head>" \
"<title>No Chart</title>" \
"</head>" \
"<body>" \
"<h1>No Chart</h1>" \
"<p>No chart is loaded. Create one on the " \
"edit view, or open one from the application menu!</p>" \
"</body>" \
"</html>",
NULL);
gtk_window_set_application(GTK_WINDOW(window), GTK_APPLICATION(app));
gtk_window_set_icon_name(GTK_WINDOW(window), "astrognome");

View File

@ -2,6 +2,8 @@
#define __AG_WINDOW_H__
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>
#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);

View File

@ -4,6 +4,7 @@
<file>ui/astrognome.ui</file>
<file>ui/ag-window.ui</file>
<file>ui/ag-preferences.ui</file>
<file>ui/chart-default.css</file>
<file>default-icons/planet-sun.svg</file>
</gresource>

View File

@ -568,15 +568,9 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="tab_chart">
<property name="shadow_type">in</property>
<child>
<object class="WebkitWebView" id="chart_web_view">
<property name="width_request">600</property>
<property name="height_request">600</property>
<signal name="context-menu" handler="ag_window_chart_context_cb" swapped="no"/>
</object>
</child>
<object class="GtkAlignment" id="tab_chart">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="name">chart</property>

View File

@ -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;
}