|
@@ -443,7 +443,7 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
443
|
443
|
final int start;
|
444
|
444
|
final int end;
|
445
|
445
|
|
446
|
|
- final LineInfo lineInfo = getClickPosition(getMousePosition());
|
|
446
|
+ final LineInfo lineInfo = getClickPosition(getMousePosition(), true);
|
447
|
447
|
|
448
|
448
|
if (lineInfo.getLine() != -1) {
|
449
|
449
|
clickedText = document.getLine(lineInfo.getLine()).getText();
|
|
@@ -686,7 +686,7 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
686
|
686
|
|
687
|
687
|
/** Checks for a link under the cursor and sets appropriately. */
|
688
|
688
|
private void checkForLink() {
|
689
|
|
- final LineInfo lineInfo = getClickPosition(getMousePosition());
|
|
689
|
+ final LineInfo lineInfo = getClickPosition(getMousePosition(), false);
|
690
|
690
|
|
691
|
691
|
if (lineInfo.getLine() != -1 && document.getLine(lineInfo.getLine()) !=
|
692
|
692
|
null) {
|
|
@@ -752,7 +752,7 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
752
|
752
|
bounds.getHeight() - DOUBLE_SIDE_PADDING - 1);
|
753
|
753
|
}
|
754
|
754
|
}
|
755
|
|
- final LineInfo info = getClickPosition(point);
|
|
755
|
+ final LineInfo info = getClickPosition(point, true);
|
756
|
756
|
if (info.getLine() == -1 && info.getPart() == -1 && contains(point)) {
|
757
|
757
|
info.setLine(0);
|
758
|
758
|
info.setPart(0);
|
|
@@ -776,10 +776,11 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
776
|
776
|
* Returns the line information from a mouse click inside the textpane.
|
777
|
777
|
*
|
778
|
778
|
* @param point mouse position
|
|
779
|
+ * @param selection Are we selecting text?
|
779
|
780
|
*
|
780
|
781
|
* @return line number, line part, position in whole line
|
781
|
782
|
*/
|
782
|
|
- public LineInfo getClickPosition(final Point point) {
|
|
783
|
+ public LineInfo getClickPosition(final Point point, final boolean selection) {
|
783
|
784
|
int lineNumber = -1;
|
784
|
785
|
int linePart = -1;
|
785
|
786
|
int pos = 0;
|
|
@@ -793,7 +794,7 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
793
|
794
|
}
|
794
|
795
|
|
795
|
796
|
pos = getHitPosition(lineNumber, linePart, (int) point.getX(),
|
796
|
|
- (int) point.getY());
|
|
797
|
+ (int) point.getY(), selection);
|
797
|
798
|
}
|
798
|
799
|
|
799
|
800
|
return new LineInfo(lineNumber, linePart, pos);
|
|
@@ -810,7 +811,7 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
810
|
811
|
* @return Hit position
|
811
|
812
|
*/
|
812
|
813
|
private int getHitPosition(final int lineNumber, final int linePart,
|
813
|
|
- final int x, final int y) {
|
|
814
|
+ final int x, final int y, final boolean selection) {
|
814
|
815
|
int pos = 0;
|
815
|
816
|
|
816
|
817
|
for (Map.Entry<Rectangle, TextLayout> entry : positions.entrySet()) {
|
|
@@ -821,7 +822,11 @@ class TextPaneCanvas extends JPanel implements MouseInputListener,
|
821
|
822
|
linePart) {
|
822
|
823
|
final TextHitInfo hit = entry.getValue().hitTestChar(x -
|
823
|
824
|
DOUBLE_SIDE_PADDING, y);
|
824
|
|
- pos += hit.getInsertionIndex();
|
|
825
|
+ if (selection) {
|
|
826
|
+ pos += hit.getInsertionIndex();
|
|
827
|
+ } else {
|
|
828
|
+ pos += hit.getCharIndex();
|
|
829
|
+ }
|
825
|
830
|
}
|
826
|
831
|
}
|
827
|
832
|
}
|