[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegames/katomic
From:       Dmitry Suzdalev <dimsuz () gmail ! com>
Date:       2006-11-02 12:32:15
Message-ID: 1162470735.694388.26963.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 601178 by dimsuz:

Here you are!
Go resize! :-)


 M  +40 -34    feld.cpp  
 M  +5 -5      feld.h  
 M  +11 -10    katomicrenderer.cpp  
 M  +14 -36    molek.cpp  
 M  +4 -2      molek.h  


--- trunk/KDE/kdegames/katomic/feld.cpp #601177:601178
@@ -31,20 +31,17 @@
 
 extern Options settings;
 
-Feld::Feld( QWidget *parent ) :
-    QWidget( parent ),
-    data(KStandardDirs::locate("appdata", "pics/abilder.png")),
-    undoBegin (0), undoSize (0), redoSize (0)
+Feld::Feld( QWidget *parent )
+    : QWidget( parent ), undoBegin (0), undoSize (0), redoSize (0)
 {
+    m_elemSize = 30;
     anim = false;
     dir = None;
-    sprite = QPixmap (30, 30);
+    sprite = QPixmap(m_elemSize, m_elemSize);
 
     cx = -1;
     cy = -1;
 
-    point = new QPoint [1];
-
     moving = false;
     chosen = false;
 
@@ -53,13 +50,13 @@
     setFocusPolicy(Qt::StrongFocus);
 
     m_renderer = new KAtomicRenderer( KStandardDirs::locate("appdata", "pics/abilder.svgz"), this );
-    setFixedSize(15 * 30, 15 * 30);
-    copy = QPixmap(15 * 30, 15 * 30);
+    m_renderer->setElementSize( m_elemSize );
+    resize(FIELD_SIZE * m_elemSize, FIELD_SIZE * m_elemSize);
+    copy = QPixmap(FIELD_SIZE * m_elemSize, FIELD_SIZE * m_elemSize);
 }
 
 Feld::~Feld ()
 {
-    delete [] point;
 }
 
 void Feld::resetValidDirs()
@@ -111,8 +108,8 @@
     if (moving)
         return;
 
-    int x = e->pos ().x () / 30;
-    int y = e->pos ().y () / 30;
+    int x = e->pos ().x () / m_elemSize;
+    int y = e->pos ().y () / m_elemSize;
 
     if ( feld [x] [y] == 150)
         startAnimation (Feld::MoveUp);
@@ -146,7 +143,7 @@
     int x = xpos, y;
 
     // make sure we don't check the current atom :-)
-    if (ypos++ >= 15) ypos = 0;
+    if (ypos++ >= FIELD_SIZE) ypos = 0;
 
     while(1)
     {
@@ -275,7 +272,7 @@
 
     // reset validDirs now so that arrows don't get drawn
     resetValidDirs();
-    repaint();
+    update();
 
     int x = 0, y = 0;
 
@@ -339,18 +336,18 @@
         feld [xpos] [ypos] = 0;
 
         // absolutkoordinaten des zu verschiebenden bildes
-        cx = xpos * 30;
-        cy = ypos * 30;
+        cx = xpos * m_elemSize;
+        cy = ypos * m_elemSize;
         xpos = x;
         ypos = y;
-        // 30 animationsstufen
-        framesbak = frames = anz * 30;
+        // m_elemSize animationsstufen
+        framesbak = frames = anz * m_elemSize;
 
         // 10 mal pro sek
         startTimer (10);
 
         QPainter p(&sprite);
-        p.drawPixmap(0, 0, copy, cx, cy, 30, 30);
+        p.drawPixmap(0, 0, copy, cx, cy, m_elemSize, m_elemSize);
     }
 
 }
@@ -376,14 +373,14 @@
     ypos = undo_info.oldypos;
     feld[cx][cy] = 0;
     feld[xpos][ypos] = undo_info.atom;
-    cx *= 30; cy *= 30;
+    cx *= m_elemSize; cy *= m_elemSize;
     framesbak = frames =
