Skip to content

Commit d4ae505

Browse files
committed
ADDED: orthogonal quick-link
1 parent 6eb0419 commit d4ae505

File tree

4 files changed

+48
-9
lines changed

4 files changed

+48
-9
lines changed

documentation/mdbook_asciio/src/editing/mouse.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@
1111

1212
![quick link](quick_link.gif)
1313

14+
## Orthogonal quick link
15+
16+
***Binding:*** «shift-alt-left-mouse-click»
17+
18+
Works like a quick link but, when necessary, will create a box that is either aligned
19+
horizontally or vertically with the first element of the selection (whichever is closest)
20+
21+
![orthogonal_quick link](orthogonal_quick_link.gif)
22+
1423
## Quick copy
1524

1625
***Binding:*** «alt-shift-left-mouse-click»
110 KB
Loading

lib/App/Asciio/Actions/Mouse.pm

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ my ($first_element) = first_value {$self->is_over_element($_, $x, $y)} reverse @
107107

108108
$self->select_elements(1, $first_element) if defined $first_element ;
109109

110-
$self->run_actions_by_name('Copy to clipboard', ['Insert from clipboard', 0, 0]) ;
110+
$self->run_actions_by_name('Copy to clipboard', ['Insert from clipboard', $self->{COPY_OFFSET_X} // 1, $self->{COPY_OFFSET_Y} // 1]) ;
111111
}
112112

113113

@@ -134,22 +134,52 @@ $self->update_display();
134134

135135
sub quick_link
136136
{
137-
my ($self) = @_ ;
138-
my ($x, $y) = @{$self}{'MOUSE_X', 'MOUSE_Y'} ;
137+
my ($self, $orthogonal) = @_ ;
138+
my ($mx, $my) = @{$self}{'MOUSE_X', 'MOUSE_Y'} ;
139139

140140
$self->create_undo_snapshot() ;
141141

142-
my ($destination_element) = first_value {$self->is_over_element($_, $x, $y)} reverse @{$self->{ELEMENTS}} ;
142+
my ($destination_element) = first_value {$self->is_over_element($_, $mx, $my)} reverse @{$self->{ELEMENTS}} ;
143143

144144
if($destination_element)
145145
{
146-
connect_to_destination_element($self, $destination_element, $x, $y) ;
146+
connect_to_destination_element($self, $destination_element, $mx, $my) ;
147147
}
148148
else
149149
{
150-
my $new_box = $self->add_new_element_named('Asciio/box', $x, $y) ;
150+
my @selected_elements = $self->get_selected_elements(1) ;
151+
152+
my ($ex, $ey) = @selected_elements
153+
? get_orthogonal_position(@{$selected_elements[0]}{qw/X Y/}, $mx, $my)
154+
: ($mx, $my) ;
155+
156+
my $new_box = $self->add_new_element_named('Asciio/box', $ex, $ey) ;
151157

152-
connect_to_destination_element($self, $new_box, $x, $y) ;
158+
connect_to_destination_element($self, $new_box, $ex, $ey) ;
159+
}
160+
}
161+
162+
sub get_orthogonal_position
163+
{
164+
my ($px, $py, $ax, $ay) = @_;
165+
166+
my $o1_x = $px;
167+
my $o1_y = $ay;
168+
my $dx1 = $ax - $o1_x;
169+
my $dist_sq1 = $dx1 * $dx1;
170+
171+
my $o2_x = $ax;
172+
my $o2_y = $py;
173+
my $dy2 = $ay - $o2_y;
174+
my $dist_sq2 = $dy2 * $dy2;
175+
176+
if ($dist_sq1 <= $dist_sq2)
177+
{
178+
return ($o1_x, $o1_y, 'Vertical') ;
179+
}
180+
else
181+
{
182+
return ($o2_x, $o2_y, 'Horizontal') ;
153183
}
154184
}
155185

setup/actions/default_bindings.pl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@
8585

8686
'Mouse selection flip' => ['00S-button-press-1', \&App::Asciio::Actions::Mouse::mouse_element_selection_flip ],
8787

88+
'Mouse quick link orthogonal' => [['0AS-button-press-1'], \&App::Asciio::Actions::Mouse::quick_link, 1 ],
8889
'Mouse quick link' => [['0A0-button-press-1', '000-period'], \&App::Asciio::Actions::Mouse::quick_link ],
89-
'Mouse duplicate elements' => [['0AS-button-press-1', '000-comma'], \&App::Asciio::Actions::Mouse::mouse_duplicate_element ],
90+
'Mouse duplicate elements' => [[ '000-comma'], \&App::Asciio::Actions::Mouse::mouse_duplicate_element ],
9091
'Mouse quick box' => [['C0S-button-press-1'], \&App::Asciio::Actions::Elements::add_element, ['Asciio/box', 0] ],
9192

9293
'Arrow to mouse' => ['CA0-motion_notify', \&App::Asciio::Actions::Arrow::interactive_to_mouse ],
@@ -667,7 +668,6 @@
667668
'Edit selected element inline' => 1,
668669

669670
'Mouse quick link' => 1,
670-
'Mouse duplicate elements' => 1,
671671
'Mouse quick box' => 1,
672672

673673
'Arrow to mouse' => 1,

0 commit comments

Comments
 (0)