You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.5 KiB
91 lines
2.5 KiB
#include "piece.h"
|
|
|
|
#include <math.h>
|
|
|
|
#include <tqpainter.h>
|
|
#include <tqbitmap.h>
|
|
|
|
#include <tdelocale.h>
|
|
|
|
#include "base/board.h"
|
|
|
|
|
|
const FEPieceInfo::Form FEPieceInfo::FORM = {
|
|
{{ 0, 0}, {-1, 0}, { 0, 0}, { 0, -1}},
|
|
{{ 0, -1}, {-1, -1}, {-1, 0}, {-1, -1}}
|
|
};
|
|
|
|
const char *FEPieceInfo::DEFAULT_COLORS[NB_NORM_BLOCK_TYPES + 1] = {
|
|
"#64C864", "#64C8C8", "#C86464", "#C864C8", "#C8C8C8"
|
|
};
|
|
|
|
TQColor FEPieceInfo::defaultColor(uint i) const
|
|
{
|
|
if ( i>=nbColors() ) return TQColor();
|
|
return TQColor(DEFAULT_COLORS[i]);
|
|
}
|
|
|
|
TQString FEPieceInfo::colorLabel(uint i) const
|
|
{
|
|
return (i==NB_NORM_BLOCK_TYPES ? i18n("Garbage color:")
|
|
: i18n("Color #%1:").arg(i+1));
|
|
}
|
|
|
|
void FEPieceInfo::draw(TQPixmap *pixmap, uint blockType, uint,
|
|
bool lighted) const
|
|
{
|
|
TQColor col = color(blockType);
|
|
if (lighted) col = col.light();
|
|
pixmap->fill(col);
|
|
}
|
|
|
|
void FEPieceInfo::setMask(TQPixmap *pixmap, uint blockMode) const
|
|
{
|
|
Q_ASSERT( pixmap->width()==pixmap->height() ); // drawing code assumes that
|
|
TQBitmap bitmap(pixmap->size(), true);
|
|
TQPainter p(&bitmap);
|
|
p.setBrush(TQt::color1);
|
|
p.setPen( TQPen(TQt::NoPen) );
|
|
|
|
// base circle
|
|
int w = pixmap->width();
|
|
int d = (int)((sqrt(2)-2./3)*w);
|
|
TQRect cr = TQRect(0, 0, d, d);
|
|
cr.moveCenter(TQPoint(w/2, w/2));
|
|
p.drawEllipse(cr);
|
|
|
|
if (blockMode) {
|
|
int a = (int)(w/(3.*sqrt(2)));
|
|
int ra = 2*w/3+1;
|
|
cr = TQRect(0, 0, ra, ra);
|
|
|
|
// first drawing with color1
|
|
if ( blockMode & BaseBoard::Up ) p.drawRect( 0, 0, w, a);
|
|
if ( blockMode & BaseBoard::Right ) p.drawRect(w-a+1, 0, a, w);
|
|
if ( blockMode & BaseBoard::Down ) p.drawRect( 0, w-a+1, w, a);
|
|
if ( blockMode & BaseBoard::Left ) p.drawRect( 0, 0, a, w);
|
|
|
|
// second drawing with color0
|
|
p.setBrush(TQt::color0);
|
|
if ( (blockMode & BaseBoard::Up) || (blockMode & BaseBoard::Left) ) {
|
|
cr.moveCenter(TQPoint(0, 0));
|
|
p.drawEllipse(cr);
|
|
}
|
|
if ( (blockMode & BaseBoard::Right) || (blockMode & BaseBoard::Up) ) {
|
|
cr.moveCenter(TQPoint(w-1, 0));
|
|
p.drawEllipse(cr);
|
|
}
|
|
if ( (blockMode & BaseBoard::Down) || (blockMode & BaseBoard::Right) ){
|
|
cr.moveCenter(TQPoint(w-1, w-1));
|
|
p.drawEllipse(cr);
|
|
}
|
|
if ( (blockMode & BaseBoard::Left) || (blockMode & BaseBoard::Down) ) {
|
|
cr.moveCenter(TQPoint(0, w-1));
|
|
p.drawEllipse(cr);
|
|
}
|
|
}
|
|
|
|
p.end();
|
|
pixmap->setMask(bitmap);
|
|
}
|