提交 9eaedb06 编写于 作者: A Adam Barth 提交者: GitHub

Migrate ViewportMetrics away from Mojo (#3180)

Now we just pass the data directly.
上级 5be8ae80
...@@ -51,8 +51,7 @@ blink::PointerData::Change GetChangeFromEventType(mozart::EventType type) { ...@@ -51,8 +51,7 @@ blink::PointerData::Change GetChangeFromEventType(mozart::EventType type) {
} // namespace } // namespace
RuntimeHolder::RuntimeHolder() RuntimeHolder::RuntimeHolder()
: viewport_metrics_(sky::ViewportMetrics::New()), : view_listener_binding_(this),
view_listener_binding_(this),
input_listener_binding_(this), input_listener_binding_(this),
weak_factory_(this) {} weak_factory_(this) {}
...@@ -130,8 +129,8 @@ void RuntimeHolder::Render(std::unique_ptr<flow::LayerTree> layer_tree) { ...@@ -130,8 +129,8 @@ void RuntimeHolder::Render(std::unique_ptr<flow::LayerTree> layer_tree) {
return; // Only draw once per frame. return; // Only draw once per frame.
is_ready_to_draw_ = false; is_ready_to_draw_ = false;
layer_tree->set_frame_size(SkISize::Make(viewport_metrics_->physical_width, layer_tree->set_frame_size(SkISize::Make(viewport_metrics_.physical_width,
viewport_metrics_->physical_height)); viewport_metrics_.physical_height));
layer_tree->set_scene_version(scene_version_); layer_tree->set_scene_version(scene_version_);
blink::Threads::Gpu()->PostTask(ftl::MakeCopyable([ blink::Threads::Gpu()->PostTask(ftl::MakeCopyable([
...@@ -224,11 +223,11 @@ void RuntimeHolder::OnInvalidation(mozart::ViewInvalidationPtr invalidation, ...@@ -224,11 +223,11 @@ void RuntimeHolder::OnInvalidation(mozart::ViewInvalidationPtr invalidation,
// Apply view property changes. // Apply view property changes.
if (invalidation->properties) { if (invalidation->properties) {
view_properties_ = std::move(invalidation->properties); view_properties_ = std::move(invalidation->properties);
viewport_metrics_->physical_width = viewport_metrics_.physical_width =
view_properties_->view_layout->size->width; view_properties_->view_layout->size->width;
viewport_metrics_->physical_height = viewport_metrics_.physical_height =
view_properties_->view_layout->size->height; view_properties_->view_layout->size->height;
viewport_metrics_->device_pixel_ratio = 2.0; viewport_metrics_.device_pixel_ratio = 2.0;
// TODO(abarth): Use view_properties_->display_metrics->device_pixel_ratio // TODO(abarth): Use view_properties_->display_metrics->device_pixel_ratio
// once that's reasonable. // once that's reasonable.
runtime_->SetViewportMetrics(viewport_metrics_); runtime_->SetViewportMetrics(viewport_metrics_);
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
#include "flutter/assets/unzipper_provider.h" #include "flutter/assets/unzipper_provider.h"
#include "flutter/assets/zip_asset_store.h" #include "flutter/assets/zip_asset_store.h"
#include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/layer_tree.h"
#include "flutter/lib/ui/window/viewport_metrics.h"
#include "flutter/runtime/runtime_controller.h" #include "flutter/runtime/runtime_controller.h"
#include "flutter/runtime/runtime_delegate.h" #include "flutter/runtime/runtime_delegate.h"
#include "flutter/services/engine/sky_engine.mojom.h"
#include "lib/ftl/functional/closure.h" #include "lib/ftl/functional/closure.h"
#include "lib/ftl/macros.h" #include "lib/ftl/macros.h"
#include "lib/ftl/memory/weak_ptr.h" #include "lib/ftl/memory/weak_ptr.h"
...@@ -66,7 +66,7 @@ class RuntimeHolder : public blink::RuntimeDelegate, ...@@ -66,7 +66,7 @@ class RuntimeHolder : public blink::RuntimeDelegate,
std::unique_ptr<Rasterizer> rasterizer_; std::unique_ptr<Rasterizer> rasterizer_;
std::unique_ptr<blink::RuntimeController> runtime_; std::unique_ptr<blink::RuntimeController> runtime_;
sky::ViewportMetricsPtr viewport_metrics_; blink::ViewportMetrics viewport_metrics_;
mozart::ViewManagerPtr view_manager_; mozart::ViewManagerPtr view_manager_;
mojo::Binding<mozart::ViewListener> view_listener_binding_; mojo::Binding<mozart::ViewListener> view_listener_binding_;
......
...@@ -66,6 +66,7 @@ source_set("ui") { ...@@ -66,6 +66,7 @@ source_set("ui") {
"window/pointer_data.h", "window/pointer_data.h",
"window/pointer_data_packet.cc", "window/pointer_data_packet.cc",
"window/pointer_data_packet.h", "window/pointer_data_packet.h",
"window/viewport_metrics.h",
"window/window.cc", "window/window.cc",
"window/window.h", "window/window.h",
] ]
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_LIB_UI_WINDOW_VIEWPORT_METRICS_H_
#define FLUTTER_LIB_UI_WINDOW_VIEWPORT_METRICS_H_
#include <stdint.h>
namespace blink {
struct ViewportMetrics {
float device_pixel_ratio = 1.0;
int32_t physical_width = 0;
int32_t physical_height = 0;
int32_t physical_padding_top = 0;
int32_t physical_padding_right = 0;
int32_t physical_padding_bottom = 0;
int32_t physical_padding_left = 0;
};
} // namespace blink
#endif // FLUTTER_LIB_UI_WINDOW_VIEWPORT_METRICS_H_
...@@ -115,7 +115,7 @@ void Window::DidCreateIsolate() { ...@@ -115,7 +115,7 @@ void Window::DidCreateIsolate() {
library_.Set(DartState::Current(), Dart_LookupLibrary(ToDart("dart:ui"))); library_.Set(DartState::Current(), Dart_LookupLibrary(ToDart("dart:ui")));
} }
void Window::UpdateWindowMetrics(const sky::ViewportMetricsPtr& metrics) { void Window::UpdateWindowMetrics(const ViewportMetrics& metrics) {
tonic::DartState* dart_state = library_.dart_state().get(); tonic::DartState* dart_state = library_.dart_state().get();
if (!dart_state) if (!dart_state)
return; return;
...@@ -123,13 +123,13 @@ void Window::UpdateWindowMetrics(const sky::ViewportMetricsPtr& metrics) { ...@@ -123,13 +123,13 @@ void Window::UpdateWindowMetrics(const sky::ViewportMetricsPtr& metrics) {
DartInvokeField( DartInvokeField(
library_.value(), "_updateWindowMetrics", library_.value(), "_updateWindowMetrics",
{ {
ToDart(metrics->device_pixel_ratio), ToDart(metrics.device_pixel_ratio),
ToDart(static_cast<double>(metrics->physical_width)), ToDart(static_cast<double>(metrics.physical_width)),
ToDart(static_cast<double>(metrics->physical_height)), ToDart(static_cast<double>(metrics.physical_height)),
ToDart(static_cast<double>(metrics->physical_padding_top)), ToDart(static_cast<double>(metrics.physical_padding_top)),
ToDart(static_cast<double>(metrics->physical_padding_right)), ToDart(static_cast<double>(metrics.physical_padding_right)),
ToDart(static_cast<double>(metrics->physical_padding_bottom)), ToDart(static_cast<double>(metrics.physical_padding_bottom)),
ToDart(static_cast<double>(metrics->physical_padding_left)), ToDart(static_cast<double>(metrics.physical_padding_left)),
}); });
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "flutter/lib/ui/semantics/semantics_update.h" #include "flutter/lib/ui/semantics/semantics_update.h"
#include "flutter/lib/ui/window/platform_message.h" #include "flutter/lib/ui/window/platform_message.h"
#include "flutter/lib/ui/window/pointer_data_packet.h" #include "flutter/lib/ui/window/pointer_data_packet.h"
#include "flutter/services/engine/sky_engine.mojom.h" #include "flutter/lib/ui/window/viewport_metrics.h"
#include "lib/ftl/time/time_point.h" #include "lib/ftl/time/time_point.h"
#include "lib/tonic/dart_persistent_value.h" #include "lib/tonic/dart_persistent_value.h"
...@@ -40,7 +40,7 @@ class Window { ...@@ -40,7 +40,7 @@ class Window {
WindowClient* client() const { return client_; } WindowClient* client() const { return client_; }
void DidCreateIsolate(); void DidCreateIsolate();
void UpdateWindowMetrics(const sky::ViewportMetricsPtr& metrics); void UpdateWindowMetrics(const ViewportMetrics& metrics);
void UpdateLocale(const std::string& language_code, void UpdateLocale(const std::string& language_code,
const std::string& country_code); const std::string& country_code);
void UpdateSemanticsEnabled(bool enabled); void UpdateSemanticsEnabled(bool enabled);
......
...@@ -40,23 +40,16 @@ void RuntimeController::CreateDartController(const std::string& script_uri) { ...@@ -40,23 +40,16 @@ void RuntimeController::CreateDartController(const std::string& script_uri) {
Window* window = GetWindow(); Window* window = GetWindow();
if (viewport_metrics_)
window->UpdateWindowMetrics(viewport_metrics_); window->UpdateWindowMetrics(viewport_metrics_);
window->UpdateLocale(language_code_, country_code_); window->UpdateLocale(language_code_, country_code_);
if (semantics_enabled_) if (semantics_enabled_)
window->UpdateSemanticsEnabled(semantics_enabled_); window->UpdateSemanticsEnabled(semantics_enabled_);
} }
void RuntimeController::SetViewportMetrics( void RuntimeController::SetViewportMetrics(const ViewportMetrics& metrics) {
const sky::ViewportMetricsPtr& metrics) { viewport_metrics_ = metrics;
if (metrics) {
viewport_metrics_ = metrics->Clone();
GetWindow()->UpdateWindowMetrics(viewport_metrics_); GetWindow()->UpdateWindowMetrics(viewport_metrics_);
} else {
viewport_metrics_ = nullptr;
}
} }
void RuntimeController::SetLocale(const std::string& language_code, void RuntimeController::SetLocale(const std::string& language_code,
......
...@@ -30,7 +30,7 @@ class RuntimeController : public WindowClient, public IsolateClient { ...@@ -30,7 +30,7 @@ class RuntimeController : public WindowClient, public IsolateClient {
void CreateDartController(const std::string& script_uri); void CreateDartController(const std::string& script_uri);
DartController* dart_controller() const { return dart_controller_.get(); } DartController* dart_controller() const { return dart_controller_.get(); }
void SetViewportMetrics(const sky::ViewportMetricsPtr& metrics); void SetViewportMetrics(const ViewportMetrics& metrics);
void SetLocale(const std::string& language_code, void SetLocale(const std::string& language_code,
const std::string& country_code); const std::string& country_code);
void SetSemanticsEnabled(bool enabled); void SetSemanticsEnabled(bool enabled);
...@@ -58,7 +58,7 @@ class RuntimeController : public WindowClient, public IsolateClient { ...@@ -58,7 +58,7 @@ class RuntimeController : public WindowClient, public IsolateClient {
void DidCreateSecondaryIsolate(Dart_Isolate isolate) override; void DidCreateSecondaryIsolate(Dart_Isolate isolate) override;
RuntimeDelegate* client_; RuntimeDelegate* client_;
sky::ViewportMetricsPtr viewport_metrics_; ViewportMetrics viewport_metrics_;
std::string language_code_; std::string language_code_;
std::string country_code_; std::string country_code_;
bool semantics_enabled_ = false; bool semantics_enabled_ = false;
......
...@@ -4,21 +4,8 @@ ...@@ -4,21 +4,8 @@
module sky; module sky;
struct ViewportMetrics {
float device_pixel_ratio = 1.0;
int32 physical_width;
int32 physical_height;
int32 physical_padding_top;
int32 physical_padding_right;
int32 physical_padding_bottom;
int32 physical_padding_left;
uint32 scene_version;
};
[ServiceName="sky::SkyEngine"] [ServiceName="sky::SkyEngine"]
interface SkyEngine { interface SkyEngine {
OnViewportMetricsChanged(ViewportMetrics metrics);
RunFromFile(string main, string packages, string bundle_path); RunFromFile(string main, string packages, string bundle_path);
RunFromPrecompiledSnapshot(string bundle_path); RunFromPrecompiledSnapshot(string bundle_path);
RunFromBundle(string script_uri, string bundle_path); RunFromBundle(string script_uri, string bundle_path);
......
...@@ -125,8 +125,8 @@ void Engine::OnOutputSurfaceDestroyed(const ftl::Closure& gpu_continuation) { ...@@ -125,8 +125,8 @@ void Engine::OnOutputSurfaceDestroyed(const ftl::Closure& gpu_continuation) {
blink::Threads::Gpu()->PostTask(gpu_continuation); blink::Threads::Gpu()->PostTask(gpu_continuation);
} }
void Engine::OnViewportMetricsChanged(sky::ViewportMetricsPtr metrics) { void Engine::SetViewportMetrics(const blink::ViewportMetrics& metrics) {
viewport_metrics_ = metrics.Pass(); viewport_metrics_ = metrics;
if (runtime_) if (runtime_)
runtime_->SetViewportMetrics(viewport_metrics_); runtime_->SetViewportMetrics(viewport_metrics_);
} }
...@@ -341,15 +341,12 @@ void Engine::ScheduleFrame() { ...@@ -341,15 +341,12 @@ void Engine::ScheduleFrame() {
void Engine::Render(std::unique_ptr<flow::LayerTree> layer_tree) { void Engine::Render(std::unique_ptr<flow::LayerTree> layer_tree) {
if (!layer_tree) if (!layer_tree)
return; return;
if (!viewport_metrics_)
return;
SkISize frame_size = SkISize::Make(viewport_metrics_->physical_width, SkISize frame_size = SkISize::Make(viewport_metrics_.physical_width,
viewport_metrics_->physical_height); viewport_metrics_.physical_height);
if (frame_size.isEmpty()) if (frame_size.isEmpty())
return; return;
layer_tree->set_scene_version(viewport_metrics_->scene_version);
layer_tree->set_frame_size(frame_size); layer_tree->set_frame_size(frame_size);
animator_->Render(std::move(layer_tree)); animator_->Render(std::move(layer_tree));
} }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "flutter/assets/zip_asset_store.h" #include "flutter/assets/zip_asset_store.h"
#include "flutter/glue/drain_data_pipe_job.h" #include "flutter/glue/drain_data_pipe_job.h"
#include "flutter/lib/ui/window/platform_message.h" #include "flutter/lib/ui/window/platform_message.h"
#include "flutter/lib/ui/window/viewport_metrics.h"
#include "flutter/runtime/runtime_controller.h" #include "flutter/runtime/runtime_controller.h"
#include "flutter/runtime/runtime_delegate.h" #include "flutter/runtime/runtime_delegate.h"
#include "flutter/services/engine/sky_engine.mojom.h" #include "flutter/services/engine/sky_engine.mojom.h"
...@@ -56,6 +57,7 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate { ...@@ -56,6 +57,7 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate {
void ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request); void ConnectToEngine(mojo::InterfaceRequest<SkyEngine> request);
void OnOutputSurfaceCreated(const ftl::Closure& gpu_continuation); void OnOutputSurfaceCreated(const ftl::Closure& gpu_continuation);
void OnOutputSurfaceDestroyed(const ftl::Closure& gpu_continuation); void OnOutputSurfaceDestroyed(const ftl::Closure& gpu_continuation);
void SetViewportMetrics(const blink::ViewportMetrics& metrics);
void DispatchPlatformMessage(ftl::RefPtr<blink::PlatformMessage> message); void DispatchPlatformMessage(ftl::RefPtr<blink::PlatformMessage> message);
void DispatchPointerDataPacket(const PointerDataPacket& packet); void DispatchPointerDataPacket(const PointerDataPacket& packet);
void DispatchSemanticsAction(int id, blink::SemanticsAction action); void DispatchSemanticsAction(int id, blink::SemanticsAction action);
...@@ -63,7 +65,6 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate { ...@@ -63,7 +65,6 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate {
private: private:
// SkyEngine implementation: // SkyEngine implementation:
void OnViewportMetricsChanged(sky::ViewportMetricsPtr metrics) override;
void RunFromFile(const mojo::String& main, void RunFromFile(const mojo::String& main,
const mojo::String& packages, const mojo::String& packages,
const mojo::String& bundle) override; const mojo::String& bundle) override;
...@@ -109,7 +110,7 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate { ...@@ -109,7 +110,7 @@ class Engine : public sky::SkyEngine, public blink::RuntimeDelegate {
std::unique_ptr<glue::DrainDataPipeJob> snapshot_drainer_; std::unique_ptr<glue::DrainDataPipeJob> snapshot_drainer_;
ftl::RefPtr<blink::PlatformMessage> pending_push_route_message_; ftl::RefPtr<blink::PlatformMessage> pending_push_route_message_;
sky::ViewportMetricsPtr viewport_metrics_; blink::ViewportMetrics viewport_metrics_;
std::string language_code_; std::string language_code_;
std::string country_code_; std::string country_code_;
bool semantics_enabled_ = false; bool semantics_enabled_ = false;
......
...@@ -44,7 +44,6 @@ import org.chromium.mojo.system.MojoException; ...@@ -44,7 +44,6 @@ import org.chromium.mojo.system.MojoException;
import org.chromium.mojo.system.Pair; import org.chromium.mojo.system.Pair;
import org.chromium.mojo.system.impl.CoreImpl; import org.chromium.mojo.system.impl.CoreImpl;
import org.chromium.mojom.sky.SkyEngine; import org.chromium.mojom.sky.SkyEngine;
import org.chromium.mojom.sky.ViewportMetrics;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
...@@ -69,6 +68,16 @@ public class FlutterView extends SurfaceView ...@@ -69,6 +68,16 @@ public class FlutterView extends SurfaceView
private static final String ACTION_DISCOVER = "io.flutter.view.DISCOVER"; private static final String ACTION_DISCOVER = "io.flutter.view.DISCOVER";
class ViewportMetrics {
float devicePixelRatio = 1.0f;
int physicalWidth = 0;
int physicalHeight = 0;
int physicalPaddingTop = 0;
int physicalPaddingRight = 0;
int physicalPaddingBottom = 0;
int physicalPaddingLeft = 0;
}
private long mNativePlatformView; private long mNativePlatformView;
private TextInputPlugin mTextInputPlugin; private TextInputPlugin mTextInputPlugin;
...@@ -433,7 +442,7 @@ public class FlutterView extends SurfaceView ...@@ -433,7 +442,7 @@ public class FlutterView extends SurfaceView
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) { protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
mMetrics.physicalWidth = width; mMetrics.physicalWidth = width;
mMetrics.physicalHeight = height; mMetrics.physicalHeight = height;
mSkyEngine.onViewportMetricsChanged(mMetrics); updateViewportMetrics();
super.onSizeChanged(width, height, oldWidth, oldHeight); super.onSizeChanged(width, height, oldWidth, oldHeight);
} }
...@@ -443,7 +452,7 @@ public class FlutterView extends SurfaceView ...@@ -443,7 +452,7 @@ public class FlutterView extends SurfaceView
mMetrics.physicalPaddingRight = insets.getSystemWindowInsetRight(); mMetrics.physicalPaddingRight = insets.getSystemWindowInsetRight();
mMetrics.physicalPaddingBottom = insets.getSystemWindowInsetBottom(); mMetrics.physicalPaddingBottom = insets.getSystemWindowInsetBottom();
mMetrics.physicalPaddingLeft = insets.getSystemWindowInsetLeft(); mMetrics.physicalPaddingLeft = insets.getSystemWindowInsetLeft();
mSkyEngine.onViewportMetricsChanged(mMetrics); updateViewportMetrics();
return super.onApplyWindowInsets(insets); return super.onApplyWindowInsets(insets);
} }
...@@ -525,6 +534,14 @@ public class FlutterView extends SurfaceView ...@@ -525,6 +534,14 @@ public class FlutterView extends SurfaceView
int width, int width,
int height); int height);
private static native void nativeSurfaceDestroyed(long nativePlatformViewAndroid); private static native void nativeSurfaceDestroyed(long nativePlatformViewAndroid);
private static native void nativeSetViewportMetrics(long nativePlatformViewAndroid,
float devicePixelRatio,
int physicalWidth,
int physicalHeight,
int physicalPaddingTop,
int physicalPaddingRight,
int physicalPaddingBottom,
int physicalPaddingLeft);
private static native Bitmap nativeGetBitmap(long nativePlatformViewAndroid); private static native Bitmap nativeGetBitmap(long nativePlatformViewAndroid);
// Send a platform message to Dart. // Send a platform message to Dart.
...@@ -536,6 +553,17 @@ public class FlutterView extends SurfaceView ...@@ -536,6 +553,17 @@ public class FlutterView extends SurfaceView
// Send a response to a platform message received from Dart. // Send a response to a platform message received from Dart.
private static native void nativeInvokePlatformMessageResponseCallback(long nativePlatformViewAndroid, int responseId, String message); private static native void nativeInvokePlatformMessageResponseCallback(long nativePlatformViewAndroid, int responseId, String message);
private void updateViewportMetrics() {
nativeSetViewportMetrics(mNativePlatformView,
mMetrics.devicePixelRatio,
mMetrics.physicalWidth,
mMetrics.physicalHeight,
mMetrics.physicalPaddingTop,
mMetrics.physicalPaddingRight,
mMetrics.physicalPaddingBottom,
mMetrics.physicalPaddingLeft);
}
// Called by native to send us a platform message. // Called by native to send us a platform message.
@CalledByNative @CalledByNative
private void handlePlatformMessage(String channel, String message, final int responseId) { private void handlePlatformMessage(String channel, String message, final int responseId) {
......
...@@ -138,6 +138,30 @@ void PlatformViewAndroid::SurfaceDestroyed(JNIEnv* env, jobject obj) { ...@@ -138,6 +138,30 @@ void PlatformViewAndroid::SurfaceDestroyed(JNIEnv* env, jobject obj) {
ReleaseSurface(); ReleaseSurface();
} }
void PlatformViewAndroid::SetViewportMetrics(JNIEnv* env,
jobject obj,
jfloat device_pixel_ratio,
jint physical_width,
jint physical_height,
jint physical_padding_top,
jint physical_padding_right,
jint physical_padding_bottom,
jint physical_padding_left) {
blink::ViewportMetrics metrics;
metrics.device_pixel_ratio = device_pixel_ratio;
metrics.physical_width = physical_width;
metrics.physical_height = physical_height;
metrics.physical_padding_top = physical_padding_top;
metrics.physical_padding_right = physical_padding_right;
metrics.physical_padding_bottom = physical_padding_bottom;
metrics.physical_padding_left = physical_padding_left;
blink::Threads::UI()->PostTask([ engine = engine_->GetWeakPtr(), metrics ] {
if (engine.get())
engine->SetViewportMetrics(metrics);
});
}
void PlatformViewAndroid::DispatchPlatformMessage(JNIEnv* env, void PlatformViewAndroid::DispatchPlatformMessage(JNIEnv* env,
jobject obj, jobject obj,
jstring java_name, jstring java_name,
......
...@@ -37,6 +37,16 @@ class PlatformViewAndroid : public PlatformView { ...@@ -37,6 +37,16 @@ class PlatformViewAndroid : public PlatformView {
void SurfaceDestroyed(JNIEnv* env, jobject obj); void SurfaceDestroyed(JNIEnv* env, jobject obj);
void SetViewportMetrics(JNIEnv* env,
jobject obj,
jfloat device_pixel_ratio,
jint physical_width,
jint physical_height,
jint physical_padding_top,
jint physical_padding_right,
jint physical_padding_bottom,
jint physical_padding_left);
void DispatchPlatformMessage(JNIEnv* env, void DispatchPlatformMessage(JNIEnv* env,
jobject obj, jobject obj,
jstring name, jstring name,
......
...@@ -75,13 +75,17 @@ static inline blink::PointerData::Change PointerChangeFromNSEventPhase( ...@@ -75,13 +75,17 @@ static inline blink::PointerData::Change PointerChangeFromNSEventPhase(
- (void)updateWindowSize { - (void)updateWindowSize {
[self setupSurfaceIfNecessary]; [self setupSurfaceIfNecessary];
auto metrics = sky::ViewportMetrics::New(); blink::ViewportMetrics metrics;
auto size = self.renderSurface.frame.size; auto size = self.renderSurface.frame.size;
metrics->physical_width = size.width; metrics.physical_width = size.width;
metrics->physical_height = size.height; metrics.physical_height = size.height;
metrics->device_pixel_ratio = 1.0;
_platformView->engineProxy()->OnViewportMetricsChanged(metrics.Pass()); blink::Threads::UI()->PostTask(
[ engine = _platformView->engine().GetWeakPtr(), metrics ] {
if (engine.get()) {
engine->SetViewportMetrics(metrics);
}
});
} }
- (void)setupSurfaceIfNecessary { - (void)setupSurfaceIfNecessary {
......
...@@ -65,7 +65,7 @@ void FlutterInit(int argc, const char* argv[]) { ...@@ -65,7 +65,7 @@ void FlutterInit(int argc, const char* argv[]) {
base::scoped_nsprotocol<FlutterDartProject*> _dartProject; base::scoped_nsprotocol<FlutterDartProject*> _dartProject;
UIInterfaceOrientationMask _orientationPreferences; UIInterfaceOrientationMask _orientationPreferences;
UIStatusBarStyle _statusBarStyle; UIStatusBarStyle _statusBarStyle;
sky::ViewportMetricsPtr _viewportMetrics; blink::ViewportMetrics _viewportMetrics;
shell::TouchMapper _touchMapper; shell::TouchMapper _touchMapper;
std::unique_ptr<shell::PlatformViewIOS> _platformView; std::unique_ptr<shell::PlatformViewIOS> _platformView;
base::scoped_nsprotocol<FlutterPlatformPlugin*> _platformPlugin; base::scoped_nsprotocol<FlutterPlatformPlugin*> _platformPlugin;
...@@ -112,7 +112,6 @@ void FlutterInit(int argc, const char* argv[]) { ...@@ -112,7 +112,6 @@ void FlutterInit(int argc, const char* argv[]) {
_orientationPreferences = UIInterfaceOrientationMaskAll; _orientationPreferences = UIInterfaceOrientationMaskAll;
_statusBarStyle = UIStatusBarStyleDefault; _statusBarStyle = UIStatusBarStyleDefault;
_viewportMetrics = sky::ViewportMetrics::New();
_platformView = std::make_unique<shell::PlatformViewIOS>( _platformView = std::make_unique<shell::PlatformViewIOS>(
reinterpret_cast<CAEAGLLayer*>(self.view.layer)); reinterpret_cast<CAEAGLLayer*>(self.view.layer));
_platformView->SetupResourceContextOnIOThread(); _platformView->SetupResourceContextOnIOThread();
...@@ -329,18 +328,25 @@ static inline PointerChangeMapperPhase PointerChangePhaseFromUITouchPhase( ...@@ -329,18 +328,25 @@ static inline PointerChangeMapperPhase PointerChangePhaseFromUITouchPhase(
#pragma mark - Handle view resizing #pragma mark - Handle view resizing
- (void)updateViewportMetrics {
blink::Threads::UI()->PostTask([
engine = _platformView->engine().GetWeakPtr(), metrics = _viewportMetrics
] {
if (engine.get())
engine->SetViewportMetrics(metrics);
});
}
- (void)viewDidLayoutSubviews { - (void)viewDidLayoutSubviews {
CGSize size = self.view.bounds.size; CGSize size = self.view.bounds.size;
CGFloat scale = [UIScreen mainScreen].scale; CGFloat scale = [UIScreen mainScreen].scale;
_viewportMetrics->device_pixel_ratio = scale; _viewportMetrics.device_pixel_ratio = scale;
_viewportMetrics->physical_width = size.width * scale; _viewportMetrics.physical_width = size.width * scale;
_viewportMetrics->physical_height = size.height * scale; _viewportMetrics.physical_height = size.height * scale;
_viewportMetrics->physical_padding_top = _viewportMetrics.physical_padding_top =
[UIApplication sharedApplication].statusBarFrame.size.height * scale; [UIApplication sharedApplication].statusBarFrame.size.height * scale;
[self updateViewportMetrics];
_platformView->engineProxy()->OnViewportMetricsChanged(
_viewportMetrics.Clone());
} }
#pragma mark - Keyboard events #pragma mark - Keyboard events
...@@ -350,15 +356,13 @@ static inline PointerChangeMapperPhase PointerChangePhaseFromUITouchPhase( ...@@ -350,15 +356,13 @@ static inline PointerChangeMapperPhase PointerChangePhaseFromUITouchPhase(
CGFloat bottom = CGRectGetHeight( CGFloat bottom = CGRectGetHeight(
[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]); [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]);
CGFloat scale = [UIScreen mainScreen].scale; CGFloat scale = [UIScreen mainScreen].scale;
_viewportMetrics->physical_padding_bottom = bottom * scale; _viewportMetrics.physical_padding_bottom = bottom * scale;
_platformView->engineProxy()->OnViewportMetricsChanged( [self updateViewportMetrics];
_viewportMetrics.Clone());
} }
- (void)keyboardWillBeHidden:(NSNotification*)notification { - (void)keyboardWillBeHidden:(NSNotification*)notification {
_viewportMetrics->physical_padding_bottom = 0.0; _viewportMetrics.physical_padding_bottom = 0;
_platformView->engineProxy()->OnViewportMetricsChanged( [self updateViewportMetrics];
_viewportMetrics.Clone());
} }
#pragma mark - Text input delegate #pragma mark - Text input delegate
......
...@@ -102,11 +102,14 @@ void PlatformViewGLFW::RunFromSource(const std::string& main, ...@@ -102,11 +102,14 @@ void PlatformViewGLFW::RunFromSource(const std::string& main,
const std::string& assets_directory) {} const std::string& assets_directory) {}
void PlatformViewGLFW::OnWindowSizeChanged(int width, int height) { void PlatformViewGLFW::OnWindowSizeChanged(int width, int height) {
auto metrics = sky::ViewportMetrics::New(); blink::ViewportMetrics metrics;
metrics->physical_width = width; metrics.physical_width = width;
metrics->physical_height = height; metrics.physical_height = height;
metrics->device_pixel_ratio = 1.0;
engine_->OnViewportMetricsChanged(metrics.Pass()); blink::Threads::UI()->PostTask([ engine = engine().GetWeakPtr(), metrics ] {
if (engine.get())
engine->SetViewportMetrics(metrics);
});
} }
void PlatformViewGLFW::OnMouseButtonChanged(int button, int action, int mods) { void PlatformViewGLFW::OnMouseButtonChanged(int button, int action, int mods) {
......
...@@ -13,9 +13,10 @@ source_set("testing") { ...@@ -13,9 +13,10 @@ source_set("testing") {
] ]
deps = [ deps = [
"../common",
"//base", "//base",
"//flutter/common",
"//flutter/services/engine:interfaces", "//flutter/services/engine:interfaces",
"//flutter/shell/common",
"//flutter/skia", "//flutter/skia",
"//lib/ftl", "//lib/ftl",
"//mojo/public/cpp/bindings", "//mojo/public/cpp/bindings",
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
#include <iostream> #include <iostream>
#include "base/message_loop/message_loop.h" #include "flutter/common/threads.h"
#include "base/strings/string_util.h"
#include "flutter/shell/common/platform_view.h" #include "flutter/shell/common/platform_view.h"
#include "flutter/shell/common/shell.h" #include "flutter/shell/common/shell.h"
#include "flutter/shell/testing/platform_view_test.h" #include "flutter/shell/testing/platform_view_test.h"
...@@ -18,12 +17,15 @@ TestRunner::TestRunner() ...@@ -18,12 +17,15 @@ TestRunner::TestRunner()
: platform_view_(new PlatformViewTest()), weak_ptr_factory_(this) { : platform_view_(new PlatformViewTest()), weak_ptr_factory_(this) {
platform_view_->ConnectToEngine(GetProxy(&sky_engine_)); platform_view_->ConnectToEngine(GetProxy(&sky_engine_));
sky::ViewportMetricsPtr metrics = sky::ViewportMetrics::New(); blink::ViewportMetrics metrics;
metrics.physical_width = 800;
metrics.physical_height = 600;
metrics->physical_width = 800; blink::Threads::UI()->PostTask(
metrics->physical_height = 600; [ engine = platform_view_->engine().GetWeakPtr(), metrics ] {
if (engine.get())
sky_engine_->OnViewportMetricsChanged(metrics.Pass()); engine->SetViewportMetrics(metrics);
});
} }
TestRunner::~TestRunner() = default; TestRunner::~TestRunner() = default;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "flutter/services/engine/sky_engine.mojom.h" #include "flutter/services/engine/sky_engine.mojom.h"
#include "lib/ftl/macros.h" #include "lib/ftl/macros.h"
#include "lib/ftl/memory/weak_ptr.h" #include "lib/ftl/memory/weak_ptr.h"
#include "mojo/public/cpp/bindings/binding_set.h"
namespace shell { namespace shell {
...@@ -34,6 +33,7 @@ class TestRunner { ...@@ -34,6 +33,7 @@ class TestRunner {
std::unique_ptr<PlatformView> platform_view_; std::unique_ptr<PlatformView> platform_view_;
sky::SkyEnginePtr sky_engine_; sky::SkyEnginePtr sky_engine_;
ftl::WeakPtrFactory<TestRunner> weak_ptr_factory_; ftl::WeakPtrFactory<TestRunner> weak_ptr_factory_;
FTL_DISALLOW_COPY_AND_ASSIGN(TestRunner); FTL_DISALLOW_COPY_AND_ASSIGN(TestRunner);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册