|
 |
f325b2 |
From 35bc0137636c6d1c537188b909d173e523786ff9 Mon Sep 17 00:00:00 2001
|
|
 |
f325b2 |
From: Pranav Kant <pranavk@gnome.org>
|
|
 |
f325b2 |
Date: Sat, 15 Aug 2015 18:48:11 +0530
|
|
 |
f325b2 |
Subject: [PATCH 094/398] gtktiledviewer: Jump to cursor position when it
|
|
 |
f325b2 |
changes
|
|
 |
f325b2 |
|
|
 |
f325b2 |
Change-Id: If50ac0bd21e59b0e0639aa353513451e88ae2a9f
|
|
 |
f325b2 |
(cherry picked from commit a9b266aeea80423210618fe4c015e4791ceb1bc2)
|
|
 |
f325b2 |
---
|
|
 |
f325b2 |
.../qa/gtktiledviewer/gtktiledviewer.cxx | 85 +++++++++++++++++-----
|
|
 |
f325b2 |
libreofficekit/source/gtk/lokdocview.cxx | 25 +++++++
|
|
 |
f325b2 |
2 files changed, 93 insertions(+), 17 deletions(-)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
index 3399087cb6db..57d0c113d6ac 100644
|
|
 |
f325b2 |
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
|
|
 |
f325b2 |
@@ -57,6 +57,25 @@ static void lcl_registerToolItem(GtkToolItem* pItem, const std::string& rName)
|
|
 |
f325b2 |
|
|
 |
f325b2 |
const float fZooms[] = { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0 };
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+/// Get the visible area of the scrolled window
|
|
 |
f325b2 |
+static void getVisibleAreaTwips(GdkRectangle* pArea)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+#if GTK_CHECK_VERSION(2,14,0) // we need gtk_adjustment_get_page_size()
|
|
 |
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 |
+#endif
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
static void changeZoom( GtkWidget* pButton, gpointer /* pItem */ )
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
const char *sName = gtk_tool_button_get_icon_name( GTK_TOOL_BUTTON(pButton) );
|
|
 |
f325b2 |
@@ -174,23 +193,6 @@ static void doCopy(GtkWidget* /*pButton*/, gpointer /*pItem*/)
|
|
 |
f325b2 |
free(pSelection);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
-/// Get the visible area of the scrolled window
|
|
 |
f325b2 |
-static void getVisibleAreaTwips(GdkRectangle* pArea)
|
|
 |
f325b2 |
-{
|
|
 |
f325b2 |
-#if GTK_CHECK_VERSION(2,14,0) // we need gtk_adjustment_get_page_size()
|
|
 |
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 |
-#endif
|
|
 |
f325b2 |
-}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
/// Searches for the next or previous text of pFindbarEntry.
|
|
 |
f325b2 |
static void doSearch(bool bBackwards)
|
|
 |
f325b2 |
@@ -318,6 +320,54 @@ static void signalHyperlink(LOKDocView* /*pLOKDocView*/, char* pPayload, gpointe
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
+/// Cursor position changed
|
|
 |
f325b2 |
+static void cursorChanged(LOKDocView* /*pDocView*/, gint nX, gint nY,
|
|
 |
f325b2 |
+ gint /*nWidth*/, gint /*nHeight*/, gpointer /*pData*/)
|
|
 |
f325b2 |
+{
|
|
 |
f325b2 |
+ GtkAdjustment* vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow));
|
|
 |
f325b2 |
+ GtkAdjustment* hadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(pScrolledWindow));
|
|
 |
f325b2 |
+ GdkRectangle visArea;
|
|
 |
f325b2 |
+ gdouble upper;
|
|
 |
f325b2 |
+ gint x = -1, y = -1;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ getVisibleAreaTwips(&visArea);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ // check vertically
|
|
 |
f325b2 |
+ if (nY < visArea.y)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ y = nY - visArea.height/2;
|
|
 |
f325b2 |
+ if (y < 0)
|
|
 |
f325b2 |
+ y = gtk_adjustment_get_lower(vadj);
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ else if (nY > visArea.y + visArea.height)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ y = nY - visArea.height/2;
|
|
 |
f325b2 |
+ upper = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView), gtk_adjustment_get_upper(vadj));
|
|
 |
f325b2 |
+ if (y > upper)
|
|
 |
f325b2 |
+ y = upper;
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (nX < visArea.x)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ x = nX - visArea.width/2;
|
|
 |
f325b2 |
+ if (x < 0)
|
|
 |
f325b2 |
+ x = gtk_adjustment_get_lower(hadj);
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+ else if (nX > visArea.x + visArea.width)
|
|
 |
f325b2 |
+ {
|
|
 |
f325b2 |
+ x = nX - visArea.width/2;
|
|
 |
f325b2 |
+ upper = lok_doc_view_pixel_to_twip(LOK_DOC_VIEW(pDocView), gtk_adjustment_get_upper(hadj));
|
|
 |
f325b2 |
+ if (x > upper)
|
|
 |
f325b2 |
+ x = upper;
|
|
 |
f325b2 |
+ }
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ if (y!=-1)
|
|
 |
