From 7e82586889770f7d8146489bda5f6c71fbc826da Mon Sep 17 00:00:00 2001 From: Pranav Kant Date: Wed, 5 Jul 2017 17:17:24 +0530 Subject: Zoom support Change-Id: I988f2347b06ed6841a7e9335adc6ac31b0b500b5 --- gtv.ui | 33 +++++++++++++++++++--- .../qa/gtktiledviewer/gtv-application-window.cxx | 29 +++++++++++++++++-- .../qa/gtktiledviewer/gtv-application-window.hxx | 4 +++ .../qa/gtktiledviewer/gtv-main-toolbar.cxx | 10 +++---- .../qa/gtktiledviewer/gtv-signal-handlers.cxx | 11 +++++--- 5 files changed, 72 insertions(+), 15 deletions(-) diff --git a/gtv.ui b/gtv.ui index aabec3c4f69e..bb7db0fc7fc6 100644 --- a/gtv.ui +++ b/gtv.ui @@ -67,17 +67,42 @@ - + True False 10 - 10 10 10 - 6 6 - vertical 2 + + + True + False + 22 + 100% + + + False + False + end + 0 + + + + + True + False + 22 + Current redline: + + + False + False + end + 1 + + False diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx index 69131d309ca0..5dcf70d34bab 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.cxx @@ -22,8 +22,6 @@ struct _GtvApplicationWindow { GtkApplicationWindow parent_instance; - - GtkWidget* zoomlabel; }; struct GtvApplicationWindowPrivate @@ -33,7 +31,9 @@ struct GtvApplicationWindowPrivate GtkWidget* scrolledwindow; GtkWidget* lokdocview; + GtkWidget* statusbar; + GtkWidget* zoomlabel; // Rendering args; options with which lokdocview was rendered in this window GtvRenderingArgs* m_pRenderingArgs; @@ -67,6 +67,8 @@ gtv_application_window_init(GtvApplicationWindow* win) // statusbar priv->statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar")); + // Need to access it from outside to set the zoom level + priv->zoomlabel = GTK_WIDGET(gtk_builder_get_object(builder, "zoomlabel")); gtk_container_add(GTK_CONTAINER(win), priv->container); @@ -123,6 +125,29 @@ gtv_application_open_document_callback(GObject* source_object, GAsyncResult* res lok_doc_view_set_edit(pDocView, true); } +void gtv_application_window_set_zoom_label(GtvApplicationWindow* window, const std::string& aZoom) +{ + GtvApplicationWindowPrivate* priv = getPrivate(window); + gtk_label_set_text(GTK_LABEL(priv->zoomlabel), aZoom.c_str()); +} + +/// Get the visible area of the scrolled window +void getVisibleAreaTwips(GtvApplicationWindow* pWindow, GdkRectangle* pArea) +{ + GtvApplicationWindowPrivate* priv = getPrivate(pWindow); + GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(priv->scrolledwindow)); + GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(priv->scrolledwindow)); + + pArea->x = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(priv->lokdocview), + gtk_adjustment_get_value(pHAdjustment)); + pArea->y = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(priv->lokdocview), + gtk_adjustment_get_value(pVAdjustment)); + pArea->width = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(priv->lokdocview), + gtk_adjustment_get_page_size(pHAdjustment)); + pArea->height = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(priv->lokdocview), + gtk_adjustment_get_page_size(pVAdjustment)); +} + LOKDocView* gtv_application_window_get_lokdocview(GtvApplicationWindow* window) { diff --git a/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx b/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx index 1b2160248498..c29a397513c7 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-application-window.hxx @@ -44,6 +44,10 @@ LOKDocView* gtv_application_window_get_lokdocview(GtvApplicationWindow* applicat void gtv_application_window_create_view_from_window(GtvApplicationWindow* window); +void gtv_application_window_set_zoom_label(GtvApplicationWindow* window, const std::string& aZoom); + +void getVisibleAreaTwips(GtvApplicationWindow* pWindow, GdkRectangle* pArea); + G_END_DECLS #endif /* GTV_APPLICATION_WINDOW_H */ diff --git a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx index cc239536200e..da7f186e5682 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx @@ -57,12 +57,12 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar) gtk_builder_add_callback_symbol(builder, "createView", G_CALLBACK(createView)); gtk_builder_add_callback_symbol(builder, "unoCommandDebugger", G_CALLBACK(unoCommandDebugger)); gtk_builder_add_callback_symbol(builder, "toggleEditing", G_CALLBACK(toggleEditing)); - gtk_builder_add_callback_symbol(builder, "changePartMode", G_CALLBACK(changePartMode)); - gtk_builder_add_callback_symbol(builder, "changePart", G_CALLBACK(changePart)); +// gtk_builder_add_callback_symbol(builder, "changePartMode", G_CALLBACK(changePartMode)); +// gtk_builder_add_callback_symbol(builder, "changePart", G_CALLBACK(changePart)); gtk_builder_add_callback_symbol(builder, "changeZoom", G_CALLBACK(changeZoom)); - gtk_builder_add_callback_symbol(builder, "toggleFindbar", G_CALLBACK(toggleFindbar)); - gtk_builder_add_callback_symbol(builder, "documentRedline", G_CALLBACK(documentRedline)); - gtk_builder_add_callback_symbol(builder, "documentRepair", G_CALLBACK(documentRepair)); +// gtk_builder_add_callback_symbol(builder, "toggleFindbar", G_CALLBACK(toggleFindbar)); +// gtk_builder_add_callback_symbol(builder, "documentRedline", G_CALLBACK(documentRedline)); +// gtk_builder_add_callback_symbol(builder, "documentRepair", G_CALLBACK(documentRepair)); gtk_builder_connect_signals(builder, nullptr); diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx index 98f2a84e4567..0786557f49da 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx @@ -12,6 +12,8 @@ #include #include +#include + #include #include @@ -266,8 +268,9 @@ void toggleEditing(GtkWidget* pButton, gpointer /*pItem*/) lok_doc_view_set_edit(pDocView, bActive); } -static void changeZoom( GtkWidget* pButton, gpointer /* pItem */ ) +void changeZoom( GtkWidget* pButton, gpointer /* pItem */ ) { + static const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 }; GApplication* app = g_application_get_default(); GtkWindow* window = gtk_application_get_active_window(GTK_APPLICATION(app)); LOKDocView* pDocView = gtv_application_window_get_lokdocview(GTV_APPLICATION_WINDOW(window)); @@ -314,12 +317,12 @@ static void changeZoom( GtkWidget* pButton, gpointer /* pItem */ ) { lok_doc_view_set_zoom( LOK_DOC_VIEW(pDocView), fZoom ); GdkRectangle aVisibleArea; - getVisibleAreaTwips(pDocView, &aVisibleArea); + getVisibleAreaTwips(GTV_APPLICATION_WINDOW(window), &aVisibleArea); lok_doc_view_set_visible_area(LOK_DOC_VIEW(pDocView), &aVisibleArea); } } - std::string aZoom = std::string("Zoom: ") + std::to_string(int(fZoom * 100)) + std::string("%"); - gtk_label_set_text(GTK_LABEL(rWindow.m_pZoomLabel), aZoom.c_str()); + const std::string aZoom = std::string("Zoom: ") + std::to_string(int(fZoom * 100)) + std::string("%"); + gtv_application_window_set_zoom_label(GTV_APPLICATION_WINDOW(window), aZoom); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3