-        30 * (abs (undo_info.xpos - undo_info.oldxpos) +
+        m_elemSize * (abs (undo_info.xpos - undo_info.oldxpos) +
                 abs (undo_info.ypos - undo_info.oldypos) );
     startTimer (10);
     dir = (Direction) -((int) undo_info.dir);
     QPainter p(&sprite);
-    p.drawPixmap(0, 0, copy, cx, cy, 30, 30);
+    p.drawPixmap(0, 0, copy, cx, cy, m_elemSize, m_elemSize);
 }
 
 void Feld::doRedo ()
@@ -408,14 +405,14 @@
     ypos = undo_info.ypos;
     feld[cx][cy] = 0;
     feld[xpos][ypos] = undo_info.atom;
-    cx *= 30; cy *= 30;
+    cx *= m_elemSize; cy *= m_elemSize;
     framesbak = frames =
-        30 * (abs (undo_info.xpos - undo_info.oldxpos) +
+        m_elemSize * (abs (undo_info.xpos - undo_info.oldxpos) +
                 abs (undo_info.ypos - undo_info.oldypos) );
     startTimer (10);
     dir = undo_info.dir;
     QPainter p(&sprite);
-    p.drawPixmap(0, 0, copy, cx, cy, 30, 30);
+    p.drawPixmap(0, 0, copy, cx, cy, m_elemSize, m_elemSize);
 }
 
 void Feld::mouseMoveEvent (QMouseEvent *e)
@@ -430,8 +427,8 @@
     }
     else
     {
-        int x = e->pos ().x () / 30;
-        int y = e->pos ().y () / 30;
+        int x = e->pos ().x () / m_elemSize;
+        int y = e->pos ().y () / m_elemSize;
 
         // verschiedene cursor je nach pos
         if (feld[x][y] != 254 && feld [x] [y] != 0)
@@ -527,28 +524,37 @@
         case MoveUp:
             paint.drawPixmap(cx, cy - framesbak + frames, sprite);
             if(framesbak - frames > 0)
-                paint.fillRect(cx, cy - framesbak + frames + 30, 30, a, Qt::black);
+                paint.fillRect(cx, cy - framesbak + frames + m_elemSize, m_elemSize, a, Qt::black);
             break;
         case MoveDown:
             paint.drawPixmap(cx, cy + framesbak - frames, sprite);
             if(framesbak - frames > 0)
-                paint.fillRect(cx, cy + framesbak - frames - a, 30, a, Qt::black);
+                paint.fillRect(cx, cy + framesbak - frames - a, m_elemSize, a, Qt::black);
             break;
         case MoveRight:
             paint.drawPixmap(cx + framesbak - frames, cy, sprite);
             if(framesbak - frames > 0)
-                paint.fillRect(cx + framesbak - frames - a, cy, a, 30, Qt::black);
+                paint.fillRect(cx + framesbak - frames - a, cy, a, m_elemSize, Qt::black);
             break;
         case MoveLeft:
             paint.drawPixmap(cx - framesbak + frames, cy, sprite);
             if(framesbak - frames > 0)
-                paint.fillRect(cx - framesbak + frames + 30, cy, a, 30, Qt::black);
+                paint.fillRect(cx - framesbak + frames + m_elemSize, cy, a, m_elemSize, Qt::black);
             break;
         case None:
             break;
     }
 }
 
+void Feld::resizeEvent( QResizeEvent *ev)
+{
+    copy = QPixmap(ev->size());
+    copy.fill(Qt::black);
+    m_elemSize = qMin( ev->size().width(), ev->size().height() ) / FIELD_SIZE;
+    m_renderer->setElementSize( m_elemSize );
+    update();
+}
+
 void Feld::paintEvent( QPaintEvent * )
 {
     int i, j, x, y;
@@ -563,7 +569,7 @@
         return;
     }
 
-    paint.fillRect(0, 0, 15 * 30, 15 * 30, Qt::black);
+    paint.fillRect(0, 0, FIELD_SIZE * m_elemSize, FIELD_SIZE * m_elemSize, Qt::black);
 
     kDebug() << " -= begin paint event =- " << endl;
     for (i = 0; i < FIELD_SIZE; i++)
@@ -573,8 +579,8 @@
             if(moving && i == xpos && j == ypos)
                 continue;
 
