• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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