Leser: 1
![]() |
|< 1 2 3 4 >| | ![]() |
38 Einträge, 4 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Aufruf:
$SimpleButton = SimpleButton->new($id,$app,(65*$x),(25*$i),$img,$img2);
MODUL:
sub new {
my $self = shift;
my $Referenz = {};
$Referenz->{ID} = shift;
$Referenz->{APP} = shift;
$Referenz->{X} = shift;
$Referenz->{Y} = shift;
$Referenz->{IMG} = shift;
$Referenz->{IMGHV} = shift;
$Referenz->{HV} = 0;
bless($Referenz,$self);
print " -- ",$Referenz->{IMG}," ---";
$Referenz->draw($Referenz->{IMG});
return($Referenz);
}
sub draw
{
my ($self, $img) = @_;
print "IMG: $img";
}
my $SimpleButton = SimpleButton->new();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/perl
package SimpleButton;
sub new {
my ($class,@params) = @_;
my $self = {};
bless($self,$class);
#for(qw(ID APP X Y IMG IMGHV)){$self->{$_} = shift(@params);}
$self->{ID} = shift(@params);
$self->{APP} = shift(@params);
$self->{X} = shift(@params);
$self->{Y} = shift(@params);
$self->{IMG} = shift(@params);
$self->{IMGHV} = shift(@params);
$self->{HV} = 0;
$self->draw($self->{IMG});
return($self);
}
sub draw
{
my ($self, $img) = @_;
my $frame_rect = SDL::Rect->new(-height => $img->height(),-width => $img->width(),-x => 0, -y => 0);
my $dest_rect = SDL::Rect->new(-height => $img->height(),-width => $img->width(),
-x => $self->{X},-y => $self->{Y},);
$img->blit( $frame_rect, $self->{APP}, $dest_rect );
$self->{APP}->update( $dest_rect );
$self->{APP}->flip;
}
sub check
{
my $self = shift;
my $mx = shift;
my $my = shift;
my $event = shift;
my $img = $self->{IMG};
#Hover - Effekt
if($mx > $self->{X} && $mx < ($self->{X}+ $img->width) && $my > $self->{Y} && $my < ($self->{Y}+ $img->height) )
{
if(not $self->{HV}) {$self->{HV}=1; $self->draw($self->{IMGHV});}
if($event->button eq 1 ) {return $self->{ID};}
} else
{
if($self->{HV}) {$self->{HV}=0; $self->draw($self->{IMG});}
return 0;
}
}
1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use FindBin qw($Bin); chdir($Bin);
use lib $FindBin::Bin . '/LIBS';
use SimpleButton; #in zusätzlichen sub dir "X", daher X::
use SDL;
use SDL::App;
use SDL::Event;
use SDL::Surface;
use SDL::Color;
use SDL::Rect;
my $app = SDL::App->new(
-width => 730,
-height => 430,
-depth => 16,
);
$img = SDL::Surface->new( -name => 'x.png' );
$img2 = SDL::Surface->new( -name => 'x_on.png' );
#Button hinzufügen...
for my $i (0..15)
{
for my $x (0..10)
{
$id++;
push(@butts, SimpleButton->new($id,$app,(65*$x),(25*$i),$img,$img2) );
}
}
$event = new SDL::Event();
while(1)
{
# process event queue
$event->pump;
$event->poll;
my $etype=$event->type;
# handle user events
last if ($etype eq SDL_QUIT );
last if (SDL::GetKeyState(SDLK_ESCAPE));
for(@butts)
{
my $click = $_->check($event->button_x,$event->button_y,$event);
if($click ne 0 ) {print "\r ",$click," ";}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package SimpleButton;
#Erzeugen
sub new {
my ($class,@params) = @_;
my $self = {};
bless($self,$class);
#for(qw(ID APP X Y IMG IMGHV)){$self->{$_} = shift(@params);}
$self->{ID} = shift(@params); &n
bsp; #ID oder Name
$self->{APP} = shift(@params); &n
bsp; #SDL APP
$self->{X} = shift(@params);
$self->{Y} = shift(@params);
$self->{IMG} = shift(@params); &n
bsp; #IMG normal
$self->{IMGHV} = shift(@params); #IMG hover
$self->{DOSUB} = shift(@params); &n
bsp; #Button's sub
$self->{HV} = 0; &nbs
p; #Hover state
$self->draw($self->{IMG}); &n
bsp; #Display
push(@butts, $self);
return($self);
}
#Button darstellen
sub draw
{
my ($self, $img) = @_;
my $dest_rect = SDL::Rect->new(-height => $img->height(),-width => $img->width(),-x=> $self->{X},-y => $self->{Y});
$img->blit( SDL::Rect->new(-height => $img->height(),-width => $img->width(),-x => 0, -y => 0), $self->{APP}, $dest_rect );
$self->{APP}->update( $dest_rect );
}
#Alle Elemente Prüfen
sub checkall
{
my ($self, $mx, $my) = @_;
for(@butts) { if($_->check_button($mx,$my)){$active_element = $_;} }
return $active_element;
}
#Sub zurückgeben
sub dosub
{ my $self = shift; return $self->{DOSUB}; }
sub get
{
my $self = shift;
my $values = shift;
return $self->{"$values"};
}
sub check_button
{
my ($self, $mx, $my) = @_;
my $img = $self->{IMG};
#Hover - Effekt
if($mx > $self->{X} && $mx < ($self->{X}+ $img->width) && $my > $self->{Y} && $my < ($self->{Y}+ $img->height) )
{
if(not $self->{HV}) {$self->{HV}=1; $self->draw($self->{IMGHV});}
return true;
} else
{
if($self->{HV}) {$self->{HV}=0; $self->draw($self->{IMG});}
}
return false;
}
sub button_check{}
sub button_hover{}
sub button_click{}
1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
while(1)
{
#process event queue
$event->pump;
$event->poll;
my $etype=$event->type;
# handle user events
last if ($etype eq SDL_QUIT );
last if (SDL::GetKeyState(SDLK_ESCAPE));
$checked = SimpleButton->checkall($event->button_x,$event->button_y);
print "\r ",$checked->get('ID')," ";
if($event->button eq 1)
{
&{$checked->dosub()}($checked);
}
}
#Button Event
sub loslos
{
my $self = shift;
print "\r ",$self->get('ID')," ";
}
![]() |
|< 1 2 3 4 >| | ![]() |
38 Einträge, 4 Seiten |