Blame SOURCES/0247-gtktiledviewer-add-missing-spreadsheet-corner-button.patch

f325b2
From d2cc43af0d971232e843b20a7f2370baf5aecd17 Mon Sep 17 00:00:00 2001
f325b2
From: Miklos Vajna <vmiklos@collabora.co.uk>
f325b2
Date: Fri, 30 Oct 2015 16:20:58 +0100
f325b2
Subject: [PATCH 247/398] gtktiledviewer: add missing spreadsheet corner button
f325b2
f325b2
Change-Id: I3a7af693ccdce2012ddbaa6a3ac8321f29b6356c
f325b2
(cherry picked from commit f5ab3e84dfd58722dc74c7369c1ad67237ca462e)
f325b2
---
f325b2
 .../qa/gtktiledviewer/gtktiledviewer.cxx           | 52 +++++++++++++++++++++-
f325b2
 1 file changed, 51 insertions(+), 1 deletion(-)
f325b2
f325b2
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
index 08058e8699c9..eec80ba0b727 100644
f325b2
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
f325b2
@@ -67,6 +67,16 @@ public:
f325b2
     static void drawText(cairo_t* pCairo, const GdkRectangle& rRectangle, const std::string& rText);
f325b2
 };
f325b2
 
f325b2
+/// Represents the button at the top left corner for spreadsheets.
f325b2
+class TiledCornerButton
f325b2
+{
f325b2
+public:
f325b2
+    GtkWidget* m_pDrawingArea;
f325b2
+    TiledCornerButton();
f325b2
+    static gboolean draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData);
f325b2
+    gboolean drawImpl(GtkWidget* pWidget, cairo_t* pCairo);
f325b2
+};
f325b2
+
f325b2
 /// Represents all the state that is specific to one GtkWindow of this app.
f325b2
 class TiledWindow
f325b2
 {
f325b2
@@ -93,6 +103,7 @@ public:
f325b2
     bool m_bFindAll;
f325b2
     std::shared_ptr<TiledRowColumnBar> m_pRowBar;
f325b2
     std::shared_ptr<TiledRowColumnBar> m_pColumnBar;
f325b2
+    std::shared_ptr<TiledCornerButton> m_pCornerButton;
f325b2
 
f325b2
     TiledWindow()
f325b2
         : m_pDocView(0),
f325b2
@@ -169,6 +180,9 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
f325b2
             aRectangle.y = nTotal - 1;
f325b2
             aRectangle.width = ROW_HEADER_WIDTH - 1;
f325b2
             aRectangle.height = rHeader.m_nSize;
f325b2
+            // Left line.
f325b2
+            cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, 1, aRectangle.height);
f325b2
+            cairo_fill(pCairo);
f325b2
             // Bottom line.
f325b2
             cairo_rectangle(pCairo, aRectangle.x, aRectangle.y + aRectangle.height, aRectangle.width, 1);
f325b2
             cairo_fill(pCairo);
f325b2
@@ -178,10 +192,13 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
f325b2
         }
f325b2
         else
f325b2
         {
f325b2
-            aRectangle.x = nTotal -1;
f325b2
+            aRectangle.x = nTotal - 1;
f325b2
             aRectangle.y = 0;
f325b2
             aRectangle.width = rHeader.m_nSize;
f325b2
             aRectangle.height = COLUMN_HEADER_HEIGHT - 1;
f325b2
+            // Top line.
f325b2
+            cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, 1);
f325b2
+            cairo_fill(pCairo);
f325b2
             // Right line.
f325b2
             cairo_rectangle(pCairo, aRectangle.x + aRectangle.width , aRectangle.y, 1, aRectangle.height);
f325b2
             cairo_fill(pCairo);
f325b2
@@ -216,6 +233,8 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
f325b2
         boost::property_tree::ptree aTree;
f325b2
         boost::property_tree::read_json(aStream, aTree);
f325b2
 
f325b2
+        gtk_widget_show(rWindow.m_pCornerButton->m_pDrawingArea);
f325b2
+
f325b2
         rWindow.m_pRowBar->m_aHeaders.clear();
f325b2
         for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows"))
f325b2
         {
f325b2
@@ -238,6 +257,33 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
f325b2
     return TRUE;
f325b2
 }
f325b2
 
f325b2
+TiledCornerButton::TiledCornerButton()
f325b2
+    : m_pDrawingArea(gtk_drawing_area_new())
f325b2
+{
f325b2
+    gtk_widget_set_size_request(m_pDrawingArea, TiledRowColumnBar::ROW_HEADER_WIDTH, TiledRowColumnBar::COLUMN_HEADER_HEIGHT);
f325b2
+    g_signal_connect(m_pDrawingArea, "draw", G_CALLBACK(TiledCornerButton::draw), this);
f325b2
+}
f325b2
+
f325b2
+gboolean TiledCornerButton::draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData)
f325b2
+{
f325b2
+    return static_cast<TiledCornerButton*>(pData)->drawImpl(pWidget, pCairo);
f325b2
+}
f325b2
+
f325b2
+gboolean TiledCornerButton::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
f325b2
+{
f325b2
+    cairo_set_source_rgb(pCairo, 0, 0, 0);
f325b2
+
f325b2
+    GdkRectangle aRectangle;
f325b2
+    aRectangle.x = 0;
f325b2
+    aRectangle.y = 0;
f325b2
+    aRectangle.width = TiledRowColumnBar::ROW_HEADER_WIDTH;
f325b2
+    aRectangle.height = TiledRowColumnBar::COLUMN_HEADER_HEIGHT;
f325b2
+    cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, aRectangle.height);
f325b2
+    cairo_stroke(pCairo);
f325b2
+
f325b2
+    return FALSE;
f325b2
+}
f325b2
+
f325b2
 static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const std::string& rName)
f325b2
 {
f325b2
     rWindow.m_aToolItemCommandNames[pItem] = rName;
f325b2
@@ -946,6 +992,9 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
f325b2
     // Grid for the row/column bar + doc view.
f325b2
     GtkWidget* pGrid = gtk_grid_new();
f325b2
     gtk_container_add(GTK_CONTAINER(rWindow.m_pVBox), pGrid);
f325b2
+    rWindow.m_pCornerButton.reset(new TiledCornerButton());
f325b2
+    // "A1" cell of the grid.
f325b2
+    gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pCornerButton->m_pDrawingArea, 0, 0, 1, 1);
f325b2
     rWindow.m_pRowBar.reset(new TiledRowColumnBar(TiledRowColumnBar::ROW));
f325b2
     // "A2" cell of the grid.
f325b2
     gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pRowBar->m_pDrawingArea, 0, 1, 1, 1);
f325b2
@@ -976,6 +1025,7 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
f325b2
     // Hide the findbar by default.
f325b2
     gtk_widget_hide(rWindow.m_pFindbar);
f325b2
     // Same for the row/column bar.
f325b2
+    gtk_widget_hide(rWindow.m_pCornerButton->m_pDrawingArea);
f325b2
     gtk_widget_hide(rWindow.m_pRowBar->m_pDrawingArea);
f325b2
     gtk_widget_hide(rWindow.m_pColumnBar->m_pDrawingArea);
f325b2
 
f325b2
-- 
f325b2
2.12.0
f325b2