X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbackend%2FECMA48Terminal.java;h=3933d22f5092140b579dc39a44b9de558eecc328;hb=63543c455868d3c34b6bdfaaa2837d4a2b81531e;hp=b45e8d418235c84f45ed06dee861e38a762cab0b;hpb=854cad3bb9191bd48f71802f039fa482fc3960a8;p=nikiroo-utils.git diff --git a/src/jexer/backend/ECMA48Terminal.java b/src/jexer/backend/ECMA48Terminal.java index b45e8d4..3933d22 100644 --- a/src/jexer/backend/ECMA48Terminal.java +++ b/src/jexer/backend/ECMA48Terminal.java @@ -51,6 +51,7 @@ import jexer.TImage; import jexer.bits.Cell; import jexer.bits.CellAttributes; import jexer.bits.Color; +import jexer.bits.StringUtils; import jexer.event.TCommandEvent; import jexer.event.TInputEvent; import jexer.event.TKeypressEvent; @@ -242,11 +243,6 @@ public class ECMA48Terminal extends LogicalScreen */ private ImageCache jexerCache = null; - /** - * Base64 encoder used by iTerm2 and Jexer images. - */ - private java.util.Base64.Encoder base64 = null; - /** * If true, then we changed System.in and need to change it back. */ @@ -2242,10 +2238,13 @@ public class ECMA48Terminal extends LogicalScreen boolean eventMouse3 = false; boolean eventMouseWheelUp = false; boolean eventMouseWheelDown = false; + boolean eventAlt = false; + boolean eventCtrl = false; + boolean eventShift = false; // System.err.printf("buttons: %04x\r\n", buttons); - switch (buttons) { + switch (buttons & 0xE3) { case 0: eventMouse1 = true; mouse1 = true; @@ -2327,9 +2326,21 @@ public class ECMA48Terminal extends LogicalScreen eventType = TMouseEvent.Type.MOUSE_MOTION; break; } + + if ((buttons & 0x04) != 0) { + eventShift = true; + } + if ((buttons & 0x08) != 0) { + eventAlt = true; + } + if ((buttons & 0x10) != 0) { + eventCtrl = true; + } + return new TMouseEvent(eventType, x, y, x, y, eventMouse1, eventMouse2, eventMouse3, - eventMouseWheelUp, eventMouseWheelDown); + eventMouseWheelUp, eventMouseWheelDown, + eventAlt, eventCtrl, eventShift); } /** @@ -2364,12 +2375,15 @@ public class ECMA48Terminal extends LogicalScreen boolean eventMouse3 = false; boolean eventMouseWheelUp = false; boolean eventMouseWheelDown = false; + boolean eventAlt = false; + boolean eventCtrl = false; + boolean eventShift = false; if (release) { eventType = TMouseEvent.Type.MOUSE_UP; } - switch (buttons) { + switch (buttons & 0xE3) { case 0: eventMouse1 = true; break; @@ -2426,9 +2440,21 @@ public class ECMA48Terminal extends LogicalScreen // Unknown, bail out return null; } + + if ((buttons & 0x04) != 0) { + eventShift = true; + } + if ((buttons & 0x08) != 0) { + eventAlt = true; + } + if ((buttons & 0x10) != 0) { + eventCtrl = true; + } + return new TMouseEvent(eventType, x, y, x, y, eventMouse1, eventMouse2, eventMouse3, - eventMouseWheelUp, eventMouseWheelDown); + eventMouseWheelUp, eventMouseWheelDown, + eventAlt, eventCtrl, eventShift); } /** @@ -2873,6 +2899,7 @@ public class ECMA48Terminal extends LogicalScreen // them. jexerImageOption = JexerImageOption.DISABLED; } + resetParser(); return; case 't': // windowOps @@ -3453,7 +3480,6 @@ public class ECMA48Terminal extends LogicalScreen if (iterm2Cache == null) { iterm2Cache = new ImageCache(height * 10); - base64 = java.util.Base64.getEncoder(); } // Save and get rows to/from the cache that do NOT have inverted @@ -3646,7 +3672,7 @@ public class ECMA48Terminal extends LogicalScreen getTextHeight()))); */ sb.append("inline=1:"); - sb.append(base64.encodeToString(pngOutputStream.toByteArray())); + sb.append(StringUtils.toBase64(pngOutputStream.toByteArray())); sb.append("\007"); if (saveInCache) { @@ -3703,7 +3729,6 @@ public class ECMA48Terminal extends LogicalScreen if (jexerCache == null) { jexerCache = new ImageCache(height * 10); - base64 = java.util.Base64.getEncoder(); } // Save and get rows to/from the cache that do NOT have inverted @@ -3841,7 +3866,7 @@ public class ECMA48Terminal extends LogicalScreen } sb.append("\033]444;1;0;"); - sb.append(base64.encodeToString(pngOutputStream.toByteArray())); + sb.append(StringUtils.toBase64(pngOutputStream.toByteArray())); sb.append("\007"); } else if (jexerImageOption == JexerImageOption.JPG) { @@ -3873,7 +3898,7 @@ public class ECMA48Terminal extends LogicalScreen } sb.append("\033]444;2;0;"); - sb.append(base64.encodeToString(jpgOutputStream.toByteArray())); + sb.append(StringUtils.toBase64(jpgOutputStream.toByteArray())); sb.append("\007"); } else if (jexerImageOption == JexerImageOption.RGB) { @@ -3892,7 +3917,7 @@ public class ECMA48Terminal extends LogicalScreen bytes[(py * stride * 3) + (px * 3) + 2] = (byte) ( rgb & 0xFF); } } - sb.append(base64.encodeToString(bytes)); + sb.append(StringUtils.toBase64(bytes)); sb.append("\007"); }