#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
|
|
use strict;
|
use strict;
|
|
|
package ColorButton;
|
package ColorButton;
|
|
|
use Gtk2;
|
use Gtk2;
|
use Glib::Object::Subclass
|
use Glib::Object::Subclass
|
Gtk2::Button::,
|
Gtk2::Button::,
|
signals => {
|
signals => {
|
color_changed => {},
|
color_changed => {},
|
show => \&on_show,
|
show => \&on_show,
|
},
|
},
|
properties => [
|
properties => [
|
Glib::ParamSpec->int (
|
Glib::ParamSpec->int (
|
'red',
|
'red',
|
'Red',
|
'Red',
|
'The Red component of the RGB color',
|
'The Red component of the RGB color',
|
0,
|
0,
|
0xffff,
|
0xffff,
|
0xffff,
|
0xffff,
|
[qw/readable writable/]
|
[qw/readable writable/]
|
),
|
),
|
Glib::ParamSpec->int (
|
Glib::ParamSpec->int (
|
'green',
|
'green',
|
'Green',
|
'Green',
|
'The Green component of the RGB color',
|
'The Green component of the RGB color',
|
0,
|
0,
|
0xffff,
|
0xffff,
|
0xffff,
|
0xffff,
|
[qw/readable writable/]
|
[qw/readable writable/]
|
),
|
),
|
Glib::ParamSpec->int (
|
Glib::ParamSpec->int (
|
'blue',
|
'blue',
|
'Blue',
|
'Blue',
|
'The Blue component of the RGB color',
|
'The Blue component of the RGB color',
|
0,
|
0,
|
0xffff,
|
0xffff,
|
0xffff,
|
0xffff,
|
[qw/readable writable/]
|
[qw/readable writable/]
|
),
|
),
|
Glib::ParamSpec->string (
|
Glib::ParamSpec->string (
|
'label',
|
'label',
|
'Label',
|
'Label',
|
'The lable of button',
|
'The lable of button',
|
"BBB",
|
"BBB",
|
[qw/readable writable/]
|
[qw/readable writable/]
|
),
|
),
|
|
|
]
|
]
|
;
|
;
|
|
|
sub INIT_INSTANCE {
|
sub INIT_INSTANCE {
|
my $self = shift;
|
my $self = shift;
|
$self->{red} = 0xffff;
|
$self->{red} = 0xffff;
|
$self->{green} = 0xffff;
|
$self->{green} = 0xffff;
|
$self->{blue} = 0xffff;
|
$self->{blue} = 0xffff;
|
$self->{label} = "Colored_button";
|
$self->{label} = "Colored_button";
|
|
|
|
|
my $frame = Gtk2::Frame->new;
|
my $frame = Gtk2::Frame->new;
|
$frame->set_border_width (3);
|
$frame->set_border_width (0);
|
$frame->set_shadow_type ('etched-in');
|
$frame->set_shadow_type ('etched-in');
|
$self->add ($frame);
|
$self->add ($frame);
|
$frame->show;
|
$frame->show;
|
my $event_box = Gtk2::EventBox->new;
|
my $event_box = Gtk2::EventBox->new;
|
$event_box->set_size_request (14, 14);
|
# $event_box->set_size_request (140, 140);
|
my $lable = Gtk2::Label->new($self->{label});
|
my $label = Gtk2::Label->new($self->{label});
|
$event_box->add($lable);
|
$event_box->add($label);
|
|
|
$frame->add ($event_box);
|
$frame->add ($event_box);
|
$event_box->show;
|
$event_box->show;
|
$self->{colorbox} = $event_box;
|
$self->{colorbox} = $event_box;
|
$self->{labelbox} = $lable;
|
$self->{labelbox} = $label;
|
}
|
}
|
|
|
sub on_show {
|
sub on_show {
|
my $self = shift;
|
my $self = shift;
|
$self->set_color (red => $self->{red},
|
$self->set_color (red => $self->{red},
|
green => $self->{green},
|
green => $self->{green},
|
blue => $self->{blue});
|
blue => $self->{blue});
|
$self->{labelbox}->set_label ($self->{label});
|
$self->{labelbox}->set_label ($self->{label});
|
|
|
$self->signal_chain_from_overridden;
|
$self->signal_chain_from_overridden;
|
}
|
}
|
|
|
sub set_color {
|
sub set_color {
|
my $self = shift;
|
my $self = shift;
|
my %params = @_;
|
my %params = @_;
|
my $color = Gtk2::Gdk::Color->new ($params{red},
|
my $color = Gtk2::Gdk::Color->new ($params{red},
|
$params{green},
|
$params{green},
|
$params{blue});
|
$params{blue});
|
$self->{colorbox}->get_colormap->alloc_color ($color, 0, 1);
|
# $self->{colorbox}->get_colormap->alloc_color ($color, 0, 1);
|
$self->{colorbox}->modify_bg ('normal', $color);
|
$self->{colorbox}->modify_bg ('normal', $color);
|
# $self->{colorbox}->modify_bg ('active', $color);
|
# $self->{colorbox}->modify_bg ('active', $color);
|
# $self->{colorbox}->modify_bg ('prelight', $color);
|
# $self->{colorbox}->modify_bg ('prelight', $color);
|
$self->{red} = $params{red};
|
$self->{red} = $params{red};
|
$self->{green} = $params{green};
|
$self->{green} = $params{green};
|
$self->{blue} = $params{blue};
|
$self->{blue} = $params{blue};
|
$self->signal_emit ('color-changed');
|
$self->signal_emit ('color-changed');
|
}
|
}
|
|
|
1
|
1
|
|
|