Gtk2-Ex-Geo
view release on metacpan or search on metacpan
lib/Gtk2/Ex/Geo/Dialogs/Colors.pm view on Meta::CPAN
sub color_field_changed {
my($self, $gui) = @{$_[1]};
my $field = get_value_from_combo($self->{colors_dialog}, 'color_field_combobox');
return unless $field; # model is cleared
$self->color_field($field);
my $palette = $self->palette_type;
if (($palette eq 'Color bins' or $palette eq 'Color table') and
$self->{current_coloring_type} ne current_coloring_type($self)) {
create_colors_treeview($self);
}
}
## @ignore
sub color_scale_changed {
my($self, $gui) = @{$_[1]};
my $d = $self->{colors_dialog};
my $min = get_number_from_entry($d->get_widget('scale_min_entry'));
my $max = get_number_from_entry($d->get_widget('scale_max_entry'));
$self->color_scale($min, $max);
}
## @ignore
sub hue_changed {
my(undef, $self) = @_;
my $d = $self->{colors_dialog};
my $min = get_number_from_entry($d->get_widget('min_hue_label'));
my $max = get_number_from_entry($d->get_widget('max_hue_label'));
my $dir = $d->get_widget('hue_range_combobox')->get_active == 0 ? 1 : -1; # up is 1, down is -1
$self->hue_range($min, $max, $dir);
create_colors_treeview($self);
}
## @ignore
sub grayscale_color_changed {
my(undef, $self) = @_;
my $d = $self->{colors_dialog};
my @color = split(/ /, $self->{colors_dialog}->get_widget('grayscale_color_label')->get_text);
if (@color > 2) {
$color[1] /= 100;
$color[2] /= 100;
@color = hsv2rgb(@color);
$self->grayscale_color(@color, 255);
}
$self->invert_scale($d->get_widget('grayscale_invert_checkbutton')->get_active());
$self->grayscale_subtype(get_value_from_combo($d, 'grayscale_adjust_combobox'));
create_colors_treeview($self);
}
# button callbacks
##@ignore
sub apply_colors {
my($self, $gui, $close) = @{$_[1]};
my @color = split(/ /, $self->{colors_dialog}->get_widget('border_color_label')->get_text);
my $has_border = $self->{colors_dialog}->get_widget('border_color_checkbutton')->get_active();
@color = () unless $has_border;
$self->border_color(@color);
$self->hide_dialog('colors_dialog') if $close;
$gui->{overlay}->render;
}
##@ignore
sub cancel_colors {
my($self, $gui);
for (@_) {
next unless ref eq 'ARRAY';
($self, $gui) = @{$_};
}
$self->palette_type($self->{backup}->{palette_type});
$self->single_color(@{$self->{backup}->{single_color}});
$self->color_field($self->{backup}->{field}) if $self->{backup}->{field};
$self->color_table($self->{backup}->{table});
$self->color_bins($self->{backup}->{bins});
$self->color_scale(@{$self->{backup}->{scale}});
$self->hue_range(@{$self->{backup}->{hue_range}});
$self->grayscale_subtype($self->{backup}->{grayscale_subtype});
$self->invert_scale($self->{backup}->{invert_scale});
$self->grayscale_color(@{$self->{backup}->{grayscale_color}});
$self->border_color(@{$self->{backup}->{border_color}});
$self->hide_dialog('colors_dialog');
$gui->{overlay}->render;
1;
}
##@ignore
sub copy_colors {
my($self, $gui) = @{$_[1]};
my $table = copy_colors_dialog($self, $gui);
if ($table) {
my $palette_type = $self->palette_type;
if ($palette_type eq 'Color table') {
$self->color_table($table);
} elsif ($palette_type eq 'Color bins') {
$self->color_bins($table);
}
fill_colors_treeview($self);
}
}
##@ignore
sub open_colors_file {
my($self, $gui) = @{$_[1]};
my $palette_type = $self->palette_type;
my $filename = file_chooser("Select a $palette_type file", 'open');
if ($filename) {
if ($palette_type eq 'Color table') {
eval {
$self->color_table($filename);
}
} elsif ($palette_type eq 'Color bins') {
eval {
$self->color_bins($filename);
}
}
if ($@) {
$gui->message("$@");
} else {
fill_colors_treeview($self);
}
}
}
##@ignore
sub save_colors_file {
my($self, $gui) = @{$_[1]};
my $palette_type = $self->palette_type;
my $filename = file_chooser("Save $palette_type file as", 'save');
if ($filename) {
if ($palette_type eq 'Color table') {
eval {
$self->save_color_table($filename);
}
} elsif ($palette_type eq 'Color bins') {
eval {
$self->save_color_bins($filename);
}
}
if ($@) {
$gui->message("$@");
}
}
lib/Gtk2/Ex/Geo/Dialogs/Colors.pm view on Meta::CPAN
$v = 1 - $v if $invert_scale;
} elsif ($grayscale_subtype eq 'Hue') {
$h = int(($x - $min)/($max - $min)*360 + 0.5);
$h = 360 - $h if $invert_scale;
} elsif ($grayscale_subtype eq 'Saturation') {
$s = ($x - $min)/($max - $min);
$s = 1 - $s if $invert_scale;
} elsif ($grayscale_subtype eq 'Value') {
$v = ($x - $min)/($max - $min);
$v = 1 - $v if $invert_scale;
} elsif ($grayscale_subtype eq 'Opacity') {
$alpha = int(($x - $min)/($max - $min)*255 + 0.5);
$alpha = 255 - $alpha if $invert_scale;
}
} else {
$h = int($hue_min + ($x - $min)/($max-$min) * ($hue_max-$hue_min) + 0.5);
$h -= 360 if $h > 360;
$h += 360 if $h < 0;
$s = 1;
$v = 1;
}
my $pb = Gtk2::Gdk::Pixbuf->new('rgb', 1, 8, $COLOR_CELL_SIZE, $COLOR_CELL_SIZE);
my @color = hsv2rgb($h, $s, $v);
$pb->fill($alpha << 32 | $color[0] << 24 | $color[1] << 16 | $color[2] << 8);
my $j = 0;
push @set, ($j++, $pb);
push @set, ($j++, $x);
$model->set(@set);
$x -= $delta;
$x = $min if $x < $min;
}
}
##@ignore
sub copy_colors_dialog {
my($self, $gui) = @_;
my $palette_type = $self->palette_type;
my $dialog = $gui->get_dialog('colors_from_dialog');
$dialog->get_widget('colors_from_dialog')->set_title("Get $palette_type from");
my $treeview = $dialog->get_widget('colors_from_treeview');
my $model = Gtk2::TreeStore->new(qw/Glib::String/);
$treeview->set_model($model);
for my $col ($treeview->get_columns) {
$treeview->remove_column($col);
}
my $i = 0;
for my $column ('Layer') {
my $cell = Gtk2::CellRendererText->new;
my $col = Gtk2::TreeViewColumn->new_with_attributes($column, $cell, text => $i++);
$treeview->append_column($col);
}
$model->clear;
my @names;
for my $layer (@{$gui->{overlay}->{layers}}) {
next if $layer->name() eq $self->name();
push @names, $layer->name();
$model->set ($model->append(undef), 0, $layer->name());
}
#$dialog->move(@{$self->{colors_from_position}}) if $self->{colors_from_position};
$dialog->get_widget('colors_from_dialog')->show_all;
$dialog->get_widget('colors_from_dialog')->present;
my $response = $dialog->get_widget('colors_from_dialog')->run;
my $table;
if ($response eq 'ok') {
my @sel = $treeview->get_selection->get_selected_rows;
if (@sel) {
my $i = $sel[0]->to_string if @sel;
my $from_layer = $gui->{overlay}->get_layer_by_name($names[$i]);
if ($palette_type eq 'Color table') {
$table = $from_layer->color_table();
} elsif ($palette_type eq 'Color bins') {
$table = $from_layer->color_bins();
}
}
}
$dialog->get_widget('colors_from_dialog')->destroy;
return $table;
}
1;
( run in 2.385 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )