Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.1:Rings:1-MinimalX
konsole
Fix-bold-font.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Fix-bold-font.patch of Package konsole
From 41693fe9ee263f8f2281852a740ee52d55f003ef Mon Sep 17 00:00:00 2001 From: Mariusz Glebocki <mglb@arccos-1.net> Date: Sat, 23 Feb 2019 22:30:18 -0500 Subject: Fix "Draw intense colors in bold font" feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Make the feature work and improve it slightly - the weight used as bold is dependent on selected font's weight. "Regular" will use "Bold", but e.g. "Thin" will use "Light". `styleName` is almost always redundant - all font properties like weight, stretch, etc, are stored separately. Source Code Pro 12pt with font weight set to: Extra Light, Light, Regular, Medium, Semibold, Bold: {F6631951} Test Plan: In every case: turn on "Draw intense colors in bold font" in Edit Profile → Appearance. **The feature:** * Use some font which has "Bold" style available and set it to "Regular" style. * Run: `printf '\033[1mBold|\033[0m|Normal\n'` * "Bold|" text should use bold font. **Different weights:** * Use some font which has multiple weights available (e.g. Thin, Bold, Heavy, ...), e.g. Source Code Pro. * Select lightest style. * Run: `printf '\033[1mBold|\033[0m|Normal\n'` * Select "regular" font style. * Bold text for "regular" style should be bolder than the text for lightest style should be. Reviewers: #konsole, #vdg, hindenburg Reviewed By: #konsole, hindenburg Subscribers: hindenburg, ngraham, konsole-devel Tags: #konsole Differential Revision: https://phabricator.kde.org/D19266 --- src/TerminalDisplay.cpp | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp index 140ecfb..31bbacc 100644 --- a/src/TerminalDisplay.cpp +++ b/src/TerminalDisplay.cpp @@ -297,6 +297,11 @@ void TerminalDisplay::setVTFont(const QFont& f) // Disabling kerning saves some computation when rendering text. newFont.setKerning(false); + // "Draw intense colors in bold font" feature needs to use different font weights. StyleName + // property, when set, doesn't allow weight changes. Since all properties (weight, stretch, + // italic, etc) are stored in QFont independently, in almost all cases styleName is not needed. + newFont.setStyleName(QString()); + QFontInfo fontInfo(newFont); // QFontInfo::fixedPitch() appears to not match QFont::fixedPitch() @@ -740,25 +745,32 @@ void TerminalDisplay::drawCharacters(QPainter& painter, return; } - // setup bold and underline - bool useBold = (((style->rendition & RE_BOLD) != 0) && _boldIntense) || font().bold(); + const int normalWeight = font().weight(); + // +26 makes "bold" from "normal", "normal" from "light", etc. It is 26 instead of not 25 to prefer + // bolder weight when 25 falls in the middle between two weights. See QFont::Weight + const int boldWeight = normalWeight + 26; + + const auto isBold = [boldWeight](const QFont &font) { return font.weight() >= boldWeight; }; + + const bool useBold = (((style->rendition & RE_BOLD) != 0) && _boldIntense); const bool useUnderline = ((style->rendition & RE_UNDERLINE) != 0) || font().underline(); const bool useItalic = ((style->rendition & RE_ITALIC) != 0) || font().italic(); const bool useStrikeOut = ((style->rendition & RE_STRIKEOUT) != 0) || font().strikeOut(); const bool useOverline = ((style->rendition & RE_OVERLINE) != 0) || font().overline(); - QFont font = painter.font(); - if (font.bold() != useBold - || font.underline() != useUnderline - || font.italic() != useItalic - || font.strikeOut() != useStrikeOut - || font.overline() != useOverline) { - font.setBold(useBold); - font.setUnderline(useUnderline); - font.setItalic(useItalic); - font.setStrikeOut(useStrikeOut); - font.setOverline(useOverline); - painter.setFont(font); + QFont currentFont = painter.font(); + + if (isBold(currentFont) != useBold + || currentFont.underline() != useUnderline + || currentFont.italic() != useItalic + || currentFont.strikeOut() != useStrikeOut + || currentFont.overline() != useOverline) { + currentFont.setWeight(useBold ? boldWeight : normalWeight); + currentFont.setUnderline(useUnderline); + currentFont.setItalic(useItalic); + currentFont.setStrikeOut(useStrikeOut); + currentFont.setOverline(useOverline); + painter.setFont(currentFont); } // setup pen -- cgit v1.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor