Viewing file: transparent.pl (2.55 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
=pod
=head1 NAME
examples/transparent.pl - Prima toolkit example
=head1 FEATURES
Demonstrates the usage of Prima::Widget::transparent property. Test the certain events: for example, when two transparent widgets are located one upon another, when a graphic content changed under a transparent widget, etc.
Note that the $tt widget is not transparent but uses shape extension.
=cut
use strict; use warnings;
use Prima; use Prima::Const; use Prima::Application name => 'Generic.pm';
my $w = Prima::MainWindow-> create( size => [ 300, 300], borderStyle => bs::Dialog, backColor => cl::Green, onCreate => sub { $_[0]-> {delta} = 0; }, onPaint => sub { my ($self,$canvas) = @_; my $c = $self-> color; $canvas-> color( $self-> backColor); $canvas-> bar(0,0,$self-> size); $canvas-> color( $c); my $d = $self-> {delta}; my $i; for ( $i = -1; $i < 7; $i++) { $canvas-> text_out("Hello!", $d + $i * 40, $d + $i * 40); } }, );
$w-> insert( Timer => timeout => 100, onTick => sub { $w-> {delta} += 2; $w-> { delta} = 0 if $w-> { delta} >= 40; $w-> repaint; } )-> start;
$w-> insert( Widget => origin => [ 90, 90], transparent => 1, onPaint => sub { my $self = $_[0]; $self-> color( cl::LightGreen); $self-> lineWidth( 4); $self-> line( 3, 3, $self-> size); $self-> ellipse( 50, 50, 80, 80); }, onMouseDown => sub { $_[0]-> bring_to_front; }, );
goto NOSHAPE unless $::application-> get_system_value( sv::ShapeExtension); my $string = "Hello from Prima::OnScreenDisplay!"; my $tt = Prima::Widget-> create( name => 'W1', backColor => cl::LightRed, onMouseDown => sub { $_[0]-> {drag} = [ $_[3], $_[4]]; $_[0]-> {lastPos} = [ $_[0]-> left, $_[0]-> bottom]; $_[0]-> capture(1); $_[0]-> repaint; }, onMouseMove => sub{ return unless exists $_[0]-> { drag}; my @org = $_[0]-> origin; my @st = @{$_[0]-> {drag}}; my @new = ( $org[0] + $_[2] - $st[0], $org[1] + $_[3] - $st[1]); $_[0]-> origin( $new[0], $new[1]) if $org[1] != $new[1] || $org[0] != $new[0]; }, onMouseUp => sub { $_[0]-> capture(0); delete $_[0]-> {drag}; }, );
$tt-> begin_paint_info; $tt-> font-> height( $tt-> height * 0.7 ); my $font = $tt-> font; $tt-> width( $tt-> get_text_width( $string)); $tt-> end_paint_info;
my $i = Prima::Image-> create( width => $tt-> width, height => $tt-> height, type => im::RGB, conversion => ict::None); $i-> begin_paint; $i-> color( cl::Black); $i-> bar(0,0,$i-> size); $i-> color( cl::White); $i-> font($font); $i-> text_out( $string, 0, 0); $i-> end_paint; $tt-> shape($i); $tt-> bring_to_front; NOSHAPE:
run Prima;
|