|
@@ -9,9 +9,7 @@ namespace PpubViewer {
|
|
|
private Adw.HeaderBar header_bar;
|
|
|
private Box box;
|
|
|
private Flap flap;
|
|
|
- private ClampScrollable clamp;
|
|
|
- private GtkCommonMark.MarkdownView markdown_view;
|
|
|
- private ScrolledWindow scrolled_window;
|
|
|
+ private DocumentView.DocumentViewManager document_view;
|
|
|
|
|
|
private Button back_button;
|
|
|
private Button forward_button;
|
|
@@ -19,7 +17,7 @@ namespace PpubViewer {
|
|
|
|
|
|
private Button menu_button;
|
|
|
private PopoverMenu menu;
|
|
|
- private SpinButton zoom_spin;
|
|
|
+ private ZoomSpinButton zoom_spin;
|
|
|
|
|
|
private Ppub.Publication publication;
|
|
|
private NavigationHistoryItem current_page = null;
|
|
@@ -35,8 +33,8 @@ namespace PpubViewer {
|
|
|
box.append (flap);
|
|
|
content = box;
|
|
|
header_bar.show_end_title_buttons = true;
|
|
|
- default_width = 600;
|
|
|
- default_height = 400;
|
|
|
+ default_width = 900;
|
|
|
+ default_height = 700;
|
|
|
header_bar.title_widget = window_title;
|
|
|
flap.separator = new Separator(Orientation.VERTICAL);
|
|
|
|
|
@@ -58,31 +56,20 @@ namespace PpubViewer {
|
|
|
menu_button = new Button.from_icon_name("open-menu-symbolic");
|
|
|
menu_button.clicked.connect(() => menu.popdown());
|
|
|
header_bar.pack_end(menu_button);
|
|
|
- var zoom_adjustment = new Adjustment(100, 80, 300, 10, 50, 0);
|
|
|
- zoom_adjustment.value_changed.connect(change_zoom);
|
|
|
- zoom_spin = new SpinButton(zoom_adjustment, 1, 0);
|
|
|
- header_bar.pack_end(zoom_spin);
|
|
|
-
|
|
|
|
|
|
- scrolled_window = new ScrolledWindow();
|
|
|
- scrolled_window.set_policy (PolicyType.NEVER, PolicyType.AUTOMATIC);
|
|
|
- scrolled_window.vexpand = true;
|
|
|
- clamp = new ClampScrollable ();
|
|
|
- clamp.maximum_size = 800;
|
|
|
- scrolled_window.child = clamp;
|
|
|
-
|
|
|
- var status_page = new StatusPage();
|
|
|
- status_page.vexpand = true;
|
|
|
- status_page.title = "PPUB Viewer";
|
|
|
- status_page.description = "Open a PPUB to view it here";
|
|
|
- status_page.icon_name = "text-x-generic-symbolic";
|
|
|
- flap.content = status_page;
|
|
|
-
|
|
|
- markdown_view = new GtkCommonMark.MarkdownView ();
|
|
|
- markdown_view.set_wrap_mode (WrapMode.WORD_CHAR);
|
|
|
- markdown_view.widget_embedded.connect(widget_embedded);
|
|
|
- markdown_view.link_activated.connect(link_clicked);
|
|
|
- clamp.child = markdown_view;
|
|
|
+ var zoom_squeezer = new Squeezer();
|
|
|
+ zoom_squeezer.transition_type = SqueezerTransitionType.CROSSFADE;
|
|
|
+ zoom_spin = new ZoomSpinButton(false);
|
|
|
+ var zoom_spin_small = new ZoomSpinButton(true);
|
|
|
+ zoom_spin_small.adjustment = zoom_spin.adjustment;
|
|
|
+ zoom_squeezer.add(zoom_spin);
|
|
|
+ zoom_squeezer.add(zoom_spin_small);
|
|
|
+ zoom_spin.zoom_level_changed.connect(change_zoom);
|
|
|
+ header_bar.pack_end(zoom_squeezer);
|
|
|
+
|
|
|
+ document_view = new DocumentView.DocumentViewManager();
|
|
|
+ document_view.link_clicked.connect(link_clicked);
|
|
|
+ flap.content = document_view;
|
|
|
|
|
|
Gtk.Settings.get_default().notify["gtk-application-prefer-dark-theme"].connect(() => configure_tags());
|
|
|
|
|
@@ -119,20 +106,20 @@ namespace PpubViewer {
|
|
|
current_page.scroll_position = 0;
|
|
|
}
|
|
|
else {
|
|
|
- current_page = current_page.add_next(file, scrolled_window.vadjustment.get_value());
|
|
|
+ current_page = current_page.add_next(file, document_view.get_scroll_position());
|
|
|
}
|
|
|
|
|
|
load_document(file);
|
|
|
}
|
|
|
|
|
|
public void go_back() {
|
|
|
- current_page.scroll_position = scrolled_window.vadjustment.get_value();
|
|
|
+ current_page.scroll_position = document_view.get_scroll_position();
|
|
|
current_page = current_page.previous;
|
|
|
load_document(current_page.file_name);
|
|
|
}
|
|
|
|
|
|
public void go_forward() {
|
|
|
- current_page.scroll_position = scrolled_window.vadjustment.get_value();
|
|
|
+ current_page.scroll_position = document_view.get_scroll_position();
|
|
|
current_page = current_page.next;
|
|
|
load_document(current_page.file_name);
|
|
|
}
|
|
@@ -143,28 +130,15 @@ namespace PpubViewer {
|
|
|
back_button.sensitive = current_page.previous != null;
|
|
|
forward_button.sensitive = current_page.next != null;
|
|
|
|
|
|
- flap.content = scrolled_window;
|
|
|
- markdown_view.buffer.set_text("", 0);
|
|
|
- markdown_view.load_from_stream (publication.read_asset (file));
|
|
|
+ document_view.load_asset(publication, publication.get_asset(file));
|
|
|
+
|
|
|
Idle.add_once(() => {
|
|
|
configure_tags();
|
|
|
- scrolled_window.vadjustment.set_value(current_page.scroll_position);
|
|
|
+ document_view.set_scroll_position(current_page.scroll_position);
|
|
|
return false;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void widget_embedded(GtkCommonMark.MarkdownViewEmbeddedWidgetHost widget, string file, string title) {
|
|
|
- var pixbuf = new Gdk.Pixbuf.from_stream (publication.read_asset (file));
|
|
|
- var image = new Gtk.Picture.for_pixbuf (pixbuf);
|
|
|
- image.content_fit = Gtk.ContentFit.FILL;
|
|
|
- widget.available_width_changed.connect(wid => {
|
|
|
- image.width_request = wid;
|
|
|
- var ratio = image.get_paintable().get_intrinsic_aspect_ratio ();
|
|
|
- image.height_request = (int)(wid / ratio);
|
|
|
- });
|
|
|
- widget.append (image);
|
|
|
- }
|
|
|
-
|
|
|
private void link_clicked(string url) {
|
|
|
|
|
|
var asset = publication.get_asset(Uri.unescape_string(url));
|
|
@@ -217,7 +191,8 @@ namespace PpubViewer {
|
|
|
|
|
|
private void configure_tags() {
|
|
|
var link = new LinkButton("");
|
|
|
- markdown_view.tag_manager.update_link_colour(link.get_color());
|
|
|
+ // markdown_view.tag_manager.update_link_colour(link.get_color());
|
|
|
+ // TODO
|
|
|
}
|
|
|
|
|
|
private void property_link_clicked(string file) {
|
|
@@ -227,10 +202,8 @@ namespace PpubViewer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void change_zoom() {
|
|
|
- var scale = zoom_spin.adjustment.value / 100;
|
|
|
- markdown_view.tag_manager.font_scale = (float)scale;
|
|
|
-
|
|
|
+ private void change_zoom(int percent) {
|
|
|
+ document_view.set_zoom_percentage(percent);
|
|
|
}
|
|
|
|
|
|
}
|