1 // Copyright 2013 The Flutter Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef FLUTTER_LIB_UI_WINDOW_WINDOW_H_ 6 #define FLUTTER_LIB_UI_WINDOW_WINDOW_H_ 7 8 #include <string> 9 #include <unordered_map> 10 #include <vector> 11 12 #include "flutter/fml/time/time_point.h" 13 #include "flutter/lib/ui/window/pointer_data_packet.h" 14 #include "flutter/lib/ui/window/viewport_metrics.h" 15 #include "flutter/lib/ui/window/platform_message.h" 16 17 namespace flutter { 18 class FontCollection; 19 class Scene; 20 21 class WindowClient { 22 public: 23 virtual std::string DefaultRouteName() = 0; 24 virtual void ScheduleFrame() = 0; 25 virtual void Render(Scene* scene) = 0; 26 virtual void HandlePlatformMessage(fml::RefPtr<PlatformMessage> message) = 0; 27 virtual FontCollection& GetFontCollection() = 0; 28 virtual void SetNeedsReportTimings(bool value) = 0; 29 30 protected: 31 virtual ~WindowClient() = default; 32 }; 33 34 class Window final { 35 public: 36 explicit Window(WindowClient* client); 37 38 ~Window() = default; 39 client()40 WindowClient* client() const { return client_; } 41 viewport_metrics()42 const ViewportMetrics& viewport_metrics() { return viewport_metrics_; } 43 44 void DidCreateIsolate(); 45 void UpdateWindowMetrics(const ViewportMetrics& metrics); 46 void UpdateUserSettingsData(const std::string& data); 47 void DispatchPointerDataPacket(const PointerDataPacket& packet); 48 void BeginFrame(fml::TimePoint frameTime); 49 void ReportTimings(std::vector<int64_t> timings); 50 51 // adapters to platform window 52 using BeginFrameCallback = std::function<void(uint64_t)>; 53 void ScheduleFrame(); HasBeginFrameCallback()54 bool HasBeginFrameCallback() { return begin_frame_callback_ != nullptr; } SetBeginFrameCallback(const BeginFrameCallback & callback)55 void SetBeginFrameCallback(const BeginFrameCallback& callback) { 56 begin_frame_callback_ = callback; 57 } 58 59 private: 60 WindowClient* client_; 61 ViewportMetrics viewport_metrics_; 62 BeginFrameCallback begin_frame_callback_; 63 }; 64 65 } // namespace flutter 66 67 #endif // FLUTTER_LIB_UI_WINDOW_WINDOW_H_ 68