// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/painting.dart';

void main() {
  // Change made in https://github.com/flutter/flutter/pull/121152
  final EdgeInsets insets = EdgeInsets.fromViewPadding(ViewPadding.zero, 3.0);

  // Change made in https://github.com/flutter/flutter/pull/128522
  const TextStyle textStyle = TextStyle()
    ..getTextStyle(textScaler: TextScaler.linear(math.min(_kTextScaleFactor, 1.0)))
    ..getTextStyle();

  TextPainter(text: inlineSpan);
  TextPainter(textScaler: TextScaler.linear(someValue));

  TextPainter.computeWidth(textScaler: TextScaler.linear(textScaleFactor));
  TextPainter.computeMaxIntrinsicWidth(textScaler: TextScaler.linear(textScaleFactor));
}
