From 0fadb4b9e665c0c1677bdd535583d45873aa47f2 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sun, 26 May 2024 00:35:11 +0200 Subject: [PATCH] Draw anticircle labels They are drawn the same way as indication. --- srcs/juloo.keyboard2/Keyboard2View.java | 37 +++++++++++++++++-------- srcs/juloo.keyboard2/Theme.java | 6 ++-- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index 40def60..2eea6ea 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -322,10 +322,7 @@ public class Keyboard2View extends View if (k.keys[i] != null) drawSubLabel(canvas, k.keys[i], x, y, keyW, keyH, i, isKeyDown); } - if (k.indication != null) - { - drawIndication(canvas, k.indication, keyW / 2f + x, y, keyH); - } + drawIndication(canvas, k, x, y, keyW, keyH); x += _keyWidth * k.width; } y += row.height * _config.keyHeight; @@ -443,15 +440,33 @@ public class Keyboard2View extends View canvas.drawText(label, 0, label_len, x, y, p); } - private void drawIndication(Canvas canvas, String indication, float x, - float y, float keyH) + private void drawIndication(Canvas canvas, KeyboardData.Key k, float x, + float y, float keyW, float keyH) { - float textSize = keyH * _config.sublabelTextSize * _config.characterSize; - Paint p = _theme.indicationPaint(); + boolean special_font = false; + String indic; + float text_size; + if (k.indication != null) + { + indic = k.indication; + text_size = keyH * _config.sublabelTextSize * _config.characterSize; + } + else if (k.anticircle != null) + { + indic = k.anticircle.getString(); + special_font = k.anticircle.hasFlagsAny(KeyValue.FLAG_KEY_FONT); + text_size = scaleTextSize(k.anticircle, _config.sublabelTextSize, keyH); + } + else + { + return; + } + Paint p = _theme.indicationPaint(special_font); p.setColor(_theme.subLabelColor); - p.setTextSize(textSize); - canvas.drawText(indication, x, - (keyH - p.ascent() - p.descent()) * 4/5 + y, p); + p.setTextSize(text_size); + // Limit indication length to 3 characters + canvas.drawText(indic, 0, Math.min(indic.length(), 3), + x + keyW / 2f, (keyH - p.ascent() - p.descent()) * 4/5 + y, p); } private float scaleTextSize(KeyValue k, float rel_size, float keyH) diff --git a/srcs/juloo.keyboard2/Theme.java b/srcs/juloo.keyboard2/Theme.java index aedf33a..9eff44f 100644 --- a/srcs/juloo.keyboard2/Theme.java +++ b/srcs/juloo.keyboard2/Theme.java @@ -35,6 +35,7 @@ public class Theme private final Paint _keySubLabelPaint; private final Paint _specialKeySubLabelPaint; private final Paint _indicationPaint; + private final Paint _specialIndicationPaint; public Theme(Context context, AttributeSet attrs) { @@ -68,6 +69,7 @@ public class Theme _specialKeyLabelPaint = initLabelPaint(Paint.Align.CENTER, specialKeyFont); _specialKeySubLabelPaint = initLabelPaint(Paint.Align.LEFT, specialKeyFont); _indicationPaint = initLabelPaint(Paint.Align.CENTER, null); + _specialIndicationPaint = initLabelPaint(Paint.Align.CENTER, specialKeyFont); } public Paint labelPaint(boolean special_font) @@ -83,9 +85,9 @@ public class Theme return p; } - public Paint indicationPaint() + public Paint indicationPaint(boolean special_font) { - return _indicationPaint; + return special_font ? _specialIndicationPaint : _indicationPaint; } /** Interpolate the 'value' component toward its opposite by 'alpha'. */