diff options
author | Andrzej Hunt <andrzej.hunt@collabora.com> | 2014-05-09 14:39:55 +0100 |
---|---|---|
committer | Andrzej Hunt <andrzej.hunt@collabora.com> | 2014-06-25 13:04:28 +0100 |
commit | 3a26638155de5ba804f5260dfb72b392424b9b50 (patch) | |
tree | 3189a130706075e1ce1794bde049323ad4a09dcc /desktop/qa | |
parent | d2382e3f3d9a53c6197edc9c64665f718538c92b (diff) |
Add some rendering to our gtktiledviewer.
Just a hardcoded single tile for now.
Change-Id: I9bfae4243e0083aa8fca38ae98dc369fe6de36fb
Diffstat (limited to 'desktop/qa')
-rw-r--r-- | desktop/qa/gtktiledviewer/gtktiledviewer.cxx | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/desktop/qa/gtktiledviewer/gtktiledviewer.cxx b/desktop/qa/gtktiledviewer/gtktiledviewer.cxx index a39e824648ca..8c1f73a70740 100644 --- a/desktop/qa/gtktiledviewer/gtktiledviewer.cxx +++ b/desktop/qa/gtktiledviewer/gtktiledviewer.cxx @@ -10,17 +10,55 @@ #include <stdio.h> #include <string.h> +#include <gdk/gdk.h> +#include <gdk/gdkx.h> #include <gtk/gtk.h> +#include <X11/extensions/Xrender.h> + +// Only for the SystemGraphicsData struct, and hopefully we can find some better +// replacement for that at some point. +#include <vcl/sysdata.hxx> + #define LOK_USE_UNSTABLE_API #include <LibreOfficeKit/LibreOfficeKit.hxx> +using namespace ::lok; + static int help() { fprintf( stderr, "Usage: gtktiledviewer <absolute-path-to-libreoffice-install> [path to document]\n" ); return 1; } + +bool drawCallback(GtkWidget* pCanvas, void* /* cairo_t* cr */, gpointer pData) +{ + fprintf(stderr, "attempting to draw tile"); + + Document* pDocument = static_cast< Document* >( pData ); + + // This is UNX only for now, we need to get the appropriate equivalents + // for windows/mac (see SystemGraphicsData for what we need) + SystemGraphicsData aSystemGraphicsData; + aSystemGraphicsData.pDisplay = GDK_WINDOW_XDISPLAY( pCanvas->window ); + aSystemGraphicsData.hDrawable = GDK_WINDOW_XWINDOW( pCanvas->window ); + aSystemGraphicsData.pVisual = GDK_VISUAL_XVISUAL( gtk_widget_get_visual( pCanvas ) ); + aSystemGraphicsData.nScreen = GDK_SCREEN_XNUMBER( gtk_widget_get_screen( pCanvas ) ); + aSystemGraphicsData.nDepth = gdk_visual_get_depth( gtk_widget_get_visual( pCanvas ) ); + aSystemGraphicsData.aColormap = GDK_COLORMAP_XCOLORMAP( + gdk_screen_get_default_colormap( + gtk_widget_get_screen( pCanvas ) ) ); + aSystemGraphicsData.pXRenderFormat = XRenderFindVisualFormat( + GDK_WINDOW_XDISPLAY( pCanvas->window ), + GDK_VISUAL_XVISUAL( gtk_widget_get_visual( pCanvas ) ) ); + + // Hardcoded tile just to see whether or not we get any sort of output. + pDocument->paintTile( &aSystemGraphicsData, 256, 256, 0, 0, 5000, 5000 ); + return true; + +} + int main( int argc, char* argv[] ) { if( argc < 2 || @@ -41,26 +79,28 @@ int main( int argc, char* argv[] ) } ::lok::Document* pDocument = pOffice->documentLoad( argv[2] ); - (void) pDocument; - - GtkWidget *pWindow; - GtkWidget *pScroller; gtk_init( &argc, &argv ); - pWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + GtkWidget *pWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW(pWindow), "LibreOffice GTK Tiled Viewer" ); gtk_window_set_default_size(GTK_WINDOW(pWindow), 800, 600); g_signal_connect( pWindow, "destroy", G_CALLBACK(gtk_main_quit), NULL ); - pScroller = gtk_scrolled_window_new( 0, 0 ); + GtkWidget* pScroller = gtk_scrolled_window_new( 0, 0 ); gtk_container_add( GTK_CONTAINER(pWindow), pScroller ); + GtkWidget* pCanvas = gtk_drawing_area_new(); + gtk_widget_set_size_request( pCanvas, 1000, 1000 ); + gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pScroller), pCanvas ); + + g_signal_connect( G_OBJECT(pCanvas), "expose_event", G_CALLBACK(drawCallback), pDocument); + + gtk_widget_show( pCanvas ); gtk_widget_show( pScroller ); gtk_widget_show( pWindow ); - //GDK_WINDOW_XWINDOW gtk_main(); |