[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