|
 |
f325b2 |
From ad5cffbdf99d9a0605ee2e0c1356099478a2a808 Mon Sep 17 00:00:00 2001
|
|
 |
f325b2 |
From: Pranav Kant <pranavk@gnome.org>
|
|
 |
f325b2 |
Date: Wed, 10 Jun 2015 16:28:45 +0530
|
|
 |
f325b2 |
Subject: [PATCH 046/398] lokdocview: Port to gtk3; 'expose-event' -> 'draw'
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Change-Id: I8d2541f5cbd2b908c2b0dc52cccf9b936bbc307a
|
|
 |
f325b2 |
(cherry picked from commit 256a9cef8bdd89b90f0c371df8f849c567f84213)
|
|
 |
f325b2 |
---
|
|
 |
f325b2 |
.../qa/gtktiledviewer/gtktiledviewer.cxx | 2 +
|
|
 |
f325b2 |
libreofficekit/source/gtk/lokdocview.cxx | 47 ++++++++++------------
|
|
 |
f325b2 |
2 files changed, 24 insertions(+), 25 deletions(-)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
index 1f77f1be6c4d..dc5783b807ad 100644
|
|
 |
f325b2 |
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
@@ -476,6 +476,8 @@ int main( int argc, char* argv[] )
|
|
 |
f325b2 |
|
|
 |
f325b2 |
// Scrolled window for DocView
|
|
 |
f325b2 |
pScrolledWindow = gtk_scrolled_window_new(0, 0);
|
|
 |
f325b2 |
+ gtk_widget_set_hexpand (pScrolledWindow, TRUE);
|
|
 |
f325b2 |
+ gtk_widget_set_vexpand (pScrolledWindow, TRUE);
|
|
 |
f325b2 |
gtk_container_add(GTK_CONTAINER(pVBox), pScrolledWindow);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
// DocView doesn't have scrolling capability, so need a viewport
|
|
 |
f325b2 |
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
index cd05d0ebbdb9..d79390e6e5ef 100644
|
|
 |
f325b2 |
--- a/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
@@ -116,8 +116,10 @@ struct LOKDocView_Impl
|
|
 |
f325b2 |
~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 onExposed(GtkWidget *widget, GdkEventExpose *event, gpointer user_data);
|
|
 |
f325b2 |
+ /// Connected to the draw of the GtkDrawingArea
|
|
 |
f325b2 |
+ static gboolean renderDocument(GtkWidget *widget, cairo_t *cr, gpointer user_data);
|
|
 |
f325b2 |
+ /// Implementation of draw event handler, invoked by renderDocument().
|
|
 |
f325b2 |
+ gboolean renderDocumentImpl(cairo_t* cr);
|
|
 |
f325b2 |
/// Receives a key press or release event.
|
|
 |
f325b2 |
void signalKey(GdkEventKey* pEvent);
|
|
 |
f325b2 |
/*
|
|
 |
f325b2 |
@@ -138,9 +140,9 @@ struct LOKDocView_Impl
|
|
 |
f325b2 |
/// Implementation of motion event handler, invoked by signalMotion().
|
|
 |
f325b2 |
gboolean signalMotionImpl(GdkEventButton* pEvent);
|
|
 |
f325b2 |
/// Receives an expose event.
|
|
 |
f325b2 |
- static gboolean renderOverlay(GtkWidget* pWidget, GdkEventExpose* pEvent, LOKDocView* pDocView);
|
|
 |
f325b2 |
+ static gboolean renderOverlay(GtkWidget* pWidget, cairo_t* cr, gpointer userdata);
|
|
 |
f325b2 |
/// Implementation of expose event handler (renders cursor and selection overlay), invoked by renderOverlay().
|
|
 |
f325b2 |
- gboolean renderOverlayImpl(GtkWidget* pEventBox);
|
|
 |
f325b2 |
+ gboolean renderOverlayImpl(cairo_t *cr);
|
|
 |
f325b2 |
/// Is rRectangle empty?
|
|
 |
f325b2 |
static bool isEmptyRectangle(const GdkRectangle& rRectangle);
|
|
 |
f325b2 |
/*
|
|
 |
f325b2 |
@@ -154,8 +156,6 @@ struct LOKDocView_Impl
|
|
 |
f325b2 |
static gboolean handleTimeout(gpointer pData);
|
|
 |
f325b2 |
/// Implementation of the timeout handler, invoked by handleTimeout().
|
|
 |
f325b2 |
gboolean handleTimeoutImpl();
|
|
 |
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 |
@@ -320,21 +320,22 @@ void LOKDocView_Impl::destroy(LOKDocView* pDocView, gpointer /*pData*/)
|
|
 |
f325b2 |
delete pDocView->m_pImpl;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-void LOKDocView_Impl::onExposed(GtkWidget* /*widget*/, GdkEventExpose* event, gpointer userdata)
|
|
 |
f325b2 |
+gboolean LOKDocView_Impl::renderDocument(GtkWidget* /*widget*/, cairo_t *cr, gpointer userdata)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
LOKDocView *pDocView = LOK_DOC_VIEW (userdata);
|
|
 |
f325b2 |
- pDocView->m_pImpl->onExposedImpl(event);
|
|
 |
f325b2 |
+ return pDocView->m_pImpl->renderDocumentImpl(cr);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-void LOKDocView_Impl::onExposedImpl(GdkEventExpose* event)
|
|
 |
f325b2 |
+gboolean LOKDocView_Impl::renderDocumentImpl(cairo_t *pCairo)
|
|
 |
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_get_window(GTK_WIDGET(m_pDocView)));
|
|
 |
f325b2 |
+ GdkRectangle aVisibleArea;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ gdk_cairo_get_clip_rectangle (pCairo, &aVisibleArea);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
aVisibleArea.x = pixelToTwip (aVisibleArea.x, m_fZoom);
|
|
 |
f325b2 |
aVisibleArea.y = pixelToTwip (aVisibleArea.y, m_fZoom);
|
|
 |
f325b2 |
@@ -374,16 +375,14 @@ void LOKDocView_Impl::onExposedImpl(GdkEventExpose* event)
|
|
 |
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 |
+ gdk_cairo_set_source_pixbuf (pCairo, pPixBuf,
|
|
 |
f325b2 |
twipToPixel(aTileRectangleTwips.x, m_fZoom),
|
|
 |
f325b2 |
twipToPixel(aTileRectangleTwips.y, m_fZoom));
|
|
 |
f325b2 |
- cairo_paint(pcairo);
|
|
 |
f325b2 |
+ cairo_paint(pCairo);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
- cairo_destroy(pcairo);
|
|
 |
f325b2 |
+ return FALSE;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
void LOKDocView_Impl::signalKey(GdkEventKey* pEvent)
|
|
 |
f325b2 |
@@ -644,16 +643,15 @@ gboolean LOKDocView_Impl::signalMotionImpl(GdkEventButton* pEvent)
|
|
 |
f325b2 |
return FALSE;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-gboolean LOKDocView_Impl::renderOverlay(GtkWidget* pEventBox, GdkEventExpose* /*pEvent*/, LOKDocView* pDocView)
|
|
 |
f325b2 |
+gboolean LOKDocView_Impl::renderOverlay(GtkWidget* /*widget*/, cairo_t *cr, gpointer userdata)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
- return pDocView->m_pImpl->renderOverlayImpl(pEventBox);
|
|
 |
f325b2 |
+ LOKDocView *pDocView = LOK_DOC_VIEW (userdata);
|
|
 |
f325b2 |
+ return pDocView->m_pImpl->renderOverlayImpl(cr);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-gboolean LOKDocView_Impl::renderOverlayImpl(GtkWidget* pWidget)
|
|
 |
f325b2 |
+gboolean LOKDocView_Impl::renderOverlayImpl(cairo_t *pCairo)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
#if GTK_CHECK_VERSION(2,14,0) // we need gtk_widget_get_window()
|
|
 |
f325b2 |
- cairo_t* pCairo = gdk_cairo_create(gtk_widget_get_window(pWidget));
|
|
 |
f325b2 |
-
|
|
 |
f325b2 |
if (m_bEdit && m_bCursorVisible && m_bCursorOverlayVisible && !isEmptyRectangle(m_aVisibleCursor))
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
if (m_aVisibleCursor.width < 30)
|
|
 |
f325b2 |
@@ -715,7 +713,6 @@ gboolean LOKDocView_Impl::renderOverlayImpl(GtkWidget* pWidget)
|
|
 |
f325b2 |
renderGraphicHandle(pCairo, m_aGraphicSelection, m_pGraphicHandle);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
- cairo_destroy(pCairo);
|
|
 |
f325b2 |
#endif
|
|
 |
f325b2 |
return FALSE;
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
@@ -1154,10 +1151,10 @@ static void lok_doc_view_init (LOKDocView* pDocView)
|
|
 |
f325b2 |
pDocView->m_pImpl = new LOKDocView_Impl(pDocView);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
- "expose-event",
|
|
 |
f325b2 |
- G_CALLBACK(LOKDocView_Impl::onExposed), pDocView);
|
|
 |
f325b2 |
+ "draw",
|
|
 |
f325b2 |
+ G_CALLBACK(LOKDocView_Impl::renderDocument), pDocView);
|
|
 |
f325b2 |
g_signal_connect(G_OBJECT(pDocView),
|
|
 |
f325b2 |
- "expose-event",
|
|
 |
f325b2 |
+ "draw",
|
|
 |
f325b2 |
G_CALLBACK(LOKDocView_Impl::renderOverlay), pDocView);
|
|
 |
f325b2 |
gtk_widget_add_events(GTK_WIDGET(pDocView),
|
|
 |
f325b2 |
GDK_BUTTON_PRESS_MASK
|
|
 |
f325b2 |
--
|
|
 |
f325b2 |
2.12.0
|
|
 |
f325b2 |
|