Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b948d0181bcf2490758c678c97fac81e9392fbbe
      
https://github.com/WebKit/WebKit/commit/b948d0181bcf2490758c678c97fac81e9392fbbe
  Author: Razvan Caliman <[email protected]>
  Date:   2023-01-05 (Thu, 05 Jan 2023)

  Changed paths:
    M LayoutTests/inspector/model/font-calculate-properties-expected.txt
    M LayoutTests/inspector/model/font-calculate-properties.html
    A LayoutTests/inspector/model/font-styles-write-variation-expected.txt
    A LayoutTests/inspector/model/font-styles-write-variation.html
    M Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
    M Source/WebInspectorUI/UserInterface/Main.html
    M Source/WebInspectorUI/UserInterface/Models/Font.js
    A Source/WebInspectorUI/UserInterface/Models/FontStyles.js
    M Source/WebInspectorUI/UserInterface/Models/FontVariationAxis.js
    M Source/WebInspectorUI/UserInterface/Test.html
    M Source/WebInspectorUI/UserInterface/Views/DetailsSection.css
    M Source/WebInspectorUI/UserInterface/Views/DetailsSectionRow.js
    M Source/WebInspectorUI/UserInterface/Views/DetailsSectionSimpleRow.js
    M Source/WebInspectorUI/UserInterface/Views/FontDetailsPanel.js
    A 
Source/WebInspectorUI/UserInterface/Views/FontVariationDetailsSectionRow.css
    A 
Source/WebInspectorUI/UserInterface/Views/FontVariationDetailsSectionRow.js
    M Source/WebInspectorUI/UserInterface/Views/Variables.css

  Log Message:
  -----------
  Web Inspector: Add editing capabilities for font variation axes in Fonts 
sidebar panel
https://bugs.webkit.org/show_bug.cgi?id=249535

Reviewed by Patrick Angle.

Variable fonts expose variation axes to control specific aspects of the font,
like thickness, stretch or slant. The Fonts sidebar panel already lists the
available variation axes for the primary font used on the selected node.

This patch augments the Fonts sidebar panel with editing controls to 
interactively
adjust the values for variation axes and get immediate visual feedback of the 
results.

There are two types of variation axes: registered and custom.

Registered axes values map to a corresponding CSS font property:
`wght` -> font-weight
`wdth` -> font-stretch
`ital` -> font-style
`slnt` -> font-style

Custom axes and their values are always written to `font-variation-settings`.

If a registered axis is declared in the value of `font-variation-settings`,
its value must always be written there instead of the corresponding font 
property
else it will be overriden by the value of `font-variation-settings`.

In this implementation, all edits made using the controls in the Fonts sidebar 
panel
are written to the selected node's inline style to ensure immediate visual 
feedback
at the expense of scoping the font style changes very narrowly to the selected 
node only.

A future iteration will improve this by identifying the appropriate CSS rules
in the cascade to write to.

* LayoutTests/inspector/model/font-calculate-properties-expected.txt:
* LayoutTests/inspector/model/font-calculate-properties.html:
* LayoutTests/inspector/model/font-styles-write-variation-expected.txt: Added.
* LayoutTests/inspector/model/font-styles-write-variation.html: Added.

Updated existing test to use the new `WI.FontStyles` model.
Added new test to validate variation axis writing logic.

* Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js:
* Source/WebInspectorUI/UserInterface/Main.html:
* Source/WebInspectorUI/UserInterface/Models/Font.js:
(WI.Font.prototype.variationAxis):
(WI.Font):
(WI.Font.prototype.calculateFontProperties): Deleted.
(WI.Font.prototype._calculateProperties): Deleted.
(WI.Font.prototype._calculateFontFeatureAxes): Deleted.
(WI.Font.prototype._calculateFontVariationAxes): Deleted.
(WI.Font.prototype._parseFontFeatureOrVariationSettings): Deleted.

Moved parsing-related logic from `WI.Font` to a new `WI.FontStyles` model.
This object maintains state of edits made to variation axes over time.
It handles where to write variation axis values.

