|
 |
f325b2 |
From bedd656e03b025673473d43d556e11fead29f186 Mon Sep 17 00:00:00 2001
|
|
 |
f325b2 |
From: Pranav Kant <pranavk@gnome.org>
|
|
 |
f325b2 |
Date: Tue, 9 Jun 2015 16:27:37 +0530
|
|
 |
f325b2 |
Subject: [PATCH 039/398] lokdocview: Change parent class to GtkDrawingArea
|
|
 |
f325b2 |
|
|
 |
f325b2 |
It is not the job of the widget to provide the scroll bars.
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Change-Id: Iafc5724ed5b21717d711bb8f7e1a076dd1288b76
|
|
 |
f325b2 |
(cherry picked from commit 8d0b34c3a6292ce9c5a081ef95890ae0c5e07ac7)
|
|
 |
f325b2 |
---
|
|
 |
f325b2 |
include/LibreOfficeKit/LibreOfficeKitGtk.h | 22 ++-
|
|
 |
f325b2 |
.../qa/gtktiledviewer/gtktiledviewer.cxx | 27 ++-
|
|
 |
f325b2 |
libreofficekit/source/gtk/lokdocview.cxx | 207 +++++++++------------
|
|
 |
f325b2 |
3 files changed, 127 insertions(+), 129 deletions(-)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
index e84feee9bd57..24c577e6e003 100644
|
|
 |
f325b2 |
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
|
|
 |
f325b2 |
@@ -31,21 +31,23 @@ typedef struct _LOKDocViewClass LOKDocViewClass;
|
|
 |
f325b2 |
|
|
 |
f325b2 |
struct _LOKDocView
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- GtkScrolledWindow aScrollWindow;
|
|
 |
f325b2 |
+ GtkDrawingArea aDrawingArea;
|
|
 |
f325b2 |
struct LOKDocView_Impl* m_pImpl;
|
|
 |
f325b2 |
};
|
|
 |
f325b2 |
|
|
 |
f325b2 |
struct _LOKDocViewClass
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- GtkScrolledWindowClass parent_class;
|
|
 |
f325b2 |
- void (* edit_changed) (LOKDocView* pView, gboolean was_edit);
|
|
 |
f325b2 |
- void (* command_changed) (LOKDocView* pView, char* new_state);
|
|
 |
f325b2 |
- void (* search_not_found) (LOKDocView* pView, char* new_state);
|
|
 |
f325b2 |
- void (* part_changed) (LOKDocView* pView, int new_part);
|
|
 |
f325b2 |
+ GtkDrawingAreaClass parent_class;
|
|
 |
f325b2 |
+ void (* edit_changed) (LOKDocView* pView, gboolean was_edit);
|
|
 |
f325b2 |
+ void (* command_changed) (LOKDocView* pView, char* new_state);
|
|
 |
f325b2 |
+ void (* search_not_found) (LOKDocView* pView, char* new_state);
|
|
 |
f325b2 |
+ void (* part_changed) (LOKDocView* pView, int new_part);
|
|
 |
f325b2 |
};
|
|
 |
f325b2 |
|
|
 |
f325b2 |
GType lok_doc_view_get_type (void) G_GNUC_CONST;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
GtkWidget* lok_doc_view_new (LibreOfficeKit* pOffice );
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
gboolean lok_doc_view_open_document (LOKDocView* pDocView,
|
|
 |
f325b2 |
char* pPath);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
@@ -80,9 +82,11 @@ void lok_doc_view_post_key (GtkWidget* p
|
|
 |
f325b2 |
GdkEventKey* pEvent,
|
|
 |
f325b2 |
gpointer pData);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-/// Get the visible area of the document (in twips).
|
|
 |
f325b2 |
-void lok_doc_view_get_visarea (LOKDocView* pThis,
|
|
 |
f325b2 |
- GdkRectangle* pArea);
|
|
 |
f325b2 |
+float lok_doc_view_pixel_to_twip (LOKDocView* pDocView,
|
|
 |
f325b2 |
+ float fInput);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+float lok_doc_view_twip_to_pixel (LOKDocView* pDocView,
|
|
 |
f325b2 |
+ float fInput);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
G_END_DECLS
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
index 38b29ee40a3b..c8b47f7c7142 100644
|
|
 |
f325b2 |
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
@@ -38,6 +38,7 @@ static GtkToolItem* pBold;
|
|
 |
f325b2 |
static GtkToolItem* pItalic;
|
|
 |
f325b2 |
static GtkToolItem* pUnderline;
|
|
 |
f325b2 |
static GtkToolItem* pStrikethrough;
|
|
 |
f325b2 |
+static GtkWidget* pScrolledWindow;
|
|
 |
f325b2 |
std::map<GtkToolItem*, std::string> g_aToolItemCommandNames;
|
|
 |
f325b2 |
std::map<std::string, GtkToolItem*> g_aCommandNameToolItems;
|
|
 |
f325b2 |
bool g_bToolItemBroadcast = true;
|
|
 |
f325b2 |
@@ -134,6 +135,23 @@ static void toggleFindbar(GtkWidget* /*pButton*/, gpointer /*pItem*/)
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+/// Get the visible area of the scrolled window
|
|
 |
f325b2 |
+static void getVisibleAreaTwips(GdkRectangle* pArea)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow));
|
|
 |
f325b2 |
+ GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow));
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ pArea->x = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView),
|
|
 |
f325b2 |
+ gtk_adjustment_get_value(pHAdjustment));
|
|
 |
f325b2 |
+ pArea->y = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView),
|
|
 |
f325b2 |
+ gtk_adjustment_get_value(pVAdjustment));
|
|
 |
f325b2 |
+ pArea->width = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView),
|
|
 |
f325b2 |
+ gtk_adjustment_get_page_size(pHAdjustment));
|
|
 |
f325b2 |
+ pArea->height = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView),
|
|
 |
f325b2 |
+ gtk_adjustment_get_page_size(pVAdjustment));
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
/// Handles the key-press-event of the window.
|
|
 |
f325b2 |
static gboolean signalKey(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer pData)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
@@ -161,7 +179,7 @@ static void doSearch(bool bBackwards)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
LOKDocView* pLOKDocView = LOK_DOC_VIEW(pDocView);
|
|
 |
f325b2 |
GdkRectangle aArea;
|
|
 |
f325b2 |
- lok_doc_view_get_visarea(pLOKDocView, &aArea);
|
|
 |
f325b2 |
+ getVisibleAreaTwips(&aArea);
|
|
 |
f325b2 |
aTree.put(boost::property_tree::ptree::path_type("SearchItem.SearchStartPointX/type", '/'), "long");
|
|
 |
f325b2 |
aTree.put(boost::property_tree::ptree::path_type("SearchItem.SearchStartPointX/value", '/'), aArea.x);
|
|
 |
f325b2 |
aTree.put(boost::property_tree::ptree::path_type("SearchItem.SearchStartPointY/type", '/'), "long");
|
|
 |
f325b2 |
@@ -461,7 +479,12 @@ int main( int argc, char* argv[] )
|
|
 |
f325b2 |
g_signal_connect(pWindow, "key-press-event", G_CALLBACK(signalKey), pDocView);
|
|
 |
f325b2 |
g_signal_connect(pWindow, "key-release-event", G_CALLBACK(signalKey), pDocView);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- gtk_container_add( GTK_CONTAINER(pVBox), pDocView );
|
|
 |
f325b2 |
+ // Scrolled window for DocView
|
|
 |
f325b2 |
+ pScrolledWindow = gtk_scrolled_window_new(0, 0);
|
|
 |
f325b2 |
+ gtk_container_add(GTK_CONTAINER(pVBox), pScrolledWindow);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ // DocView doesn't have scrolling capability, so need a viewport
|
|
 |
f325b2 |
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(pScrolledWindow), pDocView);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
gtk_widget_show_all( pWindow );
|
|
 |
f325b2 |
// Hide the findbar by default.
|
|
 |
f325b2 |
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
index 138c7f82a38f..02b8710e167b 100644
|
|
 |
f325b2 |
--- a/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
@@ -41,7 +41,6 @@
|
|
 |
f325b2 |
struct LOKDocView_Impl
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
LOKDocView* m_pDocView;
|
|
 |
f325b2 |
- GtkWidget *m_pDrawingArea;
|
|
 |
f325b2 |
TileBuffer m_aTileBuffer;
|
|
 |
f325b2 |
|
|
 |
f325b2 |
float m_fZoom;
|
|
 |
f325b2 |
@@ -119,7 +118,7 @@ struct LOKDocView_Impl
|
|
 |
f325b2 |
/// Connected to the destroy signal of LOKDocView, deletes its LOKDocView_Impl.
|
|
 |
f325b2 |
static void destroy(LOKDocView* pDocView, gpointer pData);
|
|
 |
f325b2 |
/// Connected to the expose-event of the GtkDrawingArea
|
|
 |
f325b2 |
- static void on_exposed(GtkWidget *widget, GdkEvent *event, gpointer user_data);
|
|
 |
f325b2 |
+ static void onExposed(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
|
|
 |
f325b2 |
/// Receives a key press or release event.
|
|
 |
f325b2 |
void signalKey(GdkEventKey* pEvent);
|
|
 |
f325b2 |
/**
|
|
 |
f325b2 |
@@ -156,16 +155,8 @@ struct LOKDocView_Impl
|
|
 |
f325b2 |
static gboolean handleTimeout(gpointer pData);
|
|
 |
f325b2 |
/// Implementation of the timeout handler, invoked by handleTimeout().
|
|
 |
f325b2 |
gboolean handleTimeoutImpl();
|
|
 |
f325b2 |
- /**
|
|
 |
f325b2 |
- * Renders the document to a number of visible tiles.
|
|
 |
f325b2 |
- *
|
|
 |
f325b2 |
- * This method is invoked only manually, not when some Gtk signal is
|
|
 |
f325b2 |
- * emitted.
|
|
 |
f325b2 |
- *
|
|
 |
f325b2 |
- * @param pPartial if 0, then the full visible document is rendered, otherwise only
|
|
 |
f325b2 |
- * the tiles that intersect with pPartial.
|
|
 |
f325b2 |
- */
|
|
 |
f325b2 |
- void renderDocument(GdkRectangle* pPartial);
|
|
 |
f325b2 |
+ /// Implementation of expose event handler, invoked by onExposed().
|
|
 |
f325b2 |
+ void onExposedImpl(GdkEventExpose* event);
|
|
 |
f325b2 |
/// Returns the GdkRectangle of a x,y,width,height string.
|
|
 |
f325b2 |
GdkRectangle payloadToRectangle(const char* pPayload);
|
|
 |
f325b2 |
/// Returns the GdkRectangles of a x1,y1,w1,h1;x2,y2,w2,h2;... string.
|
|
 |
f325b2 |
@@ -213,7 +204,7 @@ SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type();
|
|
 |
f325b2 |
#pragma GCC diagnostic push
|
|
 |
f325b2 |
#pragma GCC diagnostic ignored "-Wunused-function"
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
-G_DEFINE_TYPE(LOKDocView, lok_doc_view, GTK_TYPE_SCROLLED_WINDOW)
|
|
 |
f325b2 |
+G_DEFINE_TYPE(LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA)
|
|
 |
f325b2 |
#ifdef __GNUC__
|
|
 |
f325b2 |
#pragma GCC diagnostic pop
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
@@ -279,7 +270,6 @@ LOKDocView_Impl::CallbackData::CallbackData(int nType, const std::string& rPaylo
|
|
 |
f325b2 |
|
|
 |
f325b2 |
LOKDocView_Impl::LOKDocView_Impl(LOKDocView* pDocView)
|
|
 |
f325b2 |
: m_pDocView(pDocView),
|
|
 |
f325b2 |
- m_pDrawingArea(gtk_drawing_area_new()),
|
|
 |
f325b2 |
m_aTileBuffer(TileBuffer(0,0)),
|
|
 |
f325b2 |
m_fZoom(1),
|
|
 |
f325b2 |
m_pOffice(0),
|
|
 |
f325b2 |
@@ -328,10 +318,70 @@ void LOKDocView_Impl::destroy(LOKDocView* pDocView, gpointer /*pData*/)
|
|
 |
f325b2 |
delete pDocView->m_pImpl;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-void LOKDocView_Impl::on_exposed(GtkWidget* /*widget*/, GdkEvent* /*event*/, gpointer userdata)
|
|
 |
f325b2 |
+void LOKDocView_Impl::onExposed(GtkWidget* /*widget*/, GdkEventExpose* event, gpointer userdata)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
LOKDocView *pDocView = LOK_DOC_VIEW (userdata);
|
|
 |
f325b2 |
- pDocView->m_pImpl->renderDocument(0);
|
|
 |
f325b2 |
+ pDocView->m_pImpl->onExposedImpl(event);
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+void LOKDocView_Impl::onExposedImpl(GdkEventExpose* event)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ long nDocumentWidthPixels = twipToPixel(m_nDocumentWidthTwips, m_fZoom);
|
|
 |
f325b2 |
+ long nDocumentHeightPixels = twipToPixel(m_nDocumentHeightTwips, m_fZoom);
|
|
 |
f325b2 |
+ // Total number of rows / columns in this document.
|
|
 |
f325b2 |
+ guint nRows = ceil((double)nDocumentHeightPixels / nTileSizePixels);
|
|
 |
f325b2 |
+ guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels);
|
|
 |
f325b2 |
+ GdkRectangle aVisibleArea = event->area;
|
|
 |
f325b2 |
+ cairo_t *pcairo = gdk_cairo_create(GTK_WIDGET(m_pDocView)->window);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ aVisibleArea.x = pixelToTwip (aVisibleArea.x, m_fZoom);
|
|
 |
f325b2 |
+ aVisibleArea.y = pixelToTwip (aVisibleArea.y, m_fZoom);
|
|
 |
f325b2 |
+ aVisibleArea.width = pixelToTwip (aVisibleArea.width, m_fZoom);
|
|
 |
f325b2 |
+ aVisibleArea.height = pixelToTwip (aVisibleArea.height, m_fZoom);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ // Render the tiles.
|
|
 |
f325b2 |
+ for (guint nRow = 0; nRow < nRows; ++nRow)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ for (guint nColumn = 0; nColumn < nColumns; ++nColumn)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ GdkRectangle aTileRectangleTwips, aTileRectanglePixels;
|
|
 |
f325b2 |
+ bool bPaint = true;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ // Determine size of the tile: the rightmost/bottommost tiles may
|
|
 |
f325b2 |
+ // be smaller, and we need the size to decide if we need to repaint.
|
|
 |
f325b2 |
+ if (nColumn == nColumns - 1)
|
|
 |
f325b2 |
+ aTileRectanglePixels.width = nDocumentWidthPixels - nColumn * nTileSizePixels;
|
|
 |
f325b2 |
+ else
|
|
 |
f325b2 |
+ aTileRectanglePixels.width = nTileSizePixels;
|
|
 |
f325b2 |
+ if (nRow == nRows - 1)
|
|
 |
f325b2 |
+ aTileRectanglePixels.height = nDocumentHeightPixels - nRow * nTileSizePixels;
|
|
 |
f325b2 |
+ else
|
|
 |
f325b2 |
+ aTileRectanglePixels.height = nTileSizePixels;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ // Determine size and position of the tile in document coordinates,
|
|
 |
f325b2 |
+ // so we can decide if we can skip painting for partial rendering.
|
|
 |
f325b2 |
+ aTileRectangleTwips.x = pixelToTwip(nTileSizePixels, m_fZoom) * nColumn;
|
|
 |
f325b2 |
+ aTileRectangleTwips.y = pixelToTwip(nTileSizePixels, m_fZoom) * nRow;
|
|
 |
f325b2 |
+ aTileRectangleTwips.width = pixelToTwip(aTileRectanglePixels.width, m_fZoom);
|
|
 |
f325b2 |
+ aTileRectangleTwips.height = pixelToTwip(aTileRectanglePixels.height, m_fZoom);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (!gdk_rectangle_intersect(&aVisibleArea, &aTileRectangleTwips, 0))
|
|
 |
f325b2 |
+ bPaint = false;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (bPaint)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ Tile& currentTile = m_aTileBuffer.getTile(nRow, nColumn, m_fZoom);
|
|
 |
f325b2 |
+ GdkPixbuf* pPixBuf = currentTile.getBuffer();
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ gdk_cairo_set_source_pixbuf (pcairo, pPixBuf,
|
|
 |
f325b2 |
+ twipToPixel(aTileRectangleTwips.x, m_fZoom),
|
|
 |
f325b2 |
+ twipToPixel(aTileRectangleTwips.y, m_fZoom));
|
|
 |
f325b2 |
+ cairo_paint(pcairo);
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ cairo_destroy(pcairo);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
void LOKDocView_Impl::signalKey(GdkEventKey* pEvent)
|
|
 |
f325b2 |
@@ -798,75 +848,12 @@ gboolean LOKDocView_Impl::handleTimeoutImpl()
|
|
 |
f325b2 |
m_bCursorOverlayVisible = false;
|
|
 |
f325b2 |
else
|
|
 |
f325b2 |
m_bCursorOverlayVisible = true;
|
|
 |
f325b2 |
- gtk_widget_queue_draw(GTK_WIDGET(m_pDrawingArea));
|
|
 |
f325b2 |
+ gtk_widget_queue_draw(GTK_WIDGET(m_pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
return G_SOURCE_CONTINUE;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-void LOKDocView_Impl::renderDocument(GdkRectangle* pPartial)
|
|
 |
f325b2 |
-{
|
|
 |
f325b2 |
- GdkRectangle visibleArea;
|
|
 |
f325b2 |
- lok_doc_view_get_visarea (m_pDocView, &visibleArea);
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- long nDocumentWidthPixels = twipToPixel(m_nDocumentWidthTwips, m_fZoom);
|
|
 |
f325b2 |
- long nDocumentHeightPixels = twipToPixel(m_nDocumentHeightTwips, m_fZoom);
|
|
 |
f325b2 |
- // Total number of rows / columns in this document.
|
|
 |
f325b2 |
- guint nRows = ceil((double)nDocumentHeightPixels / nTileSizePixels);
|
|
 |
f325b2 |
- guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels);
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- cairo_t *pcairo = gdk_cairo_create(m_pDrawingArea->window);
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- // Render the tiles.
|
|
 |
f325b2 |
- for (guint nRow = 0; nRow < nRows; ++nRow)
|
|
 |
f325b2 |
- {
|
|
 |
f325b2 |
- for (guint nColumn = 0; nColumn < nColumns; ++nColumn)
|
|
 |
f325b2 |
- {
|
|
 |
f325b2 |
- GdkRectangle aTileRectangleTwips, aTileRectanglePixels;
|
|
 |
f325b2 |
- bool bPaint = true;
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- // Determine size of the tile: the rightmost/bottommost tiles may
|
|
 |
f325b2 |
- // be smaller, and we need the size to decide if we need to repaint.
|
|
 |
f325b2 |
- if (nColumn == nColumns - 1)
|
|
 |
f325b2 |
- aTileRectanglePixels.width = nDocumentWidthPixels - nColumn * nTileSizePixels;
|
|
 |
f325b2 |
- else
|
|
 |
f325b2 |
- aTileRectanglePixels.width = nTileSizePixels;
|
|
 |
f325b2 |
- if (nRow == nRows - 1)
|
|
 |
f325b2 |
- aTileRectanglePixels.height = nDocumentHeightPixels - nRow * nTileSizePixels;
|
|
 |
f325b2 |
- else
|
|
 |
f325b2 |
- aTileRectanglePixels.height = nTileSizePixels;
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- // Determine size and position of the tile in document coordinates,
|
|
 |
f325b2 |
- // so we can decide if we can skip painting for partial rendering.
|
|
 |
f325b2 |
- aTileRectangleTwips.x = pixelToTwip(nTileSizePixels, m_fZoom) * nColumn;
|
|
 |
f325b2 |
- aTileRectangleTwips.y = pixelToTwip(nTileSizePixels, m_fZoom) * nRow;
|
|
 |
f325b2 |
- aTileRectangleTwips.width = pixelToTwip(aTileRectanglePixels.width, m_fZoom);
|
|
 |
f325b2 |
- aTileRectangleTwips.height = pixelToTwip(aTileRectanglePixels.height, m_fZoom);
|
|
 |
f325b2 |
- if (pPartial && !gdk_rectangle_intersect(pPartial, &aTileRectangleTwips, 0))
|
|
 |
f325b2 |
- bPaint = false;
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- if (!gdk_rectangle_intersect(&visibleArea, &aTileRectangleTwips, 0))
|
|
 |
f325b2 |
- bPaint = false;
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- if (bPaint)
|
|
 |
f325b2 |
- {
|
|
 |
f325b2 |
- //g_info("tile_buffer_get_tile (%d, %d)", nRow, nColumn);
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- Tile& currentTile = m_aTileBuffer.getTile(nRow, nColumn, m_fZoom);
|
|
 |
f325b2 |
- GdkPixbuf* pPixBuf = currentTile.getBuffer();
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- gdk_cairo_set_source_pixbuf (pcairo, pPixBuf,
|
|
 |
f325b2 |
- twipToPixel(aTileRectangleTwips.x, m_fZoom),
|
|
 |
f325b2 |
- twipToPixel(aTileRectangleTwips.y, m_fZoom));
|
|
 |
f325b2 |
- cairo_paint(pcairo);
|
|
 |
f325b2 |
- }
|
|
 |
f325b2 |
- }
|
|
 |
f325b2 |
- }
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- cairo_destroy(pcairo);
|
|
 |
f325b2 |
-}
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
GdkRectangle LOKDocView_Impl::payloadToRectangle(const char* pPayload)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
GdkRectangle aRet;
|
|
 |
f325b2 |
@@ -978,14 +965,14 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
|
|
 |
f325b2 |
else
|
|
 |
f325b2 |
m_aTileBuffer.resetAllTiles();
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- gtk_widget_queue_draw(m_pDrawingArea);
|
|
 |
f325b2 |
+ gtk_widget_queue_draw(GTK_WIDGET(m_pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
break;
|
|
 |
f325b2 |
case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR:
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
m_aVisibleCursor = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str());
|
|
 |
f325b2 |
m_bCursorOverlayVisible = true;
|
|
 |
f325b2 |
- gtk_widget_queue_draw(m_pDrawingArea);
|
|
 |
f325b2 |
+ gtk_widget_queue_draw(GTK_WIDGET(m_pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
break;
|
|
 |
f325b2 |
case LOK_CALLBACK_TEXT_SELECTION:
|
|
 |
f325b2 |
@@ -1025,7 +1012,7 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
|
|
 |
f325b2 |
m_aGraphicSelection = LOKDocView_Impl::payloadToRectangle(pCallback->m_aPayload.c_str());
|
|
 |
f325b2 |
else
|
|
 |
f325b2 |
memset(&m_aGraphicSelection, 0, sizeof(m_aGraphicSelection));
|
|
 |
f325b2 |
- gtk_widget_queue_draw(GTK_WIDGET(m_pDrawingArea));
|
|
 |
f325b2 |
+ gtk_widget_queue_draw(GTK_WIDGET(m_pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
break;
|
|
 |
f325b2 |
case LOK_CALLBACK_HYPERLINK_CLICKED:
|
|
 |
f325b2 |
@@ -1049,7 +1036,7 @@ gboolean LOKDocView_Impl::callbackImpl(CallbackData* pCallback)
|
|
 |
f325b2 |
case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED:
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
payloadToSize(pCallback->m_aPayload.c_str(), m_nDocumentWidthTwips, m_nDocumentHeightTwips);
|
|
 |
f325b2 |
- gtk_widget_set_size_request(m_pDrawingArea,
|
|
 |
f325b2 |
+ gtk_widget_set_size_request(GTK_WIDGET(m_pDocView),
|
|
 |
f325b2 |
twipToPixel(m_nDocumentWidthTwips, m_fZoom),
|
|
 |
f325b2 |
twipToPixel(m_nDocumentHeightTwips, m_fZoom));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
@@ -1113,7 +1100,6 @@ void LOKDocView_Impl::searchNotFound(const std::string& rString)
|
|
 |
f325b2 |
void LOKDocView_Impl::setPart(const std::string& rString)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
g_signal_emit(m_pDocView, doc_view_signals[PART_CHANGED], 0, std::stoi(rString));
|
|
 |
f325b2 |
- renderDocument(0);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
@@ -1163,34 +1149,26 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
static void lok_doc_view_init (LOKDocView* pDocView)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- // Gtk ScrolledWindow is apparently not fully initialised yet, we specifically
|
|
 |
f325b2 |
- // have to set the [hv]adjustment to prevent GTK assertions from firing, see
|
|
 |
f325b2 |
- // https://bugzilla.gnome.org/show_bug.cgi?id=438114 for more info.
|
|
 |
f325b2 |
- gtk_scrolled_window_set_hadjustment( GTK_SCROLLED_WINDOW( pDocView ), NULL );
|
|
 |
f325b2 |
- gtk_scrolled_window_set_vadjustment( GTK_SCROLLED_WINDOW( pDocView ), NULL );
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
pDocView->m_pImpl = new LOKDocView_Impl(pDocView);
|
|
 |
f325b2 |
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pDocView),
|
|
 |
f325b2 |
- pDocView->m_pImpl->m_pDrawingArea );
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- g_signal_connect(G_OBJECT(pDocView->m_pImpl->m_pDrawingArea),
|
|
 |
f325b2 |
+ g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
"expose-event",
|
|
 |
f325b2 |
- G_CALLBACK(LOKDocView_Impl::on_exposed), pDocView);
|
|
 |
f325b2 |
- g_signal_connect(G_OBJECT(pDocView->m_pImpl->m_pDrawingArea),
|
|
 |
f325b2 |
+ G_CALLBACK(LOKDocView_Impl::onExposed), pDocView);
|
|
 |
f325b2 |
+ g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
"expose-event",
|
|
 |
f325b2 |
G_CALLBACK(LOKDocView_Impl::renderOverlay), pDocView);
|
|
 |
f325b2 |
- gtk_widget_add_events(pDocView->m_pImpl->m_pDrawingArea,
|
|
 |
f325b2 |
+ gtk_widget_add_events(GTK_WIDGET(pDocView),
|
|
 |
f325b2 |
GDK_BUTTON_PRESS_MASK
|
|
 |
f325b2 |
|GDK_BUTTON_RELEASE_MASK
|
|
 |
f325b2 |
|GDK_BUTTON_MOTION_MASK);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- g_signal_connect(G_OBJECT(pDocView->m_pImpl->m_pDrawingArea),
|
|
 |
f325b2 |
+ g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
"button-press-event",
|
|
 |
f325b2 |
G_CALLBACK(LOKDocView_Impl::signalButton), pDocView);
|
|
 |
f325b2 |
- g_signal_connect(G_OBJECT(pDocView->m_pImpl->m_pDrawingArea),
|
|
 |
f325b2 |
+ g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
"button-release-event",
|
|
 |
f325b2 |
G_CALLBACK(LOKDocView_Impl::signalButton), pDocView);
|
|
 |
f325b2 |
- g_signal_connect(G_OBJECT(pDocView->m_pImpl->m_pDrawingArea),
|
|
 |
f325b2 |
+ g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
"motion-notify-event",
|
|
 |
f325b2 |
G_CALLBACK(LOKDocView_Impl::signalMotion), pDocView);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
@@ -1240,10 +1218,9 @@ SAL_DLLPUBLIC_EXPORT gboolean lok_doc_view_open_document( LOKDocView* pDocView,
|
|
 |
f325b2 |
|
|
 |
f325b2 |
pDocView->m_pImpl->m_aTileBuffer = TileBuffer(pDocView->m_pImpl->m_pDocument,
|
|
 |
f325b2 |
nColumns);
|
|
 |
f325b2 |
- gtk_widget_set_size_request(pDocView->m_pImpl->m_pDrawingArea,
|
|
 |
f325b2 |
+ gtk_widget_set_size_request(GTK_WIDGET(pDocView),
|
|
 |
f325b2 |
nDocumentWidthPixels,
|
|
 |
f325b2 |
nDocumentHeightPixels);
|
|
 |
f325b2 |
- pDocView->m_pImpl->renderDocument(0);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
return TRUE;
|
|
 |
f325b2 |
@@ -1264,12 +1241,9 @@ SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_zoom ( LOKDocView* pDocView, float fZ
|
|
 |
f325b2 |
|
|
 |
f325b2 |
pDocView->m_pImpl->m_aTileBuffer = TileBuffer(pDocView->m_pImpl->m_pDocument,
|
|
 |
f325b2 |
nColumns);
|
|
 |
f325b2 |
- gtk_widget_set_size_request(pDocView->m_pImpl->m_pDrawingArea,
|
|
 |
f325b2 |
+ gtk_widget_set_size_request(GTK_WIDGET(pDocView),
|
|
 |
f325b2 |
nDocumentWidthPixels,
|
|
 |
f325b2 |
nDocumentHeightPixels);
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- if ( pDocView->m_pImpl->m_pDocument )
|
|
 |
f325b2 |
- pDocView->m_pImpl->renderDocument(0);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT float lok_doc_view_get_zoom ( LOKDocView* pDocView )
|
|
 |
f325b2 |
@@ -1301,7 +1275,6 @@ SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_partmode( LOKDocView* pDocView,
|
|
 |
f325b2 |
int nPartMode )
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
pDocView->m_pImpl->m_pDocument->pClass->setPartMode( pDocView->m_pImpl->m_pDocument, nPartMode );
|
|
 |
f325b2 |
- pDocView->m_pImpl->renderDocument(0);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_edit( LOKDocView* pDocView,
|
|
 |
f325b2 |
@@ -1318,7 +1291,7 @@ SAL_DLLPUBLIC_EXPORT void lok_doc_view_set_edit( LOKDocView* pDocView,
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
pDocView->m_pImpl->m_bEdit = bEdit;
|
|
 |
f325b2 |
g_signal_emit(pDocView, doc_view_signals[EDIT_CHANGED], 0, bWasEdit);
|
|
 |
f325b2 |
- gtk_widget_queue_draw(GTK_WIDGET(pDocView->m_pImpl->m_pDrawingArea));
|
|
 |
f325b2 |
+ gtk_widget_queue_draw(GTK_WIDGET(pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
SAL_DLLPUBLIC_EXPORT gboolean lok_doc_view_get_edit(LOKDocView* pDocView)
|
|
 |
f325b2 |
@@ -1337,17 +1310,15 @@ SAL_DLLPUBLIC_EXPORT void lok_doc_view_post_key(GtkWidget* /*pWidget*/, GdkEvent
|
|
 |
f325b2 |
pDocView->m_pImpl->signalKey(pEvent);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-SAL_DLLPUBLIC_EXPORT void lok_doc_view_get_visarea(LOKDocView* pThis, GdkRectangle* pArea)
|
|
 |
f325b2 |
+SAL_DLLPUBLIC_EXPORT float lok_doc_view_pixel_to_twip(LOKDocView* pDocView, float fInput)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
-#if GTK_CHECK_VERSION(2,14,0) // we need gtk_adjustment_get_page_size()
|
|
 |
f325b2 |
- float zoom = pThis->m_pImpl->m_fZoom;
|
|
 |
f325b2 |
- GtkAdjustment* pHAdjustment = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(pThis));
|
|
 |
f325b2 |
- pArea->x = pixelToTwip(gtk_adjustment_get_value(pHAdjustment),zoom);
|
|
 |
f325b2 |
- pArea->width = pixelToTwip(gtk_adjustment_get_page_size(pHAdjustment), zoom);
|
|
 |
f325b2 |
- GtkAdjustment* pVAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(pThis));
|
|
 |
f325b2 |
- pArea->y = pixelToTwip(gtk_adjustment_get_value(pVAdjustment), zoom);
|
|
 |
f325b2 |
- pArea->height = pixelToTwip(gtk_adjustment_get_page_size(pVAdjustment), zoom);
|
|
 |
f325b2 |
-#endif
|
|
 |
f325b2 |
+ return pixelToTwip(fInput, pDocView->m_pImpl->m_fZoom);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+SAL_DLLPUBLIC_EXPORT float lok_doc_view_twip_to_pixel(LOKDocView* pDocView, float fInput)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ return twipToPixel(fInput, pDocView->m_pImpl->m_fZoom);
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
 |
f325b2 |
--
|
|
 |
f325b2 |
2.12.0
|
|
 |
f325b2 |
|