Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(font): More robust font size calculation #1646

Merged
merged 1 commit into from Jun 2, 2019

Conversation

patrick96
Copy link
Member

Originally the size function returned the scaled size property for
scalable fonts and the non-scaled pixelsize property for non-scalable
fonts. This caused lots of issues when that property was 0 (empty bars,
characters not drawn without warning, see references at the bottom).
This behavior was mostly observed on debian where size is set to 0 if
pixelsize is set.

We now try to use both properties for both types, but prefering size
for scalable fonts and pixelsize for non-scalable ones.

This behavior doesn't break existing correct behavior but now never
returns 0. It will always try to fall back to the other property or to
some fallback value if both properties are 0.

I originally thought this could also make font patterns more expressive
by being able to specify the size of scalable fonts directly in pixels
like so:

Unifont:size=0:pixelsize=20

or to scale non-scalable fonts by forcing polybar to fall back to the
size property (which is always scaled):

Wuncon Siji:pixelsize=0:size=20

But how these two patterns are matched by fc-match depends both on the
font and on the distro/fontconfig setup.

Ref #706
Ref #1450
Ref #1257

Originally the size function returned the scaled `size` property for
scalable fonts and the non-scaled `pixelsize` property for non-scalable
fonts. This caused lots of issues when that property was 0 (empty bars,
characters not drawn without warning, see references at the bottom).
This behavior was mostly observed on debian where `size` is set to 0 if
`pixelsize` is set.

We now try to use both properties for both types, but prefering `size`
for scalable fonts and `pixelsize` for non-scalable ones.

This behavior doesn't break existing correct behavior but now never
returns 0. It will always try to fall back to the other property or to
some fallback value if both properties are 0.

I originally thought this could also make font patterns more expressive
by being able to specify the size of scalable fonts directly in pixels
like so:

  Unifont:size=0:pixelsize=20

or to scale non-scalable fonts by forcing polybar to fall back to the
`size` property (which is always scaled):

  Wuncon Siji:pixelsize=0:size=20

But how these two patterns are matched by `fc-match` depends both on the
font and on the distro/fontconfig setup.

Ref polybar#706
Ref polybar#1450
Ref polybar#1257
@patrick96 patrick96 added this to In progress in Refactoring via automation Feb 6, 2019
@patrick96 patrick96 added this to the 3.4.0 milestone Feb 11, 2019
@patrick96 patrick96 merged commit 5be532c into polybar:master Jun 2, 2019
@patrick96 patrick96 deleted the refactor/font-size branch June 2, 2019 22:49
@Lomadriel Lomadriel moved this from In progress to Done in Refactoring Jun 6, 2019
patrick96 added a commit to patrick96/polybar that referenced this pull request Jun 28, 2019
* In the `internal/memory` module all of the megabyte values no longer have decimal places (polybar#1606).

**New Config Options**
The following config options were added:

In the `[bar/*]` section:

* `monitor-exact`, use exact name matching for monitors otherwise ignore dashes.

In formats:

* `format-NAME-font` to set the font for that format (same as `label-NAME-font`)

In `internal/bspwm`:

* `label-marked` for the new `marked` node flag introduced in baskerville/bspwm@d0138af

In `internal/xkeyboard`:

* `label-indicator-(on|off)` is uses once for every indicator (caps lock, etc.), supports `%name%` and `%icon%`
* `label-indicator-(on|off)-(capslock|numlock|scrolllock)` overwrites `label-indicator-(on|off)` for the given indicator
* `layout-icon-*` is a list that maps layout names to icons to be used with the `%icon%` token in `label-layout`
* `indicator-icon-*` is a list that maps indicator names to icons to be used with the `%icon%` token in `label-indicator-*`

In `internal/temperature`:

* `base-temperature` is the counterpart to `warn-temperature` and controls the lower bound for the ramp.

**Deprecations**

* xkeyboard: `label-indicator` is deprecated in favor of the new `label-indicator-on`

**Features**

* bar:
    * make exact monitor matching configurable (polybar#1533), see polybar#1532
    * `border-size` now supports the same mixed percentage/pixel sizes as `width` and `height` (polybar#1592), see polybar#1567
    * Use primary monitor if no monitor is specified (polybar#1426), polybar#1412
* bspwm: Support for the new `marked` node flag. (polybar#1557), see polybar#1552
* format: Formats now support the `-font` property just as labels (polybar#1602), see polybar#19
* network: Support for all tokens in all labels (polybar#1597)
* xkeyboard: Indicator names can be customized. Also adds icon mappings for layouts and indicators (polybar#1559, polybar#1048), see polybar#1558
* temperature: The ramp now starts at `base-temperature` instead of 0°C (polybar#1706), see polybar#1703
* battery: `%percentage_raw%` token that displays the real percentage regardless of `full-at` (polybar#1756), see polybar#1753

**Fixes**

* network: Display `N/A` when no IPv4 address can be found (polybar#1597)
* xworkspaces: Properly handle when desktops are removed from `_NET_DESKTOP_NAMES` (polybar#1713), see polybar#1710
* backlight: Read the right brightness value (polybar#1689), see polybar#1180
* pulseaudio: Allow volume increase when it is close to the maximum. Before it did not allow that when adding `interval` would go over the max. (polybar#1765)
* i3: fix workspace change for workspaces with special characters in the name  (polybar#1798), see polybar#1797
* font: Characters no longer vanish when the `size` or `pixelsize` property is 0 (polybar#1646)
* build:
    * Compilation error under gcc9 (polybar#1729), see polybar#1728
    * Compilation no longer fails when new flags are introduced that produce new warnings (polybar#1735)
patrick96 added a commit to patrick96/polybar that referenced this pull request Jun 28, 2019
* In the `internal/memory` module all of the megabyte values no longer have decimal places (polybar#1606).

**New Config Options**
The following config options were added:

In the `[bar/*]` section:

* `monitor-exact`, use exact name matching for monitors otherwise ignore dashes.

In formats:

* `format-NAME-font` to set the font for that format (same as `label-NAME-font`)

In `internal/bspwm`:

* `label-marked` for the new `marked` node flag introduced in baskerville/bspwm@d0138af

In `internal/xkeyboard`:

* `label-indicator-(on|off)` is uses once for every indicator (caps lock, etc.), supports `%name%` and `%icon%`
* `label-indicator-(on|off)-(capslock|numlock|scrolllock)` overwrites `label-indicator-(on|off)` for the given indicator
* `layout-icon-*` is a list that maps layout names to icons to be used with the `%icon%` token in `label-layout`
* `indicator-icon-*` is a list that maps indicator names to icons to be used with the `%icon%` token in `label-indicator-*`

In `internal/temperature`:

* `base-temperature` is the counterpart to `warn-temperature` and controls the lower bound for the ramp.

**Deprecations**

* xkeyboard: `label-indicator` is deprecated in favor of the new `label-indicator-on`

**Features**

* bar:
    * make exact monitor matching configurable (polybar#1533), see polybar#1532
    * `border-size` now supports the same mixed percentage/pixel sizes as `width` and `height` (polybar#1592), see polybar#1567
    * Use primary monitor if no monitor is specified (polybar#1426), polybar#1412
* bspwm: Support for the new `marked` node flag. (polybar#1557), see polybar#1552
* format: Formats now support the `-font` property just as labels (polybar#1602), see polybar#19
* network: Support for all tokens in all labels (polybar#1597)
* xkeyboard: Indicator names can be customized. Also adds icon mappings for layouts and indicators (polybar#1559, polybar#1048), see polybar#1558
* temperature: The ramp now starts at `base-temperature` instead of 0°C (polybar#1706), see polybar#1703
* battery: `%percentage_raw%` token that displays the real percentage regardless of `full-at` (polybar#1756), see polybar#1753

**Fixes**

* network: Display `N/A` when no IPv4 address can be found (polybar#1597)
* xworkspaces: Properly handle when desktops are removed from `_NET_DESKTOP_NAMES` (polybar#1713), see polybar#1710
* backlight: Read the right brightness value (polybar#1689), see polybar#1180
* pulseaudio: Allow volume increase when it is close to the maximum. Before it did not allow that when adding `interval` would go over the max. (polybar#1765)
* i3: fix workspace change for workspaces with special characters in the name  (polybar#1798), see polybar#1797
* font: Characters no longer vanish when the `size` or `pixelsize` property is 0 (polybar#1646)
* build:
    * Compilation error under gcc9 (polybar#1729), see polybar#1728
    * Compilation no longer fails when new flags are introduced that produce new warnings (polybar#1735)
patrick96 added a commit to patrick96/polybar that referenced this pull request Jun 29, 2019
Breaking Changes:

* In the `internal/memory` module all of the megabyte values no longer have decimal places (polybar#1606).

Changelog

**New Config Options**
The following config options were added:

In the `[bar/*]` section:

* `monitor-exact`, use exact name matching for monitors otherwise ignore dashes.

In formats:

* `format-NAME-font` to set the font for that format (same as `label-NAME-font`)

In `internal/bspwm`:

* `label-marked` for the new `marked` node flag introduced in baskerville/bspwm@d0138af

In `internal/xkeyboard`:

* `label-indicator-(on|off)` is used once for every indicator (caps lock, etc.), supports `%name%` and `%icon%`
* `label-indicator-(on|off)-(capslock|numlock|scrolllock)` overwrites `label-indicator-(on|off)` for the given indicator
* `layout-icon-*` is a list that maps layout names to icons to be used with the `%icon%` token in `label-layout`
* `indicator-icon-*` is a list that maps indicator names to icons to be used with the `%icon%` token in `label-indicator-*`

In `internal/temperature`:

* `base-temperature` is the counterpart to `warn-temperature` and controls the lower bound for the ramp.

**Deprecations**

* xkeyboard: `label-indicator` is deprecated in favor of the new `label-indicator-on`

**Features**

* bar:
    * make exact monitor matching configurable (polybar#1533), see polybar#1532
    * `border-size` now supports the same mixed percentage/pixel sizes as `width` and `height` (polybar#1592), see polybar#1567
    * Use primary monitor if no monitor is specified (polybar#1426), polybar#1412
* bspwm: Support for the new `marked` node flag. (polybar#1557), see polybar#1552
* format: Formats now support the `-font` property just as labels (polybar#1602), see polybar#19
* network: Support for all tokens in all labels (polybar#1597)
* xkeyboard: Indicator names can be customized. Also adds icon mappings for layouts and indicators (polybar#1559, polybar#1048), see polybar#1558
* temperature: The ramp now starts at `base-temperature` instead of 0°C (polybar#1706), see polybar#1703
* battery: `%percentage_raw%` token that displays the real percentage regardless of `full-at` (polybar#1756), see polybar#1753

**Fixes**

* network: Display `N/A` when no IPv4 address can be found (polybar#1597)
* xworkspaces: Properly handle when desktops are removed from `_NET_DESKTOP_NAMES` (polybar#1713), see polybar#1710
* backlight: Read the right brightness value (polybar#1689), see polybar#1180
* pulseaudio: Allow volume increase when it is close to the maximum. Before it did not allow that when adding `interval` would go over the max. (polybar#1765)
* i3: fix workspace change for workspaces with special characters in the name  (polybar#1798), see polybar#1797
* font: Characters no longer vanish when the `size` or `pixelsize` property is 0 (polybar#1646)
* build:
    * Compilation error under gcc9 (polybar#1729), see polybar#1728
    * Compilation no longer fails when new flags are introduced that produce new warnings (polybar#1735)
patrick96 added a commit that referenced this pull request Jul 24, 2019
Breaking Changes:

* In the `internal/memory` module all of the megabyte values no longer have decimal places (#1606).

Changelog

**New Config Options**
The following config options were added:

In the `[bar/*]` section:

* `monitor-exact`, use exact name matching for monitors otherwise ignore dashes.

In formats:

* `format-NAME-font` to set the font for that format (same as `label-NAME-font`)

In `internal/bspwm`:

* `label-marked` for the new `marked` node flag introduced in baskerville/bspwm@d0138af

In `internal/xkeyboard`:

* `label-indicator-(on|off)` is used once for every indicator (caps lock, etc.), supports `%name%` and `%icon%`
* `label-indicator-(on|off)-(capslock|numlock|scrolllock)` overwrites `label-indicator-(on|off)` for the given indicator
* `layout-icon-*` is a list that maps layout names to icons to be used with the `%icon%` token in `label-layout`
* `indicator-icon-*` is a list that maps indicator names to icons to be used with the `%icon%` token in `label-indicator-*`

In `internal/temperature`:

* `base-temperature` is the counterpart to `warn-temperature` and controls the lower bound for the ramp.

**Deprecations**

* xkeyboard: `label-indicator` is deprecated in favor of the new `label-indicator-on`

**Features**

* bar:
    * make exact monitor matching configurable (#1533), see #1532
    * `border-size` now supports the same mixed percentage/pixel sizes as `width` and `height` (#1592), see #1567
    * Use primary monitor if no monitor is specified (#1426), #1412
* bspwm: Support for the new `marked` node flag. (#1557), see #1552
* format: Formats now support the `-font` property just as labels (#1602), see #19
* network: Support for all tokens in all labels (#1597)
* xkeyboard: Indicator names can be customized. Also adds icon mappings for layouts and indicators (#1559, #1048), see #1558
* temperature: The ramp now starts at `base-temperature` instead of 0°C (#1706), see #1703
* battery: `%percentage_raw%` token that displays the real percentage regardless of `full-at` (#1756), see #1753

**Fixes**

* network: Display `N/A` when no IPv4 address can be found (#1597)
* xworkspaces: Properly handle when desktops are removed from `_NET_DESKTOP_NAMES` (#1713), see #1710
* backlight: Read the right brightness value (#1689), see #1180
* pulseaudio: Allow volume increase when it is close to the maximum. Before it did not allow that when adding `interval` would go over the max. (#1765)
* i3: fix workspace change for workspaces with special characters in the name  (#1798), see #1797
* font: Characters no longer vanish when the `size` or `pixelsize` property is 0 (#1646)
* build:
    * Compilation error under gcc9 (#1729), see #1728
    * Compilation no longer fails when new flags are introduced that produce new warnings (#1735)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Refactoring
  
Done
Development

Successfully merging this pull request may close these issues.

None yet

2 participants