App-Asciio
view release on metacpan or search on metacpan
lib/App/Asciio.pm view on Meta::CPAN
{
#~ print "button_press_event\n" ;
my ($self, $event, $wrapper_event) = @_ ;
$self->{DRAGGING} = '' ;
delete $self->{RESIZE_CONNECTOR_NAME} ;
$self->create_undo_snapshot() ;
$self->{MODIFIED_INDEX} = $self->{MODIFIED} ;
my $modifiers = $event->{MODIFIERS} ;
my $button = $event->{BUTTON} ;
if($self->exists_action("${modifiers}-button_press-$button"))
{
$self->run_actions(["${modifiers}-button_press-$button", $event]) ;
return 1 ;
}
my($x, $y) = @{$event->{COORDINATES}} ;
if($event->{TYPE} eq '2button-press')
{
my @element_over = grep { $self->is_over_element($_, $x, $y) } reverse @{$self->{ELEMENTS}} ;
if(@element_over)
{
my $selected_element = $element_over[0] ;
$self->edit_element($selected_element) ;
$self->update_display();
}
return 1 ;
}
if($event->{BUTTON} == 1)
{
my $modifiers = $event->{MODIFIERS} ;
my ($first_element) = first_value {$self->is_over_element($_, $x, $y)} reverse @{$self->{ELEMENTS}} ;
if ($modifiers eq 'C00')
{
if(defined $first_element)
{
$self->run_actions_by_name('Copy to clipboard', ['Insert from clipboard', 0, 0]) ;
}
}
else
{
if(defined $first_element)
{
if ($modifiers eq '00S')
{
$self->select_elements_flip($first_element) ;
}
else
{
unless($self->is_element_selected($first_element))
{
# make the element under cursor the only selected element
$self->select_elements(0, @{$self->{ELEMENTS}}) ;
$self->select_elements(1, $first_element) ;
}
}
}
else
{
# deselect all
$self->deselect_all_elements() if ($modifiers eq '000') ;
}
}
$self->{SELECTION_RECTANGLE} = {START_X => $x , START_Y => $y} ;
$self->update_display();
}
if($event->{BUTTON} == 2)
{
$self->{SELECTION_RECTANGLE} = {START_X => $x , START_Y => $y} ;
$self->update_display();
}
if($event->{BUTTON} == 3)
{
$self->display_popup_menu($wrapper_event) ; # display_popup_menu is handled by derived Asciio
}
return 1;
}
#-----------------------------------------------------------------------------
sub motion_notify_event
{
my ($self, $event) = @_ ;
my($x, $y) = @{$event->{COORDINATES}} ;
my $modifiers = $event->{MODIFIERS} ;
my $button = $event->{BUTTON} ;
if($self->exists_action("${modifiers}motion_notify"))
{
$self->run_actions(["${modifiers}-motion_notify", $event]) ;
return 1 ;
}
if($self->{PREVIOUS_X} != $x || $self->{PREVIOUS_Y} != $y)
{
($self->{MOUSE_X}, $self->{MOUSE_Y}) = ($x, $y) ;
$self->update_display() ;
}
if ($event->{STATE} >= "button1-mask")
{
if($self->{DRAGGING} ne '')
{
if ($self->{DRAGGING} eq 'move') { $self->move_elements_event($x, $y) ; }
elsif ($self->{DRAGGING}eq 'resize') { $self->resize_element_event($x, $y) ; }
( run in 2.847 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )