Bladeren bron

Merge pull request #341 from csmith/master

Fix copying styled text bug.
pull/342/head
Greg Holmes 9 jaren geleden
bovenliggende
commit
edcd15b8b2
1 gewijzigde bestanden met toevoegingen van 14 en 6 verwijderingen
  1. 14
    6
      ui_swing/src/com/dmdirc/addons/ui_swing/textpane/TextPane.java

+ 14
- 6
ui_swing/src/com/dmdirc/addons/ui_swing/textpane/TextPane.java Bestand weergeven

@@ -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,18 +290,21 @@ 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
302
-                    selectedText.append(getText(line, 0, line.length(), styled));
306
+                    final int length = Styliser.stipControlCodes(line).length();
307
+                    selectedText.append(getText(line, 0, length, styled));
303 308
                 }
304 309
             }
305 310
         }
@@ -319,6 +324,9 @@ public final class TextPane extends JComponent implements MouseWheelListener,
319 324
      */
320 325
     private String getText(final String text, final int start, final int end,
321 326
             final boolean styled) {
327
+        checkArgument(start < end, "'start' (" + start + ") must be less than 'end' (" + end + ')');
328
+        checkArgument(start >= 0, "'start' (" + start + ") must be non-negative");
329
+
322 330
         if (styled) {
323 331
             return Styliser.getStyledText(text, start, end);
324 332
         } else {

Laden…
Annuleren
Opslaan