diff --git a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java index eb7612d23c..542611784d 100644 --- a/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java +++ b/app/src/main/java/com/termux/app/terminal/TermuxTerminalSessionActivityClient.java @@ -520,7 +520,7 @@ public void checkForFontAndColors() { if (boldItalicFontFile.exists() && boldItalicFontFile.length() > 0) { newBoldItalicTypeface = Typeface.createFromFile(boldItalicFontFile); } else { - newBoldItalicTypeface = newItalicTypeface != newTypeface ? newItalicTypeface : newBoldTypeface; + newBoldItalicTypeface = newBoldTypeface != newTypeface ? newBoldTypeface : newItalicTypeface; } mActivity.getTerminalView().setTypefaces(newTypeface, newItalicTypeface, newBoldTypeface, newBoldItalicTypeface); diff --git a/terminal-view/src/main/java/com/termux/view/TerminalRenderer.java b/terminal-view/src/main/java/com/termux/view/TerminalRenderer.java index 8978d8e7d8..e0dc78d756 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalRenderer.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalRenderer.java @@ -4,6 +4,7 @@ import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.Typeface; +import android.util.Log; import com.termux.terminal.TerminalBuffer; import com.termux.terminal.TerminalEmulator; @@ -17,6 +18,9 @@ * Saves font metrics, so needs to be recreated each time the typeface or font size changes. */ public final class TerminalRenderer { + boolean uniqueItalicTypeface; + boolean uniqueBoldTypeface; + boolean uniqueBoldItalicTypeface; final int mTextSize; final Typeface mTypeface; @@ -42,6 +46,11 @@ public TerminalRenderer(int textSize, Typeface typeface, Typeface italicTypeface mBoldTypeface = boldTypeface; mBoldItalicTypeface = boldItalicTypeface; + uniqueItalicTypeface = !mItalicTypeface.equals(mTypeface); + uniqueBoldTypeface = !mBoldTypeface.equals(mTypeface); + uniqueBoldItalicTypeface = !mBoldItalicTypeface.equals(mTypeface) && !mBoldItalicTypeface.equals(mItalicTypeface) && !mBoldItalicTypeface.equals(mBoldTypeface); + + mTextPaint.setTypeface(typeface); mTextPaint.setAntiAlias(true); mTextPaint.setTextSize(textSize); @@ -177,10 +186,28 @@ private void drawTextRun(Canvas canvas, char[] text, int[] palette, float y, int if (italic && bold) { mTextPaint.setTypeface(mBoldItalicTypeface); + if (mBoldItalicTypeface.equals(mBoldTypeface) && uniqueBoldTypeface) { + mTextPaint.setFakeBoldText(false); + mTextPaint.setTextSkewX(-0.35f); + } else if (mBoldItalicTypeface.equals(mItalicTypeface) && uniqueItalicTypeface){ + mTextPaint.setFakeBoldText(true); + mTextPaint.setTextSkewX(uniqueItalicTypeface ? 0.f : -0.35f); + } else { + mTextPaint.setFakeBoldText(false); + mTextPaint.setTextSkewX(0.f); + } } else if (italic) { mTextPaint.setTypeface(mItalicTypeface); + mTextPaint.setFakeBoldText(false); + mTextPaint.setTextSkewX(uniqueItalicTypeface ? 0.f : -0.35f); } else if (bold) { mTextPaint.setTypeface(mBoldTypeface); + mTextPaint.setFakeBoldText(!uniqueBoldTypeface); + mTextPaint.setTextSkewX(0.f); + } else { + mTextPaint.setTypeface(mTypeface); + mTextPaint.setFakeBoldText(false); + mTextPaint.setTextSkewX(0.f); } final float fontWidth = mTextPaint.measureText("X"); @@ -245,9 +272,7 @@ private void drawTextRun(Canvas canvas, char[] text, int[] palette, float y, int foreColor = 0xFF000000 + (red << 16) + (green << 8) + blue; } - mTextPaint.setFakeBoldText(bold && !mTextPaint.getTypeface().isBold()); mTextPaint.setUnderlineText(underline); - mTextPaint.setTextSkewX(italic && !mTextPaint.getTypeface().isItalic() ? -0.35f : 0.f); mTextPaint.setStrikeThruText(strikeThrough); mTextPaint.setColor(foreColor);