eliot-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Eliot-dev] eliot/qt board_widget.cpp tile_widget.cpp


From: Olivier Teulière
Subject: [Eliot-dev] eliot/qt board_widget.cpp tile_widget.cpp
Date: Fri, 22 Oct 2010 16:59:44 +0000

CVSROOT:        /cvsroot/eliot
Module name:    eliot
Changes by:     Olivier Teulière <ipkiss>       10/10/22 16:59:44

Modified files:
        qt             : board_widget.cpp tile_widget.cpp 

Log message:
        Layout improvements:
         - Handle the minimum size of the layout correctly
         - Draw the lines between tiles, instead of drawing on them

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/board_widget.cpp?cvsroot=eliot&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/tile_widget.cpp?cvsroot=eliot&r1=1.5&r2=1.6

Patches:
Index: board_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/board_widget.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- board_widget.cpp    22 Oct 2010 16:58:37 -0000      1.21
+++ board_widget.cpp    22 Oct 2010 16:59:43 -0000      1.22
@@ -20,12 +20,10 @@
 
 #include <algorithm> // For std::transform
 #include <cmath>
-//#include <QtGui/QPainter>
 #include <QtGui/QGridLayout>
 #include <QtGui/QMouseEvent>
-// XXX
-#include <QtGui/QTreeView>
 #include <QtGui/QPainter>
+// XXX
 #include <iostream>
 
 #include "board_widget.h"
@@ -44,7 +42,7 @@
     //Q_OBJECT
 
 public:
-    BoardLayout(int nbCols): m_nbCols(nbCols), m_space(0)
+    BoardLayout(int nbCols, int spacing): m_nbCols(nbCols), m_space(spacing)
     {
         setContentsMargins(0, 0, 0, 0);
     }
@@ -62,6 +60,18 @@
         return m_items.at(m_nbCols + 
1)->geometry().united(m_items.back()->geometry());
     }
 