f325b2 |
+ gtk_adjustment_set_value(vadj, lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), y));
|
|
 |
f325b2 |
+ if (x!=-1)
|
|
 |
f325b2 |
+ gtk_adjustment_set_value(hadj, lok_doc_view_twip_to_pixel(LOK_DOC_VIEW(pDocView), x));
|
|
 |
f325b2 |
+}
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
static void toggleToolItem(GtkWidget* pWidget, gpointer /*pData*/)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
if (g_bToolItemBroadcast)
|
|
 |
f325b2 |
@@ -575,6 +625,7 @@ int main( int argc, char* argv[] )
|
|
 |
f325b2 |
g_signal_connect(pDocView, "part-changed", G_CALLBACK(signalPart), NULL);
|
|
 |
f325b2 |
g_signal_connect(pDocView, "size-changed", G_CALLBACK(signalSize), NULL);
|
|
 |
f325b2 |
g_signal_connect(pDocView, "hyperlink-clicked", G_CALLBACK(signalHyperlink), NULL);
|
|
 |
f325b2 |
+ g_signal_connect(pDocView, "cursor-changed", G_CALLBACK(cursorChanged), NULL);
|
|
 |
f325b2 |
|
|
 |
f325b2 |
|
|
 |
f325b2 |
// Scrolled window for DocView
|
|
 |
f325b2 |
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
index 364590167f56..859e96b29e20 100644
|
|
 |
f325b2 |
--- a/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
+++ b/libreofficekit/source/gtk/lokdocview.cxx
|
|
 |
f325b2 |
@@ -117,6 +117,7 @@ enum
|
|
 |
f325b2 |
PART_CHANGED,
|
|
 |
f325b2 |
SIZE_CHANGED,
|
|
 |
f325b2 |
HYPERLINK_CLICKED,
|
|
 |
f325b2 |
+ CURSOR_CHANGED,
|
|
 |
f325b2 |
|
|
 |
f325b2 |
LAST_SIGNAL
|
|
 |
f325b2 |
};
|
|
 |
f325b2 |
@@ -518,6 +519,11 @@ callback (gpointer pData)
|
|
 |
f325b2 |
{
|
|
 |
f325b2 |
priv->m_aVisibleCursor = payloadToRectangle(pDocView, pCallback->m_aPayload.c_str());
|
|
 |
f325b2 |
priv->m_bCursorOverlayVisible = true;
|
|
 |
f325b2 |
+ g_signal_emit(pDocView, doc_view_signals[CURSOR_CHANGED], 0,
|
|
 |
f325b2 |
+ priv->m_aVisibleCursor.x,
|
|
 |
f325b2 |
+ priv->m_aVisibleCursor.y,
|
|
 |
f325b2 |
+ priv->m_aVisibleCursor.width,
|
|
 |
f325b2 |
+ priv->m_aVisibleCursor.height);
|
|
 |
f325b2 |
gtk_widget_queue_draw(GTK_WIDGET(pDocView));
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
break;
|
|
 |
f325b2 |
@@ -1743,6 +1749,25 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
|
|
 |
f325b2 |
g_cclosure_marshal_VOID__STRING,
|
|
 |
f325b2 |
G_TYPE_NONE, 1,
|
|
 |
f325b2 |
G_TYPE_STRING);
|
|
 |
f325b2 |
+
|
|
 |
f325b2 |
+ /**
|
|
 |
f325b2 |
+ * LOKDocView::cursor-changed:
|
|
 |
f325b2 |
+ * @pDocView: the #LOKDocView on which the signal is emitted
|
|
 |
f325b2 |
+ * @nX: The new cursor position (X coordinate) in pixels
|
|
 |
f325b2 |
+ * @nY: The new cursor position (Y coordinate) in pixels
|
|
 |
f325b2 |
+ * @nWidth: The width of new cursor
|
|
 |
f325b2 |
+ * @nHeight: The height of new cursor
|
|
 |
f325b2 |
+ */
|
|
 |
f325b2 |
+ doc_view_signals[CURSOR_CHANGED] =
|
|
 |
f325b2 |
+ g_signal_new("cursor-changed",
|
|
 |
f325b2 |
+ G_TYPE_FROM_CLASS(pGObjectClass),
|
|
 |
f325b2 |
+ G_SIGNAL_RUN_FIRST,
|
|
 |
f325b2 |
+ 0,
|
|
 |
f325b2 |
+ NULL, NULL,
|
|
 |
f325b2 |
+ g_cclosure_marshal_generic,
|
|
 |
f325b2 |
+ G_TYPE_NONE, 4,
|
|
 |
f325b2 |
+ G_TYPE_INT, G_TYPE_INT,
|
|
 |
f325b2 |
+ G_TYPE_INT, G_TYPE_INT);
|
|
 |
f325b2 |
}
|
|
 |
f325b2 |
|
|
 |
f325b2 |
/**
|
|
 |
f325b2 |
--
|
|
 |
f325b2 |
2.12.0
|
|
 |
f325b2 |
|