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