summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-10-30 16:20:58 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-10-30 16:21:19 +0100
commitf5ab3e84dfd58722dc74c7369c1ad67237ca462e (patch)
treeea38d7b69ed91119dc66d0c290c0c3fcda1ef521 /libreofficekit
parent3bdce53c557a1279e7e40d215e34405626bbc628 (diff)
gtktiledviewer: add missing spreadsheet corner button
Change-Id: I3a7af693ccdce2012ddbaa6a3ac8321f29b6356c
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx52
1 files changed, 51 insertions, 1 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index de57dc9b3e99..72297aa4fb2f 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -67,6 +67,16 @@ public:
static void drawText(cairo_t* pCairo, const GdkRectangle& rRectangle, const std::string& rText);
};
+/// Represents the button at the top left corner for spreadsheets.
+class TiledCornerButton
+{
+public:
+ GtkWidget* m_pDrawingArea;
+ TiledCornerButton();
+ static gboolean draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData);
+ gboolean drawImpl(GtkWidget* pWidget, cairo_t* pCairo);
+};
+
/// Represents all the state that is specific to one GtkWindow of this app.
class TiledWindow
{
@@ -93,6 +103,7 @@ public:
bool m_bFindAll;
std::shared_ptr<TiledRowColumnBar> m_pRowBar;
std::shared_ptr<TiledRowColumnBar> m_pColumnBar;
+ std::shared_ptr<TiledCornerButton> m_pCornerButton;
TiledWindow()
: m_pDocView(0),
@@ -169,6 +180,9 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
aRectangle.y = nTotal - 1;
aRectangle.width = ROW_HEADER_WIDTH - 1;
aRectangle.height = rHeader.m_nSize;
+ // Left line.
+ cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, 1, aRectangle.height);
+ cairo_fill(pCairo);
// Bottom line.
cairo_rectangle(pCairo, aRectangle.x, aRectangle.y + aRectangle.height, aRectangle.width, 1);
cairo_fill(pCairo);
@@ -178,10 +192,13 @@ gboolean TiledRowColumnBar::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
}
else
{
- aRectangle.x = nTotal -1;
+ aRectangle.x = nTotal - 1;
aRectangle.y = 0;
aRectangle.width = rHeader.m_nSize;
aRectangle.height = COLUMN_HEADER_HEIGHT - 1;
+ // Top line.
+ cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, 1);
+ cairo_fill(pCairo);
// Right line.
cairo_rectangle(pCairo, aRectangle.x + aRectangle.width , aRectangle.y, 1, aRectangle.height);
cairo_fill(pCairo);
@@ -216,6 +233,8 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
boost::property_tree::ptree aTree;
boost::property_tree::read_json(aStream, aTree);
+ gtk_widget_show(rWindow.m_pCornerButton->m_pDrawingArea);
+
rWindow.m_pRowBar->m_aHeaders.clear();
for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("rows"))
{
@@ -238,6 +257,33 @@ gboolean TiledRowColumnBar::docConfigureEvent(GtkWidget* pDocView, GdkEventConfi
return TRUE;
}
+TiledCornerButton::TiledCornerButton()
+ : m_pDrawingArea(gtk_drawing_area_new())
+{
+ gtk_widget_set_size_request(m_pDrawingArea, TiledRowColumnBar::ROW_HEADER_WIDTH, TiledRowColumnBar::COLUMN_HEADER_HEIGHT);
+ g_signal_connect(m_pDrawingArea, "draw", G_CALLBACK(TiledCornerButton::draw), this);
+}
+
+gboolean TiledCornerButton::draw(GtkWidget* pWidget, cairo_t* pCairo, gpointer pData)
+{
+ return static_cast<TiledCornerButton*>(pData)->drawImpl(pWidget, pCairo);
+}
+
+gboolean TiledCornerButton::drawImpl(GtkWidget* /*pWidget*/, cairo_t* pCairo)
+{
+ cairo_set_source_rgb(pCairo, 0, 0, 0);
+
+ GdkRectangle aRectangle;
+ aRectangle.x = 0;
+ aRectangle.y = 0;
+ aRectangle.width = TiledRowColumnBar::ROW_HEADER_WIDTH;
+ aRectangle.height = TiledRowColumnBar::COLUMN_HEADER_HEIGHT;
+ cairo_rectangle(pCairo, aRectangle.x, aRectangle.y, aRectangle.width, aRectangle.height);
+ cairo_stroke(pCairo);
+
+ return FALSE;
+}
+
static void lcl_registerToolItem(TiledWindow& rWindow, GtkToolItem* pItem, const std::string& rName)
{
rWindow.m_aToolItemCommandNames[pItem] = rName;
@@ -947,6 +993,9 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
// Grid for the row/column bar + doc view.
GtkWidget* pGrid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(rWindow.m_pVBox), pGrid);
+ rWindow.m_pCornerButton.reset(new TiledCornerButton());
+ // "A1" cell of the grid.
+ gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pCornerButton->m_pDrawingArea, 0, 0, 1, 1);
rWindow.m_pRowBar.reset(new TiledRowColumnBar(TiledRowColumnBar::ROW));
// "A2" cell of the grid.
gtk_grid_attach(GTK_GRID(pGrid), rWindow.m_pRowBar->m_pDrawingArea, 0, 1, 1, 1);
@@ -977,6 +1026,7 @@ static GtkWidget* createWindow(TiledWindow& rWindow)
// Hide the findbar by default.
gtk_widget_hide(rWindow.m_pFindbar);
// Same for the row/column bar.
+ gtk_widget_hide(rWindow.m_pCornerButton->m_pDrawingArea);
gtk_widget_hide(rWindow.m_pRowBar->m_pDrawingArea);
gtk_widget_hide(rWindow.m_pColumnBar->m_pDrawingArea);