Browse Source

Fix copying styled text bug.

Trying to copy 0 chars from a line is silly and breaks things.
pull/341/head
Chris Smith 9 years ago
parent
commit
f51cb12bab
1 changed files with 12 additions and 5 deletions
  1. 12
    5
      ui_swing/src/com/dmdirc/addons/ui_swing/textpane/TextPane.java

+ 12
- 5
ui_swing/src/com/dmdirc/addons/ui_swing/textpane/TextPane.java View File

@@ -59,6 +59,8 @@ import net.miginfocom.swing.MigLayout;
59 59
 
60 60
 import org.jdesktop.jxlayer.JXLayer;
61 61
 
62
+import static com.google.common.base.Preconditions.checkArgument;
63
+
62 64
 /**
63 65
  * Styled, scrollable text pane.
64 66
  */
@@ -288,14 +290,16 @@ public final class TextPane extends JComponent implements MouseWheelListener,
288 290
                     }
289 291
                 } else if (i == selectedRange.getStartLine()) {
290 292
                     //loop from start of range to the end
291
-                    if (selectedRange.getStartPos() != -1) {
292
-                        selectedText.append(getText(line, selectedRange.getStartPos(),
293
-                                Styliser.stipControlCodes(line).length(), styled));
293
+                    final int length = Styliser.stipControlCodes(line).length();
294
+                    if (selectedRange.getStartPos() != -1 && selectedRange.getStartPos() < length) {
295
+                        // Ensure that we're actually selecting some text on this line
296
+                        selectedText.append(getText(line, selectedRange.getStartPos(), length,
297
+                                styled));
294 298
                     }
295 299
                 } else if (i == selectedRange.getEndLine()) {
296 300
                     //loop from start to end of range
297
-                    if (selectedRange.getEndPos() != -1) {
298
-                        selectedText.append(getText(line, 0, selectedRange .getEndPos(), styled));
301
+                    if (selectedRange.getEndPos() > 0) {
302
+                        selectedText.append(getText(line, 0, selectedRange.getEndPos(), styled));
299 303
                     }
300 304
                 } else {
301 305
                     //loop the whole line
@@ -319,6 +323,9 @@ public final class TextPane extends JComponent implements MouseWheelListener,
319 323
      */
320 324
     private String getText(final String text, final int start, final int end,
321 325
             final boolean styled) {
326
+        checkArgument(start < end, "'start' (" + start + ") must be less than 'end' (" + end + ')');
327
+        checkArgument(start >= 0, "'start' (" + start + ") must be non-negative");
328
+
322 329
         if (styled) {
323 330
             return Styliser.getStyledText(text, start, end);
324 331
         } else {

Loading…
Cancel
Save