* Source/WebInspectorUI/UserInterface/Models/FontStyles.js: Copied from 
Source/WebInspectorUI/UserInterface/Models/Font.js.
(WI.FontStyles):
(WI.FontStyles.prototype.get featuresMap):
(WI.FontStyles.prototype.get variationsMap):
(WI.FontStyles.prototype.get propertiesMap):
(WI.FontStyles.prototype.get significantChangeSinceLastRefresh):
(WI.FontStyles.fontPropertyForAxisTag):
(WI.FontStyles.axisValueToFontPropertyValue):
(WI.FontStyles.fontPropertyValueToAxisValue):
(WI.FontStyles.prototype.writeFontVariation):
(WI.FontStyles.prototype.refresh):
(WI.FontStyles.prototype._calculateFontProperties):
(WI.FontStyles.prototype._calculateProperties):
(WI.FontStyles.prototype._calculateFontFeatureAxes):
(WI.FontStyles.prototype._calculateFontVariationAxes):
(WI.FontStyles.prototype._parseFontFeatureOrVariationSettings):

Most contents of `WI.FontStyles` are copied over from `WI.Font` verbatim.

* Source/WebInspectorUI/UserInterface/Test.html:
* Source/WebInspectorUI/UserInterface/Views/DetailsSection.css:
(.details-section > .content > .group:has(.row.font-variation)):
(.details-section > .content > .group > .row:is(.simple, 
.font-variation):has(.warning)):
(.details-section > .content > .group > .row:is(.simple, .font-variation) > 
.warning):
(.details-section > .content > .group > .row.simple:has(.warning)): Deleted.
(.details-section > .content > .group > .row.simple > .warning): Deleted.
* Source/WebInspectorUI/UserInterface/Views/FontDetailsPanel.js:
(WI.FontDetailsPanel):
(WI.FontDetailsPanel.prototype.refresh):
(WI.FontDetailsPanel.prototype.detached):
(WI.FontDetailsPanel.prototype.layout):
(WI.FontDetailsPanel.prototype.initialLayout):
(WI.FontDetailsPanel.prototype._createDetailsSectionRowForProperty):
(WI.FontDetailsPanel.prototype._formatPropertyValue):
(WI.FontDetailsPanel.prototype._handleFontVariationValueChanged):
(WI.FontDetailsPanel.prototype._formatSizeValue): Deleted.
(WI.FontDetailsPanel.prototype._formatStyleValue): Deleted.
(WI.FontDetailsPanel.prototype._formatSimpleSingleValue): Deleted.
(WI.FontDetailsPanel.prototype._formatVariationValue): Deleted.
(WI.FontDetailsPanel.prototype._createVariationValueElement): Deleted.
(WI.FontDetailsPanel.prototype._hasVariationValue): Deleted.

Inside `FontDetailsPanel.layout()` the structure for editing controls is 
created.
Inside `FontDetailsPanel.refresh()` the values for editing controls are updated.
This ensures the UI remains in sync when changes occur in the Styles sidebar 
panel
or new styles apply as a result of DOM mutations, matching media queries, etc.

* Source/WebInspectorUI/UserInterface/Views/FontVariationDetailsSectionRow.css: 
Added.
(.details-section > .content > .group > .row.font-variation):
(.details-section > .content > .group > .row.font-variation > 
.label:not(:empty)):
(.details-section > .content > .group > .row.font-variation > .tag):
(.details-section > .content > .group > .row.font-variation > .value):
(.details-section > .content > .group > .row.font-variation > .variation-range):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]::-webkit-slider-thumb):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]::-webkit-slider-thumb:active):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]::-webkit-slider-runnable-track):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]::before,):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> input[type="range"]::after):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> .variation-minvalue):
(.details-section > .content > .group > .row.font-variation > .variation-range 
> .variation-maxvalue):
* Source/WebInspectorUI/UserInterface/Views/FontVariationDetailsSectionRow.js: 
Added.
(WI.FontVariationDetailsSectionRow):
(WI.FontVariationDetailsSectionRow.prototype.get tag):
(WI.FontVariationDetailsSectionRow.prototype.set tag):
(WI.FontVariationDetailsSectionRow.prototype.get label):
(WI.FontVariationDetailsSectionRow.prototype.set label):
(WI.FontVariationDetailsSectionRow.prototype.get value):
(WI.FontVariationDetailsSectionRow.prototype.set value):
(WI.FontVariationDetailsSectionRow.prototype.get warningMessage):
(WI.FontVariationDetailsSectionRow.prototype.set warningMessage):
(WI.FontVariationDetailsSectionRow.prototype._formatAxisValueAsString):
(WI.FontVariationDetailsSectionRow.prototype._getAxisResolution):

`WI.FontVariationDetailsSectionRow` encapsulates the layout for editing 
controls:
the interactive slider, the track with min/max values, warnings for 
out-of-range values.

* Source/WebInspectorUI/UserInterface/Views/Variables.css:
(:root):
(@media (prefers-color-scheme: dark) :root):

Canonical link: https://commits.webkit.org/258503@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to