+    int getSquareSize() const
+    {
+        if (m_items.empty())
+            return 0;
+        return m_items.at(0)->geometry().width();
+    }
+
+    int getSpacing() const
+    {
+        return m_space;
+    }
+
     virtual void addItem(QLayoutItem *item)
     {
         m_items.append(item);
@@ -79,10 +89,10 @@
     }
     virtual QSize minimumSize() const
     {
-        QSize size;
+        QSize size(m_space, m_space);
         if (!m_items.empty())
-            size.expandedTo(m_items.at(0)->minimumSize());
-        return size * m_nbCols;
+            size += m_items.at(0)->minimumSize();
+        return size * m_nbCols + QSize(5, 5);
     }
     virtual void setGeometry(const QRect &rect)
     {
@@ -132,7 +142,7 @@
     setForegroundRole(QPalette::Window);
     setBackgroundRole(QPalette::Window);
 
-    BoardLayout *layout = new BoardLayout(BOARD_MAX + 1);
+    BoardLayout *layout = new BoardLayout(BOARD_MAX + 1, 1);
     // Line full of coordinates
     layout->addWidget(new BasicTileWidget(this, ""));
     for (unsigned int col = BOARD_MIN; col <= BOARD_MAX; ++col)
@@ -174,7 +184,6 @@
     setFrameStyle(QFrame::Panel);
     // Use as much space as possible
     setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
-    setMinimumSize(200, 200);
 
     // Listen to changes in the coordinates
     QObject::connect(&m_coordModel, SIGNAL(coordChanged(const Coord&, const 
Coord&)),
@@ -237,10 +246,25 @@
 
 void BoardWidget::paintEvent(QPaintEvent *)
 {
+    const BoardLayout *boardLayout = (BoardLayout*)layout();
     QPainter painter(this);
-    QRect rect = ((BoardLayout*)layout())->getBoardRect();
-    painter.drawRect(rect);
-    painter.drawRect(rect.adjusted(-1, -1, 1, 1));
+    QRect rect = boardLayout->getBoardRect();
+    const int size = boardLayout->getSquareSize();
+    const int spacing = boardLayout->getSpacing();
+
+    QLine hLine(0, 0, rect.width() + 1, 0);
+    QLine vLine(0, 0, 0, rect.height() + 1);
+    hLine.translate(size, size);
+    vLine.translate(size, size);
+    for (int i = 0; i <= BOARD_MAX; ++i)
+    {
+        painter.drawLine(hLine);
+        painter.drawLine(vLine);
+        hLine.translate(0, size + spacing);
+        vLine.translate(size + spacing, 0);
+    }
+    //painter.drawRect(rect);
+    painter.drawRect(rect.adjusted(-2, -2, 1, 1));
 }
 
 

Index: tile_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/tile_widget.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- tile_widget.cpp     22 Oct 2010 16:58:37 -0000      1.5
+++ tile_widget.cpp     22 Oct 2010 16:59:43 -0000      1.6
@@ -46,6 +46,7 @@
 BasicTileWidget::BasicTileWidget(QWidget *parent, QString text)
     : QWidget(parent), m_text(text)
 {
+    setMinimumSize(10, 10);
 }
 
 
@@ -85,18 +86,9 @@
     m_row(row), m_col(col), m_isJoker(false),
     m_isPreview(false), m_showArrow(false), m_horizontalArrow(true)
 {
-    setMinimumSize(15, 15);
     QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     policy.setHeightForWidth(true);
     setSizePolicy(policy);
-
-    // Try to have a black background... FIXME: not working well!
-    QPalette pal = palette();
-    for (int i = 0; i <= 19; ++i)
-        pal.setColor((QPalette::ColorRole)i, Qt::black);
-    setPalette(pal);
-    setForegroundRole(QPalette::Window);
-    setBackgroundRole(QPalette::Window);
 }
 
 
@@ -131,29 +123,27 @@
 
     // XXX: Naive implementation: we repaint everything every time
     QPainter painter(this);
-    //painter.setPen(Qt::NoPen);
-    const unsigned int xPos = 0;
-    const unsigned int yPos = 0;
 
-    // Set the brush color
+    // Set the square color
+    QColor color;
     if (!m_tile.isEmpty())
     {
         if (m_isPreview)
-            painter.setBrush(PreviewColour);
+            color = PreviewColour;
         else
-            painter.setBrush(TileColour);
+            color = TileColour;
     }
     else if (m_multiplier == WORD_TRIPLE)
-        painter.setBrush(W3Colour);
+        color = W3Colour;
     else if (m_multiplier == WORD_DOUBLE)
-        painter.setBrush(W2Colour);
+        color = W2Colour;
     else if (m_multiplier == LETTER_TRIPLE)
-        painter.setBrush(L3Colour);
+        color = L3Colour;
     else if (m_multiplier == LETTER_DOUBLE)
-        painter.setBrush(L2Colour);
+        color = L2Colour;
     else
-        painter.setBrush(EmptyColour);
-    painter.drawRect(xPos, yPos, squareSize, squareSize);
+        color = EmptyColour;
+    painter.fillRect(0, 0, squareSize, squareSize, color);
 
     // Draw the letter
     if (!m_tile.isEmpty())
@@ -164,7 +154,7 @@
         if (m_isJoker)
             painter.setPen(JokerColour);
         painter.setFont(letterFont);
-        painter.drawText(xPos, yPos + 1, squareSize, squareSize,
+        painter.drawText(0, 0, squareSize, squareSize,
                          Qt::AlignCenter, qfw(chr));
         painter.setPen(NormalColour);
 
@@ -176,9 +166,9 @@
         if (showPoints && !m_isJoker)
         {
             painter.setFont(pointsFont);
-            painter.drawText(xPos + squareSize * (1 - pointsCoeff),
-                             yPos + squareSize * (1 - pointsCoeff),
-                             squareSize * pointsCoeff, squareSize * 
pointsCoeff + 3,
+            painter.drawText(0,
+                             squareSize * (1 - pointsCoeff),
+                             squareSize - 1, squareSize * pointsCoeff + 3,
                              Qt::AlignRight | Qt::AlignBottom,
                              QString("%1").arg(m_tile.getPoints()));
         }
@@ -186,14 +176,12 @@
     // Draw the arrow
     if (m_showArrow)
     {
-        const unsigned int xPos = 1;
-        const unsigned int yPos = 1;
         painter.setPen(QPen(painter.brush().color(), 0));
         painter.setBrush(ArrowColour);
         const int mid = squareSize / 2;
         const int fifth = squareSize / 5;
         const int width = squareSize / 16;
-        painter.translate(xPos + mid, yPos + mid);
+        painter.translate(mid, mid);
         if (m_horizontalArrow)
             painter.rotate(90);
         const QPoint points[] =



reply via email to

[Prev in Thread] Current Thread [Next in Thread]