summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorAndrzej Hunt <andrzej.hunt@collabora.com>2014-05-09 14:39:55 +0100
committerAndrzej Hunt <andrzej.hunt@collabora.com>2014-06-25 13:04:28 +0100
commit3a26638155de5ba804f5260dfb72b392424b9b50 (patch)
tree3189a130706075e1ce1794bde049323ad4a09dcc /desktop
parentd2382e3f3d9a53c6197edc9c64665f718538c92b (diff)
Add some rendering to our gtktiledviewer.
Just a hardcoded single tile for now. Change-Id: I9bfae4243e0083aa8fca38ae98dc369fe6de36fb
Diffstat (limited to 'desktop')
-rw-r--r--desktop/Executable_gtktiledviewer.mk1
-rw-r--r--desktop/qa/gtktiledviewer/gtktiledviewer.cxx54
2 files changed, 48 insertions, 7 deletions
diff --git a/desktop/Executable_gtktiledviewer.mk b/desktop/Executable_gtktiledviewer.mk
index cb70de407391..6295f5eebba2 100644
--- a/desktop/Executable_gtktiledviewer.mk
+++ b/desktop/Executable_gtktiledviewer.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_Executable_use_static_libraries,gtktiledviewer,\
$(eval $(call gb_Executable_add_libs,gtktiledviewer,\
-lX11 \
-lXext \
+ -lXrender \
-lSM \
-lICE \
))
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();