/usr/local/CPAN/Qt/DisplayWidget.pm
package DisplayWidget;
use strict;
use warnings;
use QtCore4;
use QtGui4;
# [DisplayWidget class definition]
use QtCore4::isa qw( Qt::Widget );
use QtCore4::slots
setBackground => ['int'],
setColor => ['const Qt::Color &'],
setShape => ['int'];
use constant { House => 0, Car => 1 };
use constant { Sky => 0, Trees => 1, Road => 2 };
sub background() {
return this->{background};
}
sub shapeColor() {
return this->{shapeColor};
}
sub shape() {
return this->{shape};
}
sub shapeMap() {
return this->{shapeMap};
}
sub moon() {
return this->{moon};
}
sub tree() {
return this->{tree};
}
# [DisplayWidget class definition]
sub NEW
{
my ($class, $parent) = @_;
$class->SUPER::NEW($parent);
my $car = Qt::PainterPath();
my $house = Qt::PainterPath();
this->{tree} = Qt::PainterPath();
this->{moon} = Qt::PainterPath();
my $file = Qt::File('resources/shapes.dat');
$file->open(Qt::File::ReadOnly());
my $stream = Qt::DataStream($file);
no warnings qw(void);
$stream >> $car >> $house >> this->{tree} >> this->{moon};
use warnings;
$file->close();
this->{shapeMap} = {
Car() => $car,
House() => $house
};
this->{background} = Sky;
this->{shapeColor} = Qt::Color(Qt::darkYellow());
this->{shape} = House;
}
# [paint event]
sub paintEvent
{
my ($event) = @_;
my $painter = Qt::Painter();
$painter->begin(this);
$painter->setRenderHint(Qt::Painter::Antialiasing());
this->paint($painter);
$painter->end();
}
# [paint event]
# [paint function]
sub paint
{
my ($painter) = @_;
#[paint picture]
$painter->setClipRect(Qt::Rect(0, 0, 200, 200));
$painter->setPen(Qt::NoPen());
if (this->background == Trees)
{
$painter->fillRect(Qt::Rect(0, 0, 200, 200), Qt::Color(Qt::darkGreen()));
$painter->setBrush(Qt::Brush(Qt::Color(Qt::green())));
$painter->setPen(Qt::black());
for (my $y = -55, my $row = 0; $y < 200; $y += 50, ++$row) {
my $xs;
if ($row == 2 || $row == 3) {
$xs = 150;
}
else {
$xs = 50;
}
for (my $x = 0; $x < 200; $x += $xs) {
$painter->save();
$painter->translate($x, $y);
$painter->drawPath(this->tree);
$painter->restore();
}
}
}
elsif (this->background == Road) {
$painter->fillRect(Qt::Rect(0, 0, 200, 200), Qt::Color(Qt::gray()));
$painter->setPen(Qt::Pen(Qt::Brush(Qt::Color(Qt::white())), 4, Qt::DashLine()));
$painter->drawLine(Qt::Line(0, 35, 200, 35));
$painter->drawLine(Qt::Line(0, 165, 200, 165));
}
else {
$painter->fillRect(Qt::Rect(0, 0, 200, 200), Qt::Color(Qt::darkBlue()));
$painter->translate(145, 10);
$painter->setBrush(Qt::Brush(Qt::Color(Qt::white())));
$painter->drawPath(this->moon);
$painter->translate(-145, -10);
}
$painter->setBrush(Qt::Brush(this->shapeColor));
$painter->setPen(Qt::black());
$painter->translate(100, 100);
$painter->drawPath(this->shapeMap->{this->shape});
#[paint picture]
}
# [paint function]
sub color
{
return this->shapeColor;
}
sub setBackground
{
my ($background) = @_;
this->{background} = $background;
this->update();
}
sub setColor
{
my ($color) = @_;
this->{shapeColor} = $color;
this->update();
}
sub setShape
{
my ($shape) = @_;
this->{shape} = $shape;
this->update();
}
1;