1 | package Crossfire::Client::Widget; |
1 | package Crossfire::Client::Widget; |
2 | |
2 | |
3 | use strict; |
3 | use strict; |
|
|
4 | use SDL::OpenGL; |
|
|
5 | use SDL::OpenGL::Constants; |
4 | |
6 | |
5 | our $FOCUS; # the widget with current focus |
7 | our $FOCUS; # the widget with current focus |
6 | our %ACTIVE_WIDGETS; |
8 | our %ACTIVE_WIDGETS; |
7 | |
9 | |
8 | # class methods for events |
10 | # class methods for events |
… | |
… | |
48 | |
50 | |
49 | sub button_up { |
51 | sub button_up { |
50 | my ($widget, $sdlev) = @_; |
52 | my ($widget, $sdlev) = @_; |
51 | } |
53 | } |
52 | |
54 | |
|
|
55 | sub x { $_[0]->{x} = $_[1] if $_[1]; $_[0]->{x} } |
|
|
56 | sub y { $_[0]->{y} = $_[1] if $_[1]; $_[0]->{y} } |
|
|
57 | |
53 | sub draw { |
58 | sub draw { |
|
|
59 | my ($self) = @_; |
|
|
60 | |
|
|
61 | glPushMatrix; |
|
|
62 | glTranslate ($self->{x} || 0, $self->{y} || 0, 0); |
|
|
63 | $self->_draw; |
|
|
64 | glPopMatrix; |
|
|
65 | } |
|
|
66 | |
|
|
67 | sub _draw { |
54 | my ($widget) = @_; |
68 | my ($widget) = @_; |
55 | } |
69 | } |
56 | |
70 | |
57 | sub bbox { |
71 | sub bbox { |
58 | my ($widget) = @_; |
72 | my ($widget) = @_; |
… | |
… | |
70 | $self->{texture} = new_from_ttf Crossfire::Client::Texture $ttf, $text; |
84 | $self->{texture} = new_from_ttf Crossfire::Client::Texture $ttf, $text; |
71 | |
85 | |
72 | $self |
86 | $self |
73 | } |
87 | } |
74 | |
88 | |
75 | sub draw { |
89 | sub _draw { |
76 | my ($self) = @_; |
90 | my ($self) = @_; |
77 | |
91 | |
78 | my $tex = $self->{texture}; |
92 | my $tex = $self->{texture}; |
79 | |
93 | |
80 | glEnable GL_TEXTURE_2D; |
94 | glEnable GL_TEXTURE_2D; |
… | |
… | |
102 | sub add_line { |
116 | sub add_line { |
103 | my ($self, $line) = @_; |
117 | my ($self, $line) = @_; |
104 | push @{$self->{lines}}, $line; |
118 | push @{$self->{lines}}, $line; |
105 | } |
119 | } |
106 | |
120 | |
107 | sub draw { |
121 | sub _draw { |
108 | my ($self) = @_; |
122 | my ($self) = @_; |
109 | |
123 | |
110 | } |
124 | } |
111 | |
125 | |
112 | package Crossfire::Client::Widget::MapWidget; |
126 | package Crossfire::Client::Widget::MapWidget; |
… | |
… | |
123 | } |
137 | } |
124 | |
138 | |
125 | sub key_up { |
139 | sub key_up { |
126 | } |
140 | } |
127 | |
141 | |
128 | sub draw { |
142 | sub _draw { |
129 | glEnable GL_TEXTURE_2D; |
143 | glEnable GL_TEXTURE_2D; |
130 | glEnable GL_BLEND; |
144 | glEnable GL_BLEND; |
131 | |
145 | |
132 | my $map = $::CONN->{map}; |
146 | my $map = $::CONN->{map}; |
133 | |
147 | |