Skip to content

Commit 7e68097

Browse files
authored
[web] Fix line-height for Firefox (flutter#13960)
1 parent f6a3eb9 commit 7e68097

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

lib/web_ui/lib/src/engine/dom_renderer.dart

+19-10
Original file line numberDiff line numberDiff line change
@@ -220,18 +220,28 @@ class DomRenderer {
220220
_styleElement = html.StyleElement();
221221
html.document.head.append(_styleElement);
222222
final html.CssStyleSheet sheet = _styleElement.sheet;
223-
223+
final bool isWebKit = browserEngine == BrowserEngine.webkit;
224+
final bool isFirefox = browserEngine == BrowserEngine.firefox;
224225
// TODO(butterfly): use more efficient CSS selectors; descendant selectors
225226
// are slow. More info:
226227
//
227228
// https://csswizardry.com/2011/09/writing-efficient-css-selectors/
228229

229230
// This undoes browser's default layout attributes for paragraphs. We
230231
// compute paragraph layout ourselves.
231-
sheet.insertRule('''
232-
flt-ruler-host p, flt-scene p {
233-
margin: 0;
234-
}''', sheet.cssRules.length);
232+
if (isFirefox) {
233+
// For firefox set line-height, otherwise textx at same font-size will
234+
// measure differently in ruler.
235+
sheet.insertRule(
236+
'flt-ruler-host p, flt-scene p '
237+
'{ margin: 0; line-height: 100%;}',
238+
sheet.cssRules.length);
239+
} else {
240+
sheet.insertRule(
241+
'flt-ruler-host p, flt-scene p '
242+
'{ margin: 0; }',
243+
sheet.cssRules.length);
244+
}
235245

236246
// This undoes browser's default painting and layout attributes of range
237247
// input, which is used in semantics.
@@ -248,15 +258,15 @@ flt-semantics input[type=range] {
248258
left: 0;
249259
}''', sheet.cssRules.length);
250260

251-
if (browserEngine == BrowserEngine.webkit) {
261+
if (isWebKit) {
252262
sheet.insertRule(
253263
'flt-semantics input[type=range]::-webkit-slider-thumb {'
254264
' -webkit-appearance: none;'
255265
'}',
256266
sheet.cssRules.length);
257267
}
258268

259-
if (browserEngine == BrowserEngine.firefox) {
269+
if (isFirefox) {
260270
sheet.insertRule(
261271
'input::-moz-selection {'
262272
' background-color: transparent;'
@@ -292,7 +302,7 @@ flt-semantics [contentEditable="true"] {
292302

293303
// By default on iOS, Safari would highlight the element that's being tapped
294304
// on using gray background. This CSS rule disables that.
295-
if (browserEngine == BrowserEngine.webkit) {
305+
if (isWebKit) {
296306
sheet.insertRule('''
297307
flt-glass-pane * {
298308
-webkit-tap-highlight-color: transparent;
@@ -393,8 +403,7 @@ flt-glass-pane * {
393403
// is 1.0.
394404
window.debugOverrideDevicePixelRatio(1.0);
395405

396-
if (html.window.visualViewport == null &&
397-
browserEngine == BrowserEngine.webkit) {
406+
if (html.window.visualViewport == null && isWebKit) {
398407
// Safari sometimes gives us bogus innerWidth/innerHeight values when the
399408
// page loads. When it changes the values to correct ones it does not
400409
// notify of the change via `onResize`. As a workaround, we setup a

0 commit comments

Comments
 (0)