Skip to content

Commit

Permalink
Add physical view insets to FlutterWindowMetricsEvent
Browse files Browse the repository at this point in the history
This is needed to propagate inset values through Flutter.

Bug: b/181683254
  • Loading branch information
sagallea committed May 27, 2021
1 parent 8a562b9 commit 0c23993
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
10 changes: 9 additions & 1 deletion shell/common/engine.cc
Expand Up @@ -289,7 +289,15 @@ void Engine::SetViewportMetrics(const ViewportMetrics& metrics) {
bool dimensions_changed =
viewport_metrics_.physical_height != metrics.physical_height ||
viewport_metrics_.physical_width != metrics.physical_width ||
viewport_metrics_.device_pixel_ratio != metrics.device_pixel_ratio;
viewport_metrics_.device_pixel_ratio != metrics.device_pixel_ratio ||
viewport_metrics_.physical_view_inset_top !=
metrics.physical_view_inset_top ||
viewport_metrics_.physical_view_inset_right !=
metrics.physical_view_inset_right ||
viewport_metrics_.physical_view_inset_bottom !=
metrics.physical_view_inset_bottom ||
viewport_metrics_.physical_view_inset_left !=
metrics.physical_view_inset_left;
viewport_metrics_ = metrics;
runtime_controller_->SetViewportMetrics(viewport_metrics_);
if (animator_) {
Expand Down
8 changes: 8 additions & 0 deletions shell/platform/embedder/embedder.cc
Expand Up @@ -1388,6 +1388,14 @@ FlutterEngineResult FlutterEngineSendWindowMetricsEvent(
metrics.physical_width = SAFE_ACCESS(flutter_metrics, width, 0.0);
metrics.physical_height = SAFE_ACCESS(flutter_metrics, height, 0.0);
metrics.device_pixel_ratio = SAFE_ACCESS(flutter_metrics, pixel_ratio, 1.0);
metrics.physical_view_inset_top =
SAFE_ACCESS(flutter_metrics, physical_view_inset_top, 0.0);
metrics.physical_view_inset_right =
SAFE_ACCESS(flutter_metrics, physical_view_inset_right, 0.0);
metrics.physical_view_inset_bottom =
SAFE_ACCESS(flutter_metrics, physical_view_inset_bottom, 0.0);
metrics.physical_view_inset_left =
SAFE_ACCESS(flutter_metrics, physical_view_inset_left, 0.0);

if (metrics.device_pixel_ratio <= 0.0) {
return LOG_EMBEDDER_ERROR(
Expand Down
8 changes: 8 additions & 0 deletions shell/platform/embedder/embedder.h
Expand Up @@ -572,6 +572,14 @@ typedef struct {
size_t left;
/// Vertical physical location of the top of the window on the screen.
size_t top;
/// Top inset of window.
double physical_view_inset_top;
/// Right inset of window.
double physical_view_inset_right;
/// Bottom inset of window.
double physical_view_inset_bottom;
/// Left inset of window.
double physical_view_inset_left;
} FlutterWindowMetricsEvent;

/// The phase of the pointer event.
Expand Down

0 comments on commit 0c23993

Please sign in to comment.