… | |
… | |
140 | |
140 | |
141 | # call when resolution changes etc. |
141 | # call when resolution changes etc. |
142 | sub rescale_widgets { |
142 | sub rescale_widgets { |
143 | my ($sx, $sy) = @_; |
143 | my ($sx, $sy) = @_; |
144 | |
144 | |
|
|
145 | # make a copy, otherwise for complains about freed values. |
145 | for my $widget (values %WIDGET) { |
146 | my @widgets = values %WIDGET; |
|
|
147 | |
|
|
148 | for my $widget (@widgets) { |
146 | if ($widget->{toplevel}) { |
149 | if ($widget->{toplevel}) { |
147 | $widget->{x} = int 0.5 + $widget->{x} * $sx if exists $widget->{x}; |
150 | $widget->{x} = int 0.5 + $widget->{x} * $sx if exists $widget->{x}; |
148 | $widget->{w} = int 0.5 + $widget->{w} * $sx if exists $widget->{w}; |
151 | $widget->{w} = int 0.5 + $widget->{w} * $sx if exists $widget->{w}; |
149 | $widget->{req_w} = int 0.5 + $widget->{req_w} * $sx if exists $widget->{req_w}; |
152 | $widget->{req_w} = int 0.5 + $widget->{req_w} * $sx if exists $widget->{req_w}; |
150 | $widget->{user_w} = int 0.5 + $widget->{user_w} * $sx if exists $widget->{user_w}; |
153 | $widget->{user_w} = int 0.5 + $widget->{user_w} * $sx if exists $widget->{user_w}; |
… | |
… | |
1297 | #bg => none |
1300 | #bg => none |
1298 | #active_bg => none |
1301 | #active_bg => none |
1299 | #font => default_font |
1302 | #font => default_font |
1300 | #text => initial text |
1303 | #text => initial text |
1301 | #markup => initial narkup |
1304 | #markup => initial narkup |
|
|
1305 | #max_w => maximum pixel width |
|
|
1306 | ellipsise => 3, # end |
1302 | layout => (new CFClient::Layout), |
1307 | layout => (new CFClient::Layout), |
1303 | fontsize => 1, |
1308 | fontsize => 1, |
1304 | align => -1, |
1309 | align => -1, |
1305 | valign => -1, |
1310 | valign => -1, |
1306 | padding => 2, |
1311 | padding => 2, |
… | |
… | |
1371 | sub size_request { |
1376 | sub size_request { |
1372 | my ($self) = @_; |
1377 | my ($self) = @_; |
1373 | |
1378 | |
1374 | $self->{layout}->set_font ($self->{font}) if $self->{font}; |
1379 | $self->{layout}->set_font ($self->{font}) if $self->{font}; |
1375 | $self->{layout}->set_width ($self->{max_w} || -1); |
1380 | $self->{layout}->set_width ($self->{max_w} || -1); |
|
|
1381 | $self->{layout}->set_ellipsise ($self->{ellipsise}); |
|
|
1382 | $self->{layout}->set_single_paragraph_mode ($self->{ellipsise}); |
1376 | $self->{layout}->set_height ($self->{fontsize} * $::FONTSIZE); |
1383 | $self->{layout}->set_height ($self->{fontsize} * $::FONTSIZE); |
1377 | |
1384 | |
1378 | my ($w, $h) = $self->{layout}->size; |
1385 | my ($w, $h) = $self->{layout}->size; |
1379 | |
1386 | |
1380 | if (exists $self->{template}) { |
1387 | if (exists $self->{template}) { |
… | |
… | |
1416 | |
1423 | |
1417 | my $tex = $self->{texture} ||= do { |
1424 | my $tex = $self->{texture} ||= do { |
1418 | $self->{layout}->set_foreground (@{$self->{fg}}); |
1425 | $self->{layout}->set_foreground (@{$self->{fg}}); |
1419 | $self->{layout}->set_font ($self->{font}) if $self->{font}; |
1426 | $self->{layout}->set_font ($self->{font}) if $self->{font}; |
1420 | $self->{layout}->set_width ($self->{w}); |
1427 | $self->{layout}->set_width ($self->{w}); |
|
|
1428 | $self->{layout}->set_ellipsise ($self->{ellipsise}); |
|
|
1429 | $self->{layout}->set_single_paragraph_mode ($self->{ellipsise}); |
1421 | $self->{layout}->set_height (List::Util::min $self->{h}, $self->{fontsize} * $::FONTSIZE); |
1430 | $self->{layout}->set_height ($self->{fontsize} * $::FONTSIZE); |
1422 | |
1431 | |
1423 | my $tex = new_from_layout CFClient::Texture $self->{layout}; |
1432 | my $tex = new_from_layout CFClient::Texture $self->{layout}; |
1424 | |
1433 | |
1425 | $self->{ox} = int ($self->{align} < 0 ? $self->{padding} |
1434 | $self->{ox} = int ($self->{align} < 0 ? $self->{padding} |
1426 | : $self->{align} > 0 ? $self->{w} - $tex->{w} - $self->{padding} |
1435 | : $self->{align} > 0 ? $self->{w} - $tex->{w} - $self->{padding} |
… | |
… | |
2426 | |
2435 | |
2427 | sub set_tooltip_from { |
2436 | sub set_tooltip_from { |
2428 | my ($self, $widget) = @_; |
2437 | my ($self, $widget) = @_; |
2429 | |
2438 | |
2430 | $self->add (new CFClient::UI::Label |
2439 | $self->add (new CFClient::UI::Label |
2431 | markup => $widget->{tooltip}, |
2440 | markup => $widget->{tooltip}, |
2432 | max_w => ($widget->{tooltip_width} || 0.25) * $::WIDTH, |
2441 | max_w => ($widget->{tooltip_width} || 0.25) * $::WIDTH, |
2433 | fontsize => 0.8, |
2442 | fontsize => 0.8, |
2434 | fg => [0, 0, 0, 1], |
2443 | fg => [0, 0, 0, 1], |
|
|
2444 | ellipsise => 0, |
2435 | font => ($widget->{tooltip_font} || $::FONT_PROP), |
2445 | font => ($widget->{tooltip_font} || $::FONT_PROP), |
2436 | ); |
2446 | ); |
2437 | } |
2447 | } |
2438 | |
2448 | |
2439 | sub size_request { |
2449 | sub size_request { |
2440 | my ($self) = @_; |
2450 | my ($self) = @_; |
… | |
… | |
2774 | # TODO: doesn't handle markup well (read as: at all) |
2784 | # TODO: doesn't handle markup well (read as: at all) |
2775 | my $short = $item->{count} > 1 |
2785 | my $short = $item->{count} > 1 |
2776 | ? "<b>$item->{count} ×</b> $item->{text}" |
2786 | ? "<b>$item->{count} ×</b> $item->{text}" |
2777 | : $item->{text}; |
2787 | : $item->{text}; |
2778 | |
2788 | |
2779 | my $fontsize = $item->{fontsize} || $self->{fontsize}; |
|
|
2780 | |
|
|
2781 | for ($short) { |
2789 | for ($short) { |
2782 | s/^\s+//; |
2790 | s/^\s+//; |
2783 | s/\s+/ /g; |
2791 | s/\s+/ /g; |
2784 | my $len = int 40 / $fontsize; |
|
|
2785 | substr $_, $len, length, "…" if $len < length; |
|
|
2786 | } |
2792 | } |
2787 | |
2793 | |
2788 | new CFClient::UI::Label |
2794 | new CFClient::UI::Label |
2789 | markup => $short, |
2795 | markup => $short, |
2790 | tooltip => $item->{tooltip}, |
2796 | tooltip => $item->{tooltip}, |
2791 | tooltip_font => $::FONT_PROP, |
2797 | tooltip_font => $::FONT_PROP, |
2792 | tooltip_width => 0.67, |
2798 | tooltip_width => 0.67, |
2793 | fontsize => $fontsize, |
2799 | fontsize => $item->{fontsize} || $self->{fontsize}, |
|
|
2800 | max_w => $::WIDTH * 0.44, |
2794 | fg => $item->{fg}, |
2801 | fg => $item->{fg}, |
2795 | can_events => 1, |
2802 | can_events => 1, |
2796 | can_hover => 1 |
2803 | can_hover => 1 |
2797 | }; |
2804 | }; |
2798 | } |
2805 | } |
… | |
… | |
2835 | } |
2842 | } |
2836 | |
2843 | |
2837 | $self->reorder; |
2844 | $self->reorder; |
2838 | } |
2845 | } |
2839 | |
2846 | |
|
|
2847 | sub reconfigure { |
|
|
2848 | my ($self) = @_; |
|
|
2849 | |
|
|
2850 | delete $_->{label} |
|
|
2851 | for values %{ $self->{item} || {} }; |
|
|
2852 | |
|
|
2853 | $self->reorder; |
|
|
2854 | $self->SUPER::reconfigure; |
|
|
2855 | } |
|
|
2856 | |
2840 | ############################################################################# |
2857 | ############################################################################# |
2841 | |
2858 | |
2842 | package CFClient::UI::Root; |
2859 | package CFClient::UI::Root; |
2843 | |
2860 | |
2844 | our @ISA = CFClient::UI::Container::; |
2861 | our @ISA = CFClient::UI::Container::; |
… | |
… | |
3017 | ############################################################################# |
3034 | ############################################################################# |
3018 | |
3035 | |
3019 | package CFClient::UI; |
3036 | package CFClient::UI; |
3020 | |
3037 | |
3021 | $ROOT = new CFClient::UI::Root; |
3038 | $ROOT = new CFClient::UI::Root; |
3022 | $TOOLTIP = new CFClient::UI::Tooltip; |
3039 | $TOOLTIP = new CFClient::UI::Tooltip z => 900; |
3023 | |
3040 | |
3024 | 1 |
3041 | 1 |
3025 | |
3042 | |