You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2020/12/20 05:25:37 UTC
[netbeans] branch master updated: [NETBEANS-5070] fix errors on
text selection (#2597)
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 <mi...@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 <mi...@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-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists