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.
tdegames/ktuberling/todraw.cpp

91 lines
2.1 KiB

/* -------------------------------------------------------------
KDE Tuberling
Object to draw on the game board
mailto:e.bischoff@noos.fr
------------------------------------------------------------- */
#include <tqbitmap.h>
#include <tqpainter.h>
#include "todraw.h"
// Constructor with no arguments
ToDraw::ToDraw()
: position()
{
number = -1;
}
// Copy constructor
ToDraw::ToDraw(const ToDraw &model)
: position(model.position)
{
number = model.number;
}
// Constructor with arguments
ToDraw::ToDraw(int declaredNumber, const TQRect &declaredPosition)
: position(declaredPosition)
{
number = declaredNumber;
}
// Affectation operator
ToDraw &ToDraw::operator=(const ToDraw &model)
{
if (&model == this) return *this;
position = model.position;
number = model.number;
return *this;
}
// Draw an object previously laid down on the game board
void ToDraw::draw(TQPainter &artist, const TQRect &area,
const TQRect *objectsLayout,
const TQPixmap *gameboard, const TQBitmap *masks) const
{
if (!position.intersects(area)) return;
TQPixmap objectPixmap(objectsLayout[number].size());
TQBitmap shapeBitmap(objectsLayout[number].size());
bitBlt(&objectPixmap, TQPoint(0, 0), gameboard, objectsLayout[number], Qt::CopyROP);
bitBlt(&shapeBitmap, TQPoint(0, 0), masks, objectsLayout[number], Qt::CopyROP);
objectPixmap.setMask(shapeBitmap);
artist.drawPixmap(position.topLeft(), objectPixmap);
}
// Load an object from a file
bool ToDraw::load(FILE *fp, int decorations, bool &eof)
{
int nitems;
int pl, pt, pr, pb;
nitems = fscanf(fp, "%d\t%d %d %d %d\n", &number, &pl, &pt, &pr, &pb);
if (nitems == EOF)
{
eof = true;
return true;
}
eof = false;
if (nitems != 5) return false;
if (number < 0 || number >= decorations) return false;
position.setCoords(pl, pt, pr, pb);
return true;
}
// Save an object to a file
void ToDraw::save(FILE *fp) const
{
fprintf(fp, "%d\t%d %d %d %d\n",
number,
position.left(), position.top(), position.right(), position.bottom());
}