389 lines
5.8 KiB
Perl
389 lines
5.8 KiB
Perl
package Term::Caca;
|
|
|
|
require Exporter;
|
|
require DynaLoader;
|
|
$VERSION = '0.9_1';
|
|
@ISA = qw(Exporter DynaLoader);
|
|
Term::Caca->bootstrap($VERSION);
|
|
|
|
use strict;
|
|
use Term::Caca::Constants ':all';
|
|
|
|
# Basic functions
|
|
|
|
# constructor
|
|
sub new {
|
|
my ($class) = @_;
|
|
_init();
|
|
my $self = { };
|
|
return bless($self => $class);
|
|
}
|
|
*init = \*new;
|
|
|
|
# set delay for establishing constant framerate
|
|
sub set_delay {
|
|
my ($self, $usec) = @_;
|
|
$usec ||= 0;
|
|
_set_delay($usec);
|
|
}
|
|
|
|
#
|
|
sub get_feature {
|
|
my ($self, $feature) = @_;
|
|
$feature ||= 0;
|
|
return _get_feature($feature);
|
|
}
|
|
|
|
#
|
|
sub set_feature {
|
|
my ($self, $feature) = @_;
|
|
$feature ||= 0;
|
|
_get_feature($feature);
|
|
}
|
|
|
|
#
|
|
sub get_feature_name {
|
|
my ($self, $feature) = @_;
|
|
$feature ||= 0;
|
|
return _get_feature_name($feature);
|
|
}
|
|
|
|
#
|
|
sub get_rendertime {
|
|
# my ($self) = @_;
|
|
return _get_rendertime();
|
|
}
|
|
|
|
#
|
|
sub get_width {
|
|
# my ($self) = @_;
|
|
return _get_width();
|
|
}
|
|
|
|
#
|
|
sub get_height {
|
|
# my ($self) = @_;
|
|
return _get_height();
|
|
}
|
|
|
|
#
|
|
sub set_window_title {
|
|
my ($self, $title) = @_;
|
|
$title ||= "";
|
|
return _set_window_title($title);
|
|
}
|
|
|
|
#
|
|
sub get_window_width {
|
|
# my ($self) = @_;
|
|
return _get_window_width();
|
|
}
|
|
|
|
#
|
|
sub get_window_height {
|
|
# my ($self) = @_;
|
|
return _get_window_height();
|
|
}
|
|
|
|
#
|
|
sub refresh {
|
|
_refresh();
|
|
}
|
|
|
|
# destructor
|
|
sub DESTROY {
|
|
my ($self) = @_;
|
|
_end();
|
|
}
|
|
|
|
# Event handling
|
|
|
|
#
|
|
sub get_event {
|
|
my ($self, $event_mask) = @_;
|
|
if (!defined($event_mask)) {
|
|
$event_mask = 0xFFFFFFFF;
|
|
}
|
|
return _get_event($event_mask);
|
|
}
|
|
|
|
#
|
|
sub get_mouse_x {
|
|
my ($self) = @_;
|
|
return _get_mouse_x();
|
|
}
|
|
|
|
#
|
|
sub get_mouse_y {
|
|
my ($self) = @_;
|
|
return _get_mouse_y();
|
|
}
|
|
|
|
#
|
|
sub wait_event {
|
|
my ($self, $event_mask) = @_;
|
|
$event_mask ||= CACA_EVENT_ANY;
|
|
return _wait_event($event_mask);
|
|
}
|
|
|
|
1;
|
|
|
|
# Character printing
|
|
|
|
#
|
|
sub set_color {
|
|
my ($self, $fgcolor, $bgcolor) = @_;
|
|
$fgcolor ||= CACA_COLOR_LIGHTGRAY;
|
|
$bgcolor ||= CACA_COLOR_BLACK;
|
|
return _set_color($fgcolor, $bgcolor);
|
|
}
|
|
|
|
#
|
|
sub get_fg_color {
|
|
my ($self) = @_;
|
|
return _get_fg_color();
|
|
}
|
|
|
|
#
|
|
sub get_bg_color {
|
|
my ($self) = @_;
|
|
return _get_bg_color();
|
|
}
|
|
|
|
#
|
|
sub get_color_name {
|
|
my ($self, $color) = @_;
|
|
return undef unless(defined($color));
|
|
return _get_color_name($color);
|
|
}
|
|
|
|
#
|
|
sub putchar {
|
|
my ($self, $x, $y, $c) = @_;
|
|
$x ||= 0;
|
|
$y ||= 0;
|
|
$c ||= "";
|
|
_putchar($x, $y, $c);
|
|
}
|
|
|
|
#
|
|
sub putstr {
|
|
my ($self, $x, $y, $s) = @_;
|
|
$x ||= 0;
|
|
$y ||= 0;
|
|
$s ||= "";
|
|
_putstr($x, $y, $s);
|
|
}
|
|
|
|
# faking it by doing printf on the perl side
|
|
sub printf {
|
|
my ($self, $x, $y, $s, @args) = @_;
|
|
$x ||= 0;
|
|
$y ||= 0;
|
|
my $string = sprintf($s, @args);
|
|
_putstr($x, $y, $string);
|
|
}
|
|
|
|
#
|
|
sub clear {
|
|
_clear();
|
|
}
|
|
|
|
# Primitives drawing
|
|
|
|
#
|
|
sub draw_line {
|
|
my ($self, $x1, $y1, $x2, $y2, $c) = @_;
|
|
_draw_line($x1, $y1, $x2, $y2, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_polyline {
|
|
my ($self, $x, $y, $n, $c) = @_;
|
|
_draw_polyline($x, $y, $n, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_thin_line {
|
|
my ($self, $x1, $y1, $x2, $y2) = @_;
|
|
_draw_thin_line($x1, $y1, $x2, $y2);
|
|
}
|
|
|
|
#
|
|
sub draw_thin_polyline {
|
|
my ($self, $x, $y, $n) = @_;
|
|
_draw_thin_polyline($x, $y, $n);
|
|
}
|
|
|
|
#
|
|
sub draw_circle {
|
|
my ($self, $x, $y, $r, $c) = @_;
|
|
# TODO : check for sane values
|
|
_draw_circle($x, $y, $r, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_ellipse {
|
|
my ($self, $x0, $y0, $ra, $rb, $c) = @_;
|
|
_draw_ellipse($x0, $y0, $ra, $rb, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_thin_ellipse {
|
|
my ($self, $x0, $y0, $ra, $rb) = @_;
|
|
_draw_ellipse($x0, $y0, $ra, $rb);
|
|
}
|
|
|
|
#
|
|
sub fill_ellipse {
|
|
my ($self, $x0, $y0, $ra, $rb, $c) = @_;
|
|
_fill_ellipse($x0, $y0, $ra, $rb, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_box {
|
|
my ($self, $x0, $y0, $x1, $y1, $c) = @_;
|
|
_draw_box($x0, $y0, $x1, $y1, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_thin_box {
|
|
my ($self, $x0, $y0, $x1, $y1) = @_;
|
|
_draw_thin_box($x0, $y0, $x1, $y1);
|
|
}
|
|
|
|
#
|
|
sub fill_box {
|
|
my ($self, $x0, $y0, $x1, $y1, $c) = @_;
|
|
_fill_box($x0, $y0, $x1, $y1, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_triangle {
|
|
my ($self, $x0, $y0, $x1, $y1, $x2, $y2, $c) = @_;
|
|
_draw_triangle($x0, $y0, $x1, $y1, $x2, $y2, $c);
|
|
}
|
|
|
|
#
|
|
sub draw_thin_triangle {
|
|
my ($self, $x0, $y0, $x1, $y1, $x2, $y2) = @_;
|
|
_draw_thin_triangle($x0, $y0, $x1, $y1, $x2, $y2);
|
|
}
|
|
|
|
#
|
|
sub fill_triangle {
|
|
my ($self, $x0, $y0, $x1, $y1, $x2, $y2, $c) = @_;
|
|
_fill_triangle($x0, $y0, $x1, $y1, $x2, $y2, $c);
|
|
}
|
|
|
|
# Mathematical functions
|
|
|
|
#
|
|
sub rand {
|
|
my ($self, $min, $max) = @_;
|
|
return _rand($min, $max);
|
|
}
|
|
|
|
#
|
|
sub sqrt {
|
|
my ($self, $n) = @_;
|
|
return _sqrt($n);
|
|
}
|
|
|
|
# Sprite handling
|
|
|
|
#
|
|
sub load_sprite {
|
|
my ($self, $file) = @_;
|
|
my $sprite = _load_sprite($file);
|
|
}
|
|
|
|
#
|
|
sub get_sprite_frames {
|
|
my ($self, $sprite) = @_;
|
|
return _get_sprite_frames($sprite);
|
|
}
|
|
|
|
#
|
|
sub get_sprite_width {
|
|
my ($self, $sprite) = @_;
|
|
return _get_sprite_width($sprite);
|
|
}
|
|
|
|
#
|
|
sub get_sprite_height {
|
|
my ($self, $sprite) = @_;
|
|
return _get_sprite_height($sprite);
|
|
}
|
|
|
|
#
|
|
sub get_sprite_dx {
|
|
my ($self, $sprite) = @_;
|
|
return _get_sprite_dx($sprite);
|
|
}
|
|
|
|
#
|
|
sub get_sprite_dy {
|
|
my ($self, $sprite) = @_;
|
|
return _get_sprite_dy($sprite);
|
|
}
|
|
|
|
#
|
|
sub draw_sprite {
|
|
my ($self, $x, $y, $sprite, $f) = @_;
|
|
_draw_sprite($x, $y, $sprite, $f);
|
|
}
|
|
|
|
#
|
|
sub free_sprite {
|
|
my ($self, $sprite) = @_;
|
|
_free_sprite($sprite);
|
|
}
|
|
|
|
# Bitmap handling
|
|
|
|
#
|
|
sub create_bitmap {
|
|
my ($self, $bpp, $w, $h, $pitch, $rmask, $gmask, $bmask, $amask) = @_;
|
|
_create_bitmap($bpp, $w, $h, $pitch, $rmask, $gmask, $bmask, $amask);
|
|
}
|
|
|
|
#
|
|
sub set_bitmap_palette {
|
|
my ($self, $bitmap, $red, $green, $blue, $alpha) = @_;
|
|
_set_bitmap_palette($bitmap, $red, $green, $blue, $alpha);
|
|
}
|
|
|
|
#
|
|
sub draw_bitmap {
|
|
my ($self, $x1, $y1, $x2, $y2, $bitmap, $pixels) = @_;
|
|
_draw_bitmap($x1, $y1, $x2, $y2, $bitmap, $pixels);
|
|
}
|
|
|
|
sub free_bitmap {
|
|
my ($self, $bitmap) = @_;
|
|
_free_bitmap($bitmap);
|
|
}
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
Term::Caca - perl interface for libcaca (Colour AsCii Art library)
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
=head2 Class Methods
|
|
|
|
=head2 Object Methods
|
|
|
|
=head1 AUTHOR
|
|
|
|
=head1 SEE ALSO
|
|
|
|
=cut
|
|
|
|
# vim:sw=2 sts=2 expandtab
|