-            x = i * 30;
-            y = j * 30;
+            x = i * m_elemSize;
+            y = j * m_elemSize;
 
             QPixmap aPix;
             // FIXME dimsuz: move away from all this digits! :)
--- trunk/KDE/kdegames/katomic/feld.h #601177:601178
@@ -42,7 +42,6 @@
 
     void doUndo ();
     void doRedo ();
-
 public slots:
     void nextAtom();
     void previousAtom();
@@ -54,12 +53,14 @@
     void enableUndo(bool enable);
 
 private:
-    bool checkDone();
     void timerEvent (QTimerEvent *);
     void paintEvent( QPaintEvent * );
-    void paintMovingAtom(QPainter &paint);
+    void resizeEvent( QResizeEvent * );
     void mousePressEvent (QMouseEvent *);
     void mouseMoveEvent (QMouseEvent *);
+
+    bool checkDone();
+    void paintMovingAtom(QPainter &paint);
     void emitStatus();
 
     struct UndoInfo {
@@ -73,8 +74,6 @@
 
     void resetValidDirs();
 
-    QPoint *point;
-    QPixmap data;
     QPixmap sprite;
     QPixmap copy;
 
@@ -100,6 +99,7 @@
     UndoInfo undo[MAX_UNDO];
 
     KAtomicRenderer *m_renderer;
+    int m_elemSize;
 };
 
 #endif // FELD_H
--- trunk/KDE/kdegames/katomic/katomicrenderer.cpp #601177:601178
@@ -38,7 +38,8 @@
 void KAtomicRenderer::setElementSize( int size )
 {
     m_elemSize = size;
-    // TODO re-render cache contents. Or clear?
+    m_cache.clear();
+    m_bondCache.clear();
 }
 
 QPixmap KAtomicRenderer::renderAtom( const atom& at )
@@ -48,7 +49,7 @@
     QImage baseImg;
     if(!m_cache.contains(at.obj))
     {
-        kDebug() << "putting atom to cache" << endl;
+        //kDebug() << "putting atom to cache" << endl;
         //Construct an image object to render the contents of the .svgz file
         baseImg = QImage(m_elemSize, m_elemSize, QImage::Format_ARGB32_Premultiplied);
         //Fill the buffer, it is unitialised by default
@@ -58,8 +59,8 @@
         QPixmap atomPix = QPixmap::fromImage(baseImg);
         m_cache[at.obj] = atomPix;
     }
-    else
-        kDebug() << "reusing atom from cache" << endl;
+    //else
+        //kDebug() << "reusing atom from cache" << endl;
 
     for (int c = 0; c < MAX_CONNS_PER_ATOM; c++)
     {
@@ -68,7 +69,7 @@
             break;
         if(!m_bondCache.contains(conn))
         {
-            kDebug() << "putting bond to cache" << endl;
+            //kDebug() << "putting bond to cache" << endl;
             //Construct an image object to render the contents of the .svgz file
             baseImg = QImage(m_elemSize, m_elemSize, QImage::Format_ARGB32_Premultiplied);
             //Fill the buffer, it is unitialised by default
@@ -78,8 +79,8 @@
             QPixmap bondPix = QPixmap::fromImage(baseImg);
             m_bondCache[conn] = bondPix;
         }
-        else
-            kDebug() << "reusing bond from cache" << endl;
+        //else
+            //kDebug() << "reusing bond from cache" << endl;
     }
 
     QPixmap res(m_elemSize, m_elemSize);
@@ -106,7 +107,7 @@
     QImage baseImg;
     if(!m_cache.contains(element))
     {
-        kDebug() << "putting element to cache" << endl;
+        //kDebug() << "putting element to cache" << endl;
         //Construct an image object to render the contents of the .svgz file
         baseImg = QImage(m_elemSize, m_elemSize, QImage::Format_ARGB32_Premultiplied);
         //Fill the buffer, it is unitialised by default
@@ -116,8 +117,8 @@
         QPixmap pix = QPixmap::fromImage(baseImg);
         m_cache[element] = pix;
     }
