# IUP::ColorBar example
use strict;
use warnings;
use IUP ':all';
my $cnvs = IUP::Canvas->new();
sub redraw_cb {
my $self = shift;
$self->cdActivate();
$self->cdClear();
# Draws a rectangle on the canvas
$self->cdBegin(CD_FILL);
$self->cdVertex(50, 50);
$self->cdVertex(150, 50);
$self->cdVertex(100, 150);
$self->cdEnd();
# Function executed successfully
return IUP_DEFAULT;
}
sub cell_cb {
my ($self, $cell) = @_;
my ($r, $g, $b) = split / /, $self->GetAttributeId("CELL",$cell);
($r, $g, $b) = IUP->GetColor(IUP_MOUSEPOS, IUP_MOUSEPOS, $r, $g, $b);
if (defined $r && defined $g && defined $b) {
$cnvs->cdActivate();
$cnvs->cdForeground($cnvs->cdEncodeColor($r, $g, $b));
redraw_cb($cnvs);
return "$r $g $b";
}
return undef;
}
sub select_cb {
my ($self, $cell, $type) = @_;
my ($r, $g, $b) = split / /, $self->GetAttribute("CELL$cell");
my $cd_color = $cnvs->cdEncodeColor($r, $g, $b);
$cnvs->cdActivate();
if ($type == IUP_PRIMARY) {
$cnvs->cdForeground($cd_color);
}
else {
$cnvs->cdBackground($cd_color);
}
redraw_cb($cnvs);
return IUP_DEFAULT;
}
sub switch_cb {
my ($self, $primcell, $seccell) = @_;
$cnvs->cdActivate();
my $fgcolor = $cnvs->cdForeground(CD_QUERY);
$cnvs->cdForeground($cnvs->cdBackground(CD_QUERY));
$cnvs->cdBackground($fgcolor);
redraw_cb($cnvs);
return IUP_DEFAULT;
}
$cnvs->ACTION( \&redraw_cb );
# Sets size, minimum and maximum values, position and size of the thumb
# of the horizontal scrollbar of the canvas
$cnvs->SetAttribute("RASTERSIZE", "200x300");
my $cb = IUP::ColorBar->new(
RASTERSIZE=>"70x",
EXPAND=>"VERTICAL",
NUM_PARTS=>2,
SHOW_SECONDARY=>"YES",
SELECT_CB=>\&select_cb,
CELL_CB=>\&cell_cb,
SWITCH_CB=>\&switch_cb,
# SQUARED=>"NO",
PREVIEW_SIZE=>60 );
# Creates a dialog with a vbox containing the canvas and the colorbar
my $dlg = IUP::Dialog->new( child=>IUP::Hbox->new( child=>[$cnvs, $cb] ) );
# Sets the dialog's title, so that it is mapped properly
$dlg->TITLE("IUP::ColorBar");
# Shows dialog on the center of the screen
$dlg->Show();
# Initializes IUP main loop
IUP->MainLoop();