22
22
#include " flutter/shell/platform/windows/flutter_window.h"
23
23
#include " flutter/shell/platform/windows/flutter_windows_engine.h"
24
24
#include " flutter/shell/platform/windows/flutter_windows_view.h"
25
+ #include " flutter/shell/platform/windows/flutter_windows_view_controller.h"
25
26
#include " flutter/shell/platform/windows/window_binding_handler.h"
26
27
#include " flutter/shell/platform/windows/window_state.h"
27
28
@@ -39,6 +40,16 @@ static FlutterDesktopEngineRef HandleForEngine(
39
40
return reinterpret_cast <FlutterDesktopEngineRef>(engine);
40
41
}
41
42
43
+ static flutter::FlutterWindowsViewController* ViewControllerFromHandle (
44
+ FlutterDesktopViewControllerRef ref) {
45
+ return reinterpret_cast <flutter::FlutterWindowsViewController*>(ref);
46
+ }
47
+
48
+ static FlutterDesktopViewControllerRef HandleForViewController (
49
+ flutter::FlutterWindowsViewController* view_controller) {
50
+ return reinterpret_cast <FlutterDesktopViewControllerRef>(view_controller);
51
+ }
52
+
42
53
// Returns the view corresponding to the given opaque API handle.
43
54
static flutter::FlutterWindowsView* ViewFromHandle (FlutterDesktopViewRef ref) {
44
55
return reinterpret_cast <flutter::FlutterWindowsView*>(ref);
@@ -64,58 +75,65 @@ static FlutterDesktopTextureRegistrarRef HandleForTextureRegistrar(
64
75
FlutterDesktopViewControllerRef FlutterDesktopViewControllerCreate (
65
76
int width,
66
77
int height,
67
- FlutterDesktopEngineRef engine ) {
78
+ FlutterDesktopEngineRef engine_ref ) {
68
79
std::unique_ptr<flutter::WindowBindingHandler> window_wrapper =
69
80
std::make_unique<flutter::FlutterWindow>(width, height);
70
81
71
- auto state = std::make_unique<FlutterDesktopViewControllerState>();
72
- state->view =
82
+ auto engine = std::unique_ptr<flutter::FlutterWindowsEngine>(
83
+ EngineFromHandle (engine_ref));
84
+ auto view =
73
85
std::make_unique<flutter::FlutterWindowsView>(std::move (window_wrapper));
74
- // Take ownership of the engine, starting it if necessary.
75
- state->view ->SetEngine (
76
- std::unique_ptr<flutter::FlutterWindowsEngine>(EngineFromHandle (engine)));
77
- state->view ->CreateRenderSurface ();
78
- if (!state->view ->GetEngine ()->running ()) {
79
- if (!state->view ->GetEngine ()->Run ()) {
86
+ auto controller = std::make_unique<flutter::FlutterWindowsViewController>(
87
+ std::move (engine), std::move (view));
88
+
89
+ controller->view ()->SetEngine (controller->engine ());
90
+ controller->view ()->CreateRenderSurface ();
91
+ if (!controller->engine ()->running ()) {
92
+ if (!controller->engine ()->Run ()) {
80
93
return nullptr ;
81
94
}
82
95
}
83
96
84
97
// Must happen after engine is running.
85
- state->view ->SendInitialBounds ();
86
- state->view ->SendInitialAccessibilityFeatures ();
87
- return state.release ();
98
+ controller->view ()->SendInitialBounds ();
99
+ controller->view ()->SendInitialAccessibilityFeatures ();
100
+
101
+ return HandleForViewController (controller.release ());
88
102
}
89
103
90
- void FlutterDesktopViewControllerDestroy (
91
- FlutterDesktopViewControllerRef controller) {
104
+ void FlutterDesktopViewControllerDestroy (FlutterDesktopViewControllerRef ref) {
105
+ auto controller = ViewControllerFromHandle (ref);
92
106
delete controller;
93
107
}
94
108
95
109
FlutterDesktopEngineRef FlutterDesktopViewControllerGetEngine (
96
- FlutterDesktopViewControllerRef controller) {
97
- return HandleForEngine (controller->view ->GetEngine ());
110
+ FlutterDesktopViewControllerRef ref) {
111
+ auto controller = ViewControllerFromHandle (ref);
112
+ return HandleForEngine (controller->engine ());
98
113
}
99
114
100
115
FlutterDesktopViewRef FlutterDesktopViewControllerGetView (
101
- FlutterDesktopViewControllerRef controller) {
102
- return HandleForView (controller->view .get ());
116
+ FlutterDesktopViewControllerRef ref) {
117
+ auto controller = ViewControllerFromHandle (ref);
118
+ return HandleForView (controller->view ());
103
119
}
104
120
105
121
void FlutterDesktopViewControllerForceRedraw (
106
- FlutterDesktopViewControllerRef controller) {
107
- controller->view ->ForceRedraw ();
122
+ FlutterDesktopViewControllerRef ref) {
123
+ auto controller = ViewControllerFromHandle (ref);
124
+ controller->view ()->ForceRedraw ();
108
125
}
109
126
110
127
bool FlutterDesktopViewControllerHandleTopLevelWindowProc (
111
- FlutterDesktopViewControllerRef controller ,
128
+ FlutterDesktopViewControllerRef ref ,
112
129
HWND hwnd,
113
130
UINT message,
114
131
WPARAM wparam,
115
132
LPARAM lparam,
116
133
LRESULT* result) {
134
+ auto controller = ViewControllerFromHandle (ref);
117
135
std::optional<LRESULT> delegate_result =
118
- controller->view -> GetEngine ()
136
+ controller->engine ()
119
137
->window_proc_delegate_manager ()
120
138
->OnTopLevelWindowProc (hwnd, message, wparam, lparam);
121
139
if (delegate_result) {
0 commit comments