Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/ui/fixtures/ui_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ void hooksTests() async {
expectEquals(x.countryCode, y.countryCode);
});

await test('Window padding/insets/viewPadding/systemGestureInsets', () {
await test('View padding/insets/viewPadding/systemGestureInsets', () {
_callHook(
'_updateWindowMetrics',
20,
Expand Down
56 changes: 31 additions & 25 deletions lib/ui/platform_dispatcher.dart
Original file line number Diff line number Diff line change
Expand Up @@ -258,25 +258,25 @@ class PlatformDispatcher {
view: _views[id],
devicePixelRatio: devicePixelRatio,
geometry: Rect.fromLTWH(0.0, 0.0, width, height),
viewPadding: WindowPadding._(
viewPadding: ViewPadding._(
top: viewPaddingTop,
right: viewPaddingRight,
bottom: viewPaddingBottom,
left: viewPaddingLeft,
),
viewInsets: WindowPadding._(
viewInsets: ViewPadding._(
top: viewInsetTop,
right: viewInsetRight,
bottom: viewInsetBottom,
left: viewInsetLeft,
),
padding: WindowPadding._(
padding: ViewPadding._(
top: math.max(0.0, viewPaddingTop - viewInsetTop),
right: math.max(0.0, viewPaddingRight - viewInsetRight),
bottom: math.max(0.0, viewPaddingBottom - viewInsetBottom),
left: math.max(0.0, viewPaddingLeft - viewInsetLeft),
),
systemGestureInsets: WindowPadding._(
systemGestureInsets: ViewPadding._(
top: math.max(0.0, systemGestureInsetTop),
right: math.max(0.0, systemGestureInsetRight),
bottom: math.max(0.0, systemGestureInsetBottom),
Expand Down Expand Up @@ -1335,10 +1335,10 @@ class ViewConfiguration {
this.devicePixelRatio = 1.0,
this.geometry = Rect.zero,
this.visible = false,
this.viewInsets = WindowPadding.zero,
this.viewPadding = WindowPadding.zero,
this.systemGestureInsets = WindowPadding.zero,
this.padding = WindowPadding.zero,
this.viewInsets = ViewPadding.zero,
this.viewPadding = ViewPadding.zero,
this.systemGestureInsets = ViewPadding.zero,
this.padding = ViewPadding.zero,
this.gestureSettings = const GestureSettings(),
this.displayFeatures = const <DisplayFeature>[],
}) : assert(window == null || view == null),
Expand All @@ -1356,10 +1356,10 @@ class ViewConfiguration {
double? devicePixelRatio,
Rect? geometry,
bool? visible,
WindowPadding? viewInsets,
WindowPadding? viewPadding,
WindowPadding? systemGestureInsets,
WindowPadding? padding,
ViewPadding? viewInsets,
ViewPadding? viewPadding,
ViewPadding? systemGestureInsets,
ViewPadding? padding,
GestureSettings? gestureSettings,
List<DisplayFeature>? displayFeatures,
}) {
Expand Down Expand Up @@ -1410,53 +1410,53 @@ class ViewConfiguration {
///
/// For instance, if the view doesn't overlap the
/// [ScreenConfiguration.viewInsets] area, [viewInsets] will be
/// [WindowPadding.zero].
/// [ViewPadding.zero].
///
/// The number of physical pixels on each side of this view rectangle into
/// which the application can draw, but over which the operating system will
/// likely place system UI, such as the keyboard or system menus, that fully
/// obscures any content.
final WindowPadding viewInsets;
final ViewPadding viewInsets;

/// The view insets, as it intersects with [ScreenConfiguration.viewPadding]
/// for the screen it is on.
///
/// For instance, if the view doesn't overlap the
/// [ScreenConfiguration.viewPadding] area, [viewPadding] will be
/// [WindowPadding.zero].
/// [ViewPadding.zero].
///
/// The number of physical pixels on each side of this screen rectangle into
/// which the application can place a view, but which may be partially
/// obscured by system UI (such as the system notification area), or physical
/// intrusions in the display (e.g. overscan regions on television screens or
/// phone sensor housings).
final WindowPadding viewPadding;
final ViewPadding viewPadding;

/// The view insets, as it intersects with
/// [ScreenConfiguration.systemGestureInsets] for the screen it is on.
///
/// For instance, if the view doesn't overlap the
/// [ScreenConfiguration.systemGestureInsets] area, [systemGestureInsets] will
/// be [WindowPadding.zero].
/// be [ViewPadding.zero].
///
/// The number of physical pixels on each side of this screen rectangle into
/// which the application can place a view, but where the operating system
/// will consume input gestures for the sake of system navigation.
final WindowPadding systemGestureInsets;
final ViewPadding systemGestureInsets;

/// The view insets, as it intersects with [ScreenConfiguration.padding] for
/// the screen it is on.
///
/// For instance, if the view doesn't overlap the
/// [ScreenConfiguration.padding] area, [padding] will be
/// [WindowPadding.zero].
/// [ViewPadding.zero].
///
/// The number of physical pixels on each side of this screen rectangle into
/// which the application can place a view, but which may be partially
/// obscured by system UI (such as the system notification area), or physical
/// intrusions in the display (e.g. overscan regions on television screens or
/// phone sensor housings).
final WindowPadding padding;
final ViewPadding padding;

/// Additional configuration for touch gestures performed on this view.
///
Expand Down Expand Up @@ -1765,8 +1765,8 @@ enum AppLifecycleState {
/// * [MediaQuery.of], for the preferred mechanism for accessing these values.
/// * [Scaffold], which automatically applies the padding in material design
/// applications.
class WindowPadding {
const WindowPadding._({ required this.left, required this.top, required this.right, required this.bottom });
class ViewPadding {
const ViewPadding._({ required this.left, required this.top, required this.right, required this.bottom });

/// The distance from the left edge to the first unpadded pixel, in physical pixels.
final double left;
Expand All @@ -1780,15 +1780,21 @@ class WindowPadding {
/// The distance from the bottom edge to the first unpadded pixel, in physical pixels.
final double bottom;

/// A window padding that has zeros for each edge.
static const WindowPadding zero = WindowPadding._(left: 0.0, top: 0.0, right: 0.0, bottom: 0.0);
/// A view padding that has zeros for each edge.
static const ViewPadding zero = ViewPadding._(left: 0.0, top: 0.0, right: 0.0, bottom: 0.0);

@override
String toString() {
return 'WindowPadding(left: $left, top: $top, right: $right, bottom: $bottom)';
return 'ViewPadding(left: $left, top: $top, right: $right, bottom: $bottom)';
}
}

/// Deprecated. Will be removed in a future version of Flutter.
///
/// Use [ViewPadding] instead.
// TODO(goderbauer): deprecate this when framework has been migrated to ViewPadding.
typedef WindowPadding = ViewPadding;

/// Area of the display that may be obstructed by a hardware feature.
///
/// This is populated only on Android.
Expand Down
8 changes: 4 additions & 4 deletions lib/ui/window.dart
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ class FlutterView {
/// * [MediaQuery.of], a simpler mechanism for the same.
/// * [Scaffold], which automatically applies the view insets in material
/// design applications.
WindowPadding get viewInsets => viewConfiguration.viewInsets;
ViewPadding get viewInsets => viewConfiguration.viewInsets;

/// The number of physical pixels on each side of the display rectangle into
/// which the view can render, but which may be partially obscured by system
Expand All @@ -179,7 +179,7 @@ class FlutterView {
/// * [MediaQuery.of], a simpler mechanism for the same.
/// * [Scaffold], which automatically applies the padding in material design
/// applications.
WindowPadding get viewPadding => viewConfiguration.viewPadding;
ViewPadding get viewPadding => viewConfiguration.viewPadding;

/// The number of physical pixels on each side of the display rectangle into
/// which the view can render, but where the operating system will consume
Expand All @@ -196,7 +196,7 @@ class FlutterView {
/// * [WidgetsBindingObserver], for a mechanism at the widgets layer to
/// observe when this value changes.
/// * [MediaQuery.of], a simpler mechanism for the same.
WindowPadding get systemGestureInsets => viewConfiguration.systemGestureInsets;
ViewPadding get systemGestureInsets => viewConfiguration.systemGestureInsets;

/// The number of physical pixels on each side of the display rectangle into
/// which the view can render, but which may be partially obscured by system
Expand Down Expand Up @@ -224,7 +224,7 @@ class FlutterView {
/// * [MediaQuery.of], a simpler mechanism for the same.
/// * [Scaffold], which automatically applies the padding in material design
/// applications.
WindowPadding get padding => viewConfiguration.padding;
ViewPadding get padding => viewConfiguration.padding;

/// {@macro dart.ui.ViewConfiguration.displayFeatures}
///
Expand Down
36 changes: 19 additions & 17 deletions lib/web_ui/lib/platform_dispatcher.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,10 @@ class ViewConfiguration {
this.devicePixelRatio = 1.0,
this.geometry = Rect.zero,
this.visible = false,
this.viewInsets = WindowPadding.zero,
this.viewPadding = WindowPadding.zero,
this.systemGestureInsets = WindowPadding.zero,
this.padding = WindowPadding.zero,
this.viewInsets = ViewPadding.zero,
this.viewPadding = ViewPadding.zero,
this.systemGestureInsets = ViewPadding.zero,
this.padding = ViewPadding.zero,
this.gestureSettings = const GestureSettings(),
this.displayFeatures = const <DisplayFeature>[],
}) : assert(window == null || view == null),
Expand All @@ -222,10 +222,10 @@ class ViewConfiguration {
double? devicePixelRatio,
Rect? geometry,
bool? visible,
WindowPadding? viewInsets,
WindowPadding? viewPadding,
WindowPadding? systemGestureInsets,
WindowPadding? padding,
ViewPadding? viewInsets,
ViewPadding? viewPadding,
ViewPadding? systemGestureInsets,
ViewPadding? padding,
GestureSettings? gestureSettings,
List<DisplayFeature>? displayFeatures,
}) {
Expand Down Expand Up @@ -255,10 +255,10 @@ class ViewConfiguration {
final double devicePixelRatio;
final Rect geometry;
final bool visible;
final WindowPadding viewInsets;
final WindowPadding viewPadding;
final WindowPadding systemGestureInsets;
final WindowPadding padding;
final ViewPadding viewInsets;
final ViewPadding viewPadding;
final ViewPadding systemGestureInsets;
final ViewPadding padding;
final GestureSettings gestureSettings;
final List<DisplayFeature> displayFeatures;

Expand Down Expand Up @@ -375,26 +375,28 @@ enum AppLifecycleState {
detached,
}

abstract class WindowPadding {
const factory WindowPadding._(
abstract class ViewPadding {
const factory ViewPadding._(
{required double left,
required double top,
required double right,
required double bottom}) = engine.WindowPadding;
required double bottom}) = engine.ViewPadding;

double get left;
double get top;
double get right;
double get bottom;

static const WindowPadding zero = WindowPadding._(left: 0.0, top: 0.0, right: 0.0, bottom: 0.0);
static const ViewPadding zero = ViewPadding._(left: 0.0, top: 0.0, right: 0.0, bottom: 0.0);

@override
String toString() {
return 'WindowPadding(left: $left, top: $top, right: $right, bottom: $bottom)';
return 'ViewPadding(left: $left, top: $top, right: $right, bottom: $bottom)';
}
}

typedef WindowPadding = ViewPadding;

class DisplayFeature {
const DisplayFeature({
required this.bounds,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ class CustomElementDimensionsProvider extends DimensionsProvider {
}

@override
WindowPadding computeKeyboardInsets(
ViewPadding computeKeyboardInsets(
double physicalHeight,
bool isEditingOnMobile,
) {
return const WindowPadding(
return const ViewPadding(
top: 0,
right: 0,
bottom: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ abstract class DimensionsProvider {
/// pending DOM writes.
ui.Size computePhysicalSize();

/// Returns the [WindowPadding] of the keyboard insets (if present).
WindowPadding computeKeyboardInsets(
/// Returns the [ViewPadding] of the keyboard insets (if present).
ViewPadding computeKeyboardInsets(
double physicalHeight,
bool isEditingOnMobile,
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class FullPageDimensionsProvider extends DimensionsProvider {
}

@override
WindowPadding computeKeyboardInsets(
ViewPadding computeKeyboardInsets(
double physicalHeight,
bool isEditingOnMobile,
) {
Expand All @@ -118,6 +118,6 @@ class FullPageDimensionsProvider extends DimensionsProvider {
}
final double bottomPadding = physicalHeight - windowInnerHeight;

return WindowPadding(bottom: bottomPadding, left: 0, right: 0, top: 0);
return ViewPadding(bottom: bottomPadding, left: 0, right: 0, top: 0);
}
}
10 changes: 5 additions & 5 deletions lib/web_ui/lib/src/engine/window.dart
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ class EngineFlutterWindow extends ui.SingletonFlutterWindow {
}

@override
WindowPadding get viewInsets => _viewInsets;
WindowPadding _viewInsets = ui.WindowPadding.zero as WindowPadding;
ViewPadding get viewInsets => _viewInsets;
ViewPadding _viewInsets = ui.ViewPadding.zero as ViewPadding;

/// Lazily populated and cleared at the end of the frame.
ui.Size? _physicalSize;
Expand Down Expand Up @@ -351,9 +351,9 @@ class EngineSingletonFlutterWindow extends EngineFlutterWindow {
final EngineSingletonFlutterWindow window =
EngineSingletonFlutterWindow(kImplicitViewId, EnginePlatformDispatcher.instance);

/// The Web implementation of [ui.WindowPadding].
class WindowPadding implements ui.WindowPadding {
const WindowPadding({
/// The Web implementation of [ui.ViewPadding].
class ViewPadding implements ui.ViewPadding {
const ViewPadding({
required this.left,
required this.top,
required this.right,
Expand Down
8 changes: 4 additions & 4 deletions lib/web_ui/lib/window.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ abstract class FlutterView {
double get devicePixelRatio => viewConfiguration.devicePixelRatio;
Rect get physicalGeometry => viewConfiguration.geometry;
Size get physicalSize => viewConfiguration.geometry.size;
WindowPadding get viewInsets => viewConfiguration.viewInsets;
WindowPadding get viewPadding => viewConfiguration.viewPadding;
WindowPadding get systemGestureInsets => viewConfiguration.systemGestureInsets;
WindowPadding get padding => viewConfiguration.padding;
ViewPadding get viewInsets => viewConfiguration.viewInsets;
ViewPadding get viewPadding => viewConfiguration.viewPadding;
ViewPadding get systemGestureInsets => viewConfiguration.systemGestureInsets;
ViewPadding get padding => viewConfiguration.padding;
List<DisplayFeature> get displayFeatures => viewConfiguration.displayFeatures;
void render(Scene scene) => platformDispatcher.render(scene, this);
void updateSemantics(SemanticsUpdate update) => platformDispatcher.updateSemantics(update);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ void doTests() {
final double physicalHeight =
(domWindow.visualViewport!.height! + keyboardGap) * dpr;

final WindowPadding computed =
final ViewPadding computed =
provider.computeKeyboardInsets(physicalHeight, false);

expect(computed.top, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void doTests() {
(domWindow.visualViewport!.height! + keyboardGap) * dpr;
const double expectedBottom = keyboardGap * dpr;

final WindowPadding computed =
final ViewPadding computed =
provider.computeKeyboardInsets(physicalHeight, false);

expect(computed.top, 0);
Expand Down