-    else
-        kDebug() << "reusing element from cache" << endl;
+    //else
+        //kDebug() << "reusing element from cache" << endl;
 
     return m_cache.value(element);
 }
--- trunk/KDE/kdegames/katomic/molek.cpp #601177:601178
@@ -14,7 +14,6 @@
 
 #include <config.h>
 #include <kdefakes.h>
-#include "molek.moc"
 #include <kiconloader.h>
 #include <kglobal.h>
 #include <kstandarddirs.h>
@@ -25,19 +24,24 @@
 #include <QPainter>
 #include <QPaintEvent>
 
-#include <ctype.h> // for isdigit
+#include "molek.h"
+#include "katomicrenderer.h"
 
 extern int level;
 
 Molek::Molek( QWidget *parent ) 
-   : QWidget( parent ),
-   data(KStandardDirs::locate("appdata", "pics/molek.png"))
+   : QWidget( parent )
 {
     QPalette palette;
     palette.setColor( backgroundRole(), Qt::black );
     setPalette(palette);
     setAutoFillBackground( true );
     setMinimumSize(240, 200);
+
+    m_elemSize = 20;
+
+    m_renderer = new KAtomicRenderer( KStandardDirs::locate("appdata", "pics/abilder.svgz"), this );
+    m_renderer->setElementSize( m_elemSize );
 }
 
 Molek::~Molek ()
@@ -127,43 +131,17 @@
     // spielfeld gleich zeichnen
     for (int i = 0; i < MOLEK_SIZE; i++)
         for (int j = 0; j < MOLEK_SIZE; j++) {
-            int x = 10 + i * 15;
-            int y = 10 + j * 15;
+            int x = 10 + i * m_elemSize;
+            int y = 10 + j * m_elemSize;
 
             if (molek[i][j] == 0)
                 continue;
 
-            // paints atoms
-            if (getAtom(molek [i] [j]).obj <= '9' && getAtom(molek [i] [j]).obj >= '1')
-                paint.drawPixmap(x, y, data, (getAtom(molek[i][j]).obj - '1') * 15, 0, 15 , 15);
-
-            // paints cristals
-            if (getAtom(molek [i] [j]).obj == 'o')
-                paint.drawPixmap(x, y, data, 10*15, 0, 15, 15);
-
-            // paints connections
-            if (isdigit(getAtom(molek[i][j]).obj) || getAtom(molek[i][j]).obj == 'o')
-                for (int c = 0; c < MAX_CONNS_PER_ATOM; c++) {
-                    char conn = getAtom(molek [i] [j]).conn[c];
-                    if (!conn)
-                        break;
-
-                    if (conn >= 'a' && conn <= 'a' + 8)
-                    {
-                        paint.drawPixmap (x, y, data, (conn - 'a') * 15, 16, 15, 15);
-                    }
-                    else
-                    {
-                        paint.drawPixmap (x, y, data, (conn - 'A') * 15, 34, 15, 15);
-                    }
-                }
-
-
-            // paints "long" connections
-            if (getAtom(molek[i][j]).obj >= 'A' && getAtom(molek[i][j]).obj <= 'F')
-                paint.drawPixmap (x, y, data, (getAtom(molek[i][j]).obj - 'A' + 11) * 15 , 0, 15, 15);
-
+            QPixmap aPix = m_renderer->renderAtom(getAtom(molek[i][j]));
+            paint.drawPixmap(x, y, aPix);
         }
 
     paint.end ();
 }
+
+#include "molek.moc"
--- trunk/KDE/kdegames/katomic/molek.h #601177:601178
@@ -16,6 +16,8 @@
 
 #define MOLEK_SIZE 15
 
+class KAtomicRenderer;
+
 class Molek : public QWidget
 {
     Q_OBJECT
@@ -36,13 +38,13 @@
    void paintEvent( QPaintEvent * );
 
 private:
-   QPixmap data;
    uint molek[MOLEK_SIZE][MOLEK_SIZE]; // the indexes within atoms
    QList<atom> atoms;
    QString mname;
    QSize _size;
 
-
+   KAtomicRenderer* m_renderer;
+   int m_elemSize;
 };
 
 #endif // MOLEK_H
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic