summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej Hunt <andrzej.hunt@collabora.com>2014-06-23 15:13:40 +0100
committerAndrzej Hunt <andrzej.hunt@collabora.com>2014-06-25 13:04:33 +0100
commit4171e2fdb29c728a4a74764b73ba5cbf53feebda (patch)
tree96c2ec03cf16896810476c4604b09e72b0a85011
parent6024ddbfac8e62db50dd5352d610c87d279627de (diff)
Add zoom controls to gtktiledviewer.
Change-Id: I33ae83a97be254a3d3716bd9ae05f089845fd536
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx80
1 files changed, 75 insertions, 5 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 3549903b988a..bc4ad093be60 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -21,6 +21,52 @@ static int help()
return 1;
}
+static GtkWidget* pDocView;
+
+const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 };
+
+void changeZoom( GtkWidget* pButton, gpointer /* pItem */ )
+{
+ const char *sName = gtk_tool_button_get_stock_id( GTK_TOOL_BUTTON(pButton) );
+
+ float fZoom = 0;
+ const float fCurrentZoom = lok_docview_get_zoom( LOK_DOCVIEW(pDocView) );
+ if ( strcmp(sName, "gtk-zoom-in") == 0)
+ {
+ for ( unsigned int i = 0; i < sizeof( fZooms ) / sizeof( fZooms[0] ); i++ )
+ {
+ if ( fCurrentZoom < fZooms[i] )
+ {
+ fZoom = fZooms[i];
+ break;
+ }
+ }
+ }
+ else if ( strcmp(sName, "gtk-zoom-100") == 0)
+ {
+ fZoom = 1;
+ }
+ else if ( strcmp(sName, "gtk-zoom-fit") == 0)
+ {
+ // TODO -- will need access to lokdocview internals?
+ }
+ else if ( strcmp(sName, "gtk-zoom-out") == 0)
+ {
+ for ( unsigned int i = 0; i < sizeof( fZooms ) / sizeof( fZooms[0] ); i++ )
+ {
+ if ( fCurrentZoom > fZooms[i] )
+ {
+ fZoom = fZooms[i];
+ }
+ }
+ }
+
+ if ( fZoom != 0 )
+ {
+ lok_docview_set_zoom( LOK_DOCVIEW(pDocView), fZoom );
+ }
+}
+
int main( int argc, char* argv[] )
{
if( argc < 2 ||
@@ -42,14 +88,38 @@ int main( int argc, char* argv[] )
gtk_window_set_default_size(GTK_WINDOW(pWindow), 800, 600);
g_signal_connect( pWindow, "destroy", G_CALLBACK(gtk_main_quit), NULL );
+ GtkWidget* pVBox = gtk_vbox_new( FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER(pWindow), pVBox );
- GtkWidget* pDocView = lok_docview_new( pOffice );
- gtk_container_add( GTK_CONTAINER(pWindow), pDocView );
+ // Toolbar
+ GtkWidget* pToolbar = gtk_toolbar_new();
+ gtk_toolbar_set_style( GTK_TOOLBAR(pToolbar), GTK_TOOLBAR_ICONS );
- lok_docview_open_document( LOK_DOCVIEW(pDocView), argv[2] );
+ GtkToolItem* pZoomIn = gtk_tool_button_new_from_stock( GTK_STOCK_ZOOM_IN );
+ gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pZoomIn, 0);
+ g_signal_connect( G_OBJECT(pZoomIn), "clicked", G_CALLBACK(changeZoom), NULL );
+
+ GtkToolItem* pZoom1 = gtk_tool_button_new_from_stock( GTK_STOCK_ZOOM_100 );
+ gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pZoom1, -1);
+ g_signal_connect( G_OBJECT(pZoom1), "clicked", G_CALLBACK(changeZoom), NULL );
- gtk_widget_show( pDocView );
- gtk_widget_show( pWindow );
+ GtkToolItem* pZoomFit = gtk_tool_button_new_from_stock( GTK_STOCK_ZOOM_FIT );
+ gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pZoomFit, -1);
+ g_signal_connect( G_OBJECT(pZoomFit), "clicked", G_CALLBACK(changeZoom), NULL );
+
+ GtkToolItem* pZoomOut = gtk_tool_button_new_from_stock( GTK_STOCK_ZOOM_OUT );
+ gtk_toolbar_insert( GTK_TOOLBAR(pToolbar), pZoomOut, -1);
+ g_signal_connect( G_OBJECT(pZoomOut), "clicked", G_CALLBACK(changeZoom), NULL );
+
+ gtk_box_pack_start( GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0 ); // Adds to top.
+
+ // Docview
+ pDocView = lok_docview_new( pOffice );
+ gtk_container_add( GTK_CONTAINER(pVBox), pDocView );
+
+ gtk_widget_show_all( pWindow );
+
+ lok_docview_open_document( LOK_DOCVIEW(pDocView), argv[2] );
gtk_main();