This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 95a135b  [NETBEANS-5070] fix errors on text selection (#2597)
95a135b is described below

commit 95a135b0aeae5b390112a69fe1a38130bba6c498
Author: Michal Hlavac <m...@hlavki.eu>
AuthorDate: Sun Dec 20 06:25:14 2020 +0100

    [NETBEANS-5070] fix errors on text selection (#2597)
    
    * [NETBEANS-5070] fix errors on text selection
    
    * fixed paint selection
    
    Co-authored-by: Michal Hlavac <michal.hla...@xit.camp>
---
 .../src/org/netbeans/lib/terminalemulator/Line.java |  8 ++++----
 .../lib/terminalemulator/MyFontMetrics.java         | 21 +++++++++++----------
 .../src/org/netbeans/lib/terminalemulator/Sel.java  |  4 ++--
 3 files changed, 17 insertions(+), 16 deletions(-)

diff --git 
a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Line.java 
b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Line.java
index 5ca5052..2e10f49 100644
--- a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Line.java
+++ b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Line.java
@@ -156,13 +156,13 @@ final class Line {
     }
 
     public int stringWidth(MyFontMetrics metrics, int at) {
+        if (at > buf.length - 1) return 0;
         return metrics.getFm().charsWidth(buf, 0, at);
     }
 
-    public byte width(MyFontMetrics metrics, int at) {
-        if (at >= capacity)
-            return 1;
-        return (byte) metrics.wcwidth(charAt(at));
+    public int charWidth(MyFontMetrics metrics, int at) {
+        if (at > buf.length - 1) return 0;
+        return metrics.getFm().charsWidth(buf, at, 1);
     }
 
     /*
diff --git 
a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/MyFontMetrics.java
 
b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/MyFontMetrics.java
index 67a6ec2..e4c34b2 100644
--- 
a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/MyFontMetrics.java
+++ 
b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/MyFontMetrics.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-/*
+ /*
  * "MyFontMetrics"
  * MyFontMetrics.java 1.5 01/07/10
  */
@@ -123,10 +123,11 @@ class MyFontMetrics {
 
     public MyFontMetrics(Component component) {
         this.cmp = component;
-        width = getFm().charWidth('a');
-        height = getFm().getHeight();
-        ascent = getFm().getAscent();
-        leading = getFm().getLeading();
+        this.fm = this.cmp.getFontMetrics(cmp.getFont());
+        width = fm.charWidth('a');
+        height = fm.getHeight();
+        ascent = fm.getAscent();
+        leading = fm.getLeading();
 
         // HACK
         // From all I can tell both xterm and DtTerm ignore the leading.
@@ -138,25 +139,25 @@ class MyFontMetrics {
         // the following makes things match up, but if we ever undo this
         // we'll have to go and adjust how everything is drawn (cursor,
         // reverse-video attribute, underscore, bg stripe, selection etc.
-
         height -= leading;
         leading = 0;
-
-        cwidth_cache = CacheFactory.cacheForFontMetrics(getFm());
+        cwidth_cache = CacheFactory.cacheForFontMetrics(fm);
     }
 
     public FontMetrics getFm() {
-        return this.cmp.getFontMetrics(cmp.getFont());
+//        if (fm == null) fm = this.cmp.getFontMetrics(cmp.getFont()); // this 
does not work very well
+        return this.cmp.getFontMetrics(cmp.getFont()); // this seems not very 
optimal
     }
 
     @Override
     protected void finalize() {
-        CacheFactory.disposeBy(getFm());
+        CacheFactory.disposeBy(fm);
     }
     public int width;
     public int height;
     public int ascent;
     public int leading;
+    public FontMetrics fm;
     public Component cmp;
     private WidthCache cwidth_cache;
 
diff --git 
a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Sel.java 
b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Sel.java
index 0dd498c..30242f1 100644
--- a/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Sel.java
+++ b/ide/lib.terminalemulator/src/org/netbeans/lib/terminalemulator/Sel.java
@@ -403,8 +403,8 @@ class Sel implements ClipboardOwner {
 
        Point pbegin = term.toPixel(begin);
        Point pend = term.toPixel(end);
-       pend.y += term.metrics().height;
-       pend.x += l.stringWidth(term.metrics(), ecol);  // xterm actually 
doesn't do this
+       pend.y += term.metrics().fm.getHeight();
+       pend.x += l.charWidth(term.metrics(), ecol);    // xterm actually 
doesn't do this
 
        Dimension dim = new Dimension(pend.x - pbegin.x,
                                      pend.y - pbegin.y);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to