[libgepub] Text margin control in the widget
- From: Daniel Garcia Moreno <danigm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgepub] Text margin control in the widget
- Date: Sun, 21 May 2017 08:46:38 +0000 (UTC)
commit eb872c4a6ef82531d1a4bfb863fd1edbc8c35a9a
Author: Daniel GarcĂa Moreno <danigm wadobo com>
Date: Sun May 21 10:43:55 2017 +0200
Text margin control in the widget
With this new methods we can control the book left and right margins:
gepub_widget_set_margin and gepub_widget_get_margin
I've also added a fixed top and bottom margin of 20px, and I've set the
default margin to 20px;
libgepub/gepub-widget.c | 67 +++++++++++++++++++++++++++++++++++++---------
libgepub/gepub-widget.h | 4 +++
tests/test-gepub.c | 18 ++++++++++++
3 files changed, 76 insertions(+), 13 deletions(-)
---
diff --git a/libgepub/gepub-widget.c b/libgepub/gepub-widget.c
index d87770d..1db1863 100644
--- a/libgepub/gepub-widget.c
+++ b/libgepub/gepub-widget.c
@@ -32,6 +32,7 @@ struct _GepubWidget {
gint chapter_pos; // position in the chapter, a percentage based on chapter_length
gint length;
gint init_chapter_pos;
+ gint margin;
};
struct _GepubWidgetClass {
@@ -113,7 +114,6 @@ pagination_initialize_finished (GObject *object,
if (widget->chapter_pos) {
adjust_chapter_pos (widget);
}
-
} else {
g_warning ("Error running javascript: unexpected return value");
}
@@ -164,20 +164,32 @@ reload_length_cb (GtkWidget *widget,
NULL, get_length_finished, (gpointer)widget);
if (gwidget->paginate) {
+ gint m = GEPUB_WIDGET (widget)->margin;
+ gchar *script;
+
+ script = g_strdup_printf (
+ "document.body.style.overflow = 'hidden';"
+ "document.body.style.margin = '20px 0px 20px 0px';"
+ "document.body.style.padding = '0px';"
+ "document.body.style.columnWidth = window.innerWidth+'px';"
+ "document.body.style.height = (window.innerHeight - 40) +'px';"
+ "document.body.style.columnGap = '0px';"
+
+ "if (!document.querySelector('#gepubwrap'))"
+ "document.body.innerHTML = '<div id=\"gepubwrap\">' + document.body.innerHTML + '</div>';"
+
+ "document.querySelector('#gepubwrap').style.marginLeft = '%dpx';"
+ "document.querySelector('#gepubwrap').style.marginRight = '%dpx';"
+
+ "document.body.scrollWidth"
+ ,
+ m, m);
+
webkit_web_view_run_javascript (web_view,
- // TODO: Adjusts to show a little margin at least
- "document.querySelector('body').setAttribute('style', '"
- "overflow: hidden;"
- "column-gap: 0px;"
- "margin-left: 0px;"
- "margin-right: 0px;"
- "padding-left: 0px;"
- "padding-right: 0px;"
- "');"
- "document.querySelector('body').style.columnWidth = window.innerWidth+'px';"
- "document.querySelector('body').style.height = window.innerHeight+'px';"
- "document.querySelector('body').scrollWidth",
+ script,
NULL, pagination_initialize_finished, (gpointer)widget);
+
+ g_free (script);
}
}
@@ -301,6 +313,7 @@ gepub_widget_init (GepubWidget *widget)
widget->chapter_pos = 0;
widget->length = 0;
widget->init_chapter_pos = 0;
+ widget->margin = 20;
}
static void
@@ -619,3 +632,31 @@ gepub_widget_set_pos (GepubWidget *widget,
g_object_notify_by_pspec (G_OBJECT (widget), properties[PROP_CHAPTER_POS]);
}
+
+
+/**
+ * gepub_widget_set_margin:
+ * @widget: a #GepubWidget
+ * @margin: the margin in pixels
+ *
+ * Sets the widget left and right margin
+ */
+void
+gepub_widget_set_margin (GepubWidget *widget,
+ gint margin)
+{
+ widget->margin = margin;
+ reload_length_cb (GTK_WIDGET (widget), NULL, NULL);
+}
+
+/**
+ * gepub_widget_get_margin:
+ * @widget: a #GepubWidget
+ *
+ * Gets the widget left and right margin
+ */
+gint
+gepub_widget_get_margin (GepubWidget *widget)
+{
+ return widget->margin;
+}
diff --git a/libgepub/gepub-widget.h b/libgepub/gepub-widget.h
index 67ed53a..3b1792f 100644
--- a/libgepub/gepub-widget.h
+++ b/libgepub/gepub-widget.h
@@ -62,6 +62,10 @@ void gepub_widget_set_pos (GepubWidget *wid
gboolean gepub_widget_page_next (GepubWidget *widget);
gboolean gepub_widget_page_prev (GepubWidget *widget);
+gint gepub_widget_get_margin (GepubWidget *widget);
+void gepub_widget_set_margin (GepubWidget *widget,
+ gint margin);
+
G_END_DECLS
#endif /* __GEPUB_WIDGET_H__ */
diff --git a/tests/test-gepub.c b/tests/test-gepub.c
index 8f6864b..6c7a025 100644
--- a/tests/test-gepub.c
+++ b/tests/test-gepub.c
@@ -91,6 +91,10 @@ button_pressed (GtkButton *button, GepubWidget *widget)
gepub_widget_page_prev (widget);
} else if (!strcmp (gtk_button_get_label (button), "page >")) {
gepub_widget_page_next (widget);
+ } else if (!strcmp (gtk_button_get_label (button), "margin +")) {
+ gepub_widget_set_margin (widget, gepub_widget_get_margin (widget) + 20);
+ } else if (!strcmp (gtk_button_get_label (button), "margin -")) {
+ gepub_widget_set_margin (widget, gepub_widget_get_margin (widget) - 20);
}
update_text (doc);
//print_replaced_text (doc);
@@ -259,12 +263,16 @@ main (int argc, char **argv)
GtkWidget *vbox;
GtkWidget *hbox;
+ GtkWidget *hbox2;
GtkWidget *b_next;
GtkWidget *b_prev;
GtkWidget *p_next;
GtkWidget *p_prev;
+ GtkWidget *margin1;
+ GtkWidget *margin2;
+
GtkWidget *paginate;
GtkTextBuffer *buffer;
@@ -307,6 +315,7 @@ main (int argc, char **argv)
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
+ hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
b_prev = gtk_button_new_with_label ("< chapter");
g_signal_connect (b_prev, "clicked", (GCallback)button_pressed, GEPUB_WIDGET (widget));
b_next = gtk_button_new_with_label ("chapter >");
@@ -317,6 +326,11 @@ main (int argc, char **argv)
p_next = gtk_button_new_with_label ("page >");
g_signal_connect (p_next, "clicked", (GCallback)button_pressed, GEPUB_WIDGET (widget));
+ margin1 = gtk_button_new_with_label ("margin +");
+ g_signal_connect (margin1, "clicked", (GCallback)button_pressed, GEPUB_WIDGET (widget));
+ margin2 = gtk_button_new_with_label ("margin -");
+ g_signal_connect (margin2, "clicked", (GCallback)button_pressed, GEPUB_WIDGET (widget));
+
PAGE_LABEL = gtk_label_new ("0");
g_signal_connect_swapped (widget, "notify",
@@ -334,7 +348,11 @@ main (int argc, char **argv)
gtk_container_add (GTK_CONTAINER (hbox), PAGE_LABEL);
gtk_container_add (GTK_CONTAINER (hbox), paginate);
+ gtk_container_add (GTK_CONTAINER (hbox2), margin1);
+ gtk_container_add (GTK_CONTAINER (hbox2), margin2);
+
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE, 5);
textview = gtk_text_view_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]