Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Window.cpp
Go to the documentation of this file.
1/*
2* Copyright 2016 Google Inc.
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
9
13
14#if defined(SK_GANESH)
17#endif
18
19namespace sk_app {
20
22
24
25void Window::detach() { fWindowContext = nullptr; }
26
27void Window::visitLayers(const std::function<void(Layer*)>& visitor) {
28 for (int i = 0; i < fLayers.size(); ++i) {
29 if (fLayers[i]->fActive) {
30 visitor(fLayers[i]);
31 }
32 }
33}
34
35bool Window::signalLayers(const std::function<bool(Layer*)>& visitor) {
36 for (int i = fLayers.size() - 1; i >= 0; --i) {
37 if (fLayers[i]->fActive && visitor(fLayers[i])) {
38 return true;
39 }
40 }
41 return false;
42}
43
45 this->visitLayers([](Layer* layer) { layer->onBackendCreated(); });
46}
47
49 return this->signalLayers([=](Layer* layer) { return layer->onChar(c, modifiers); });
50}
51
53 return this->signalLayers([=](Layer* layer) { return layer->onKey(key, state, modifiers); });
54}
55
57 return this->signalLayers([=](Layer* layer) { return layer->onMouse(x, y, state, modifiers); });
58}
59
60bool Window::onMouseWheel(float delta, int x, int y, skui::ModifierKey modifiers) {
61 return this->signalLayers(
62 [=](Layer* layer) { return layer->onMouseWheel(delta, x, y, modifiers); });
63}
64
65bool Window::onTouch(intptr_t owner, skui::InputState state, float x, float y) {
66 return this->signalLayers([=](Layer* layer) { return layer->onTouch(owner, state, x, y); });
67}
68
70 return this->signalLayers([=](Layer* layer) { return layer->onFling(state); });
71}
72
73bool Window::onPinch(skui::InputState state, float scale, float x, float y) {
74 return this->signalLayers([=](Layer* layer) { return layer->onPinch(state, scale, x, y); });
75}
76
77void Window::onUIStateChanged(const SkString& stateName, const SkString& stateValue) {
78 this->visitLayers([=](Layer* layer) { layer->onUIStateChanged(stateName, stateValue); });
79}
80
82 if (!fWindowContext) {
83 return;
84 }
85 if (!fIsActive) {
86 return;
87 }
88 sk_sp<SkSurface> backbuffer = fWindowContext->getBackbufferSurface();
89 if (backbuffer == nullptr) {
90 printf("no backbuffer!?\n");
91 // TODO: try recreating testcontext
92 return;
93 }
94
96
97 // draw into the canvas of this surface
98 this->visitLayers([](Layer* layer) { layer->onPrePaint(); });
99 this->visitLayers([=](Layer* layer) { layer->onPaint(backbuffer.get()); });
100
101 if (auto dContext = this->directContext()) {
102 dContext->flushAndSubmit(backbuffer.get(), GrSyncCpu::kNo);
103 }
104
105 fWindowContext->swapBuffers();
106}
107
108void Window::onResize(int w, int h) {
109 if (!fWindowContext) {
110 return;
111 }
112 fWindowContext->resize(w, h);
113 this->visitLayers([=](Layer* layer) { layer->onResize(w, h); });
114}
115
116void Window::onActivate(bool isActive) {
117 if (fWindowContext) {
118 fWindowContext->activate(isActive);
119 }
120 fIsActive = isActive;
121}
122
123int Window::width() const {
124 if (!fWindowContext) {
125 return 0;
126 }
127 return fWindowContext->width();
128}
129
130int Window::height() const {
131 if (!fWindowContext) {
132 return 0;
133 }
134 return fWindowContext->height();
135}
136
137void Window::setRequestedDisplayParams(const DisplayParams& params, bool /* allowReattach */) {
139 if (fWindowContext) {
140 fWindowContext->setDisplayParams(fRequestedDisplayParams);
141 }
142}
143
145 if (!fWindowContext) {
146 return 0;
147 }
148 return fWindowContext->sampleCount();
149}
150
152 if (!fWindowContext) {
153 return -1;
154 }
155 return fWindowContext->stencilBits();
156}
157
159 if (!fWindowContext) {
160 return nullptr;
161 }
162 return fWindowContext->directContext();
163}
164
166#if defined(SK_GRAPHITE)
167 if (!fWindowContext) {
168 return nullptr;
169 }
170 return fWindowContext->graphiteContext();
171#else
172 return nullptr;
173#endif
174}
175
177#if defined(SK_GRAPHITE)
178 if (!fWindowContext) {
179 return nullptr;
180 }
181 return fWindowContext->graphiteRecorder();
182#else
183 return nullptr;
184#endif
185}
186
188 if (!fWindowContext) {
189 return;
190 }
193 onInval();
194 }
195}
196
200
201} // namespace sk_app
int32_t SkUnichar
Definition SkTypes.h:175
virtual void onUIStateChanged(const SkString &stateName, const SkString &stateValue)
Definition Window.h:122
virtual bool onChar(SkUnichar c, skui::ModifierKey)
Definition Window.h:114
virtual bool onMouseWheel(float delta, int x, int y, skui::ModifierKey)
Definition Window.h:117
virtual bool onPinch(skui::InputState state, float scale, float x, float y)
Definition Window.h:121
virtual bool onFling(skui::InputState state)
Definition Window.h:120
virtual bool onTouch(intptr_t owner, skui::InputState, float x, float y)
Definition Window.h:118
virtual bool onKey(skui::Key, skui::InputState, skui::ModifierKey)
Definition Window.h:115
virtual void onResize(int width, int height)
Definition Window.h:125
virtual bool onMouse(int x, int y, skui::InputState, skui::ModifierKey)
Definition Window.h:116
virtual void onBackendCreated()
Definition Window.h:112
virtual void onPrePaint()
Definition Window.h:123
virtual void onPaint(SkSurface *)
Definition Window.h:124
bool onKey(skui::Key key, skui::InputState state, skui::ModifierKey modifiers)
Definition Window.cpp:52
void visitLayers(const std::function< void(Layer *)> &visitor)
Definition Window.cpp:27
bool onTouch(intptr_t owner, skui::InputState state, float x, float y)
Definition Window.cpp:65
virtual ~Window()
Definition Window.cpp:23
skgpu::graphite::Context * graphiteContext() const
Definition Window.cpp:165
int stencilBits() const
Definition Window.cpp:151
bool onChar(SkUnichar c, skui::ModifierKey modifiers)
Definition Window.cpp:48
void onUIStateChanged(const SkString &stateName, const SkString &stateValue)
Definition Window.cpp:77
void detach()
Definition Window.cpp:25
virtual void setRequestedDisplayParams(const DisplayParams &, bool allowReattach=true)
Definition Window.cpp:137
int height() const
Definition Window.cpp:130
bool onMouseWheel(float delta, int x, int y, skui::ModifierKey modifiers)
Definition Window.cpp:60
bool onFling(skui::InputState state)
Definition Window.cpp:69
bool signalLayers(const std::function< bool(Layer *)> &visitor)
Definition Window.cpp:35
void markInvalProcessed()
Definition Window.cpp:197
GrDirectContext * directContext() const
Definition Window.cpp:158
void onActivate(bool isActive)
Definition Window.cpp:116
bool fIsContentInvalidated
Definition Window.h:181
DisplayParams fRequestedDisplayParams
Definition Window.h:171
bool onPinch(skui::InputState state, float scale, float x, float y)
Definition Window.cpp:73
void onResize(int width, int height)
Definition Window.cpp:108
std::unique_ptr< skwindow::WindowContext > fWindowContext
Definition Window.h:174
bool onMouse(int x, int y, skui::InputState state, skui::ModifierKey modifiers)
Definition Window.cpp:56
int sampleCount() const
Definition Window.cpp:144
bool fIsActive
Definition Window.h:172
virtual void onInval()=0
SkTDArray< Layer * > fLayers
Definition Window.h:170
int width() const
Definition Window.cpp:123
void onPaint()
Definition Window.cpp:81
skgpu::graphite::Recorder * graphiteRecorder() const
Definition Window.cpp:176
void onBackendCreated()
Definition Window.cpp:44
T * get() const
Definition SkRefCnt.h:303
const EmbeddedViewParams * params
AtkStateType state
double y
double x
InputState
Definition InputState.h:6
ModifierKey
Definition ModifierKey.h:9
Key
Definition Key.h:6
SkScalar w
SkScalar h
const Scalar scale