Skip to content

Commit 2315735

Browse files
committed
Add FlutterDesktopWindowProperties to the public API
1 parent c4ba3de commit 2315735

11 files changed

+119
-72
lines changed

shell/platform/tizen/flutter_tizen.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,17 @@ static FlutterDesktopEngineRef HandleForEngine(
2626
}
2727

2828
FlutterDesktopEngineRef FlutterDesktopRunEngine(
29-
const FlutterDesktopEngineProperties& engine_properties,
30-
bool headed) {
29+
const FlutterDesktopWindowProperties& window_properties,
30+
const FlutterDesktopEngineProperties& engine_properties) {
3131
flutter::StartLogging();
3232

3333
flutter::FlutterProjectBundle project(engine_properties);
34-
auto engine = std::make_unique<flutter::FlutterTizenEngine>(project, headed);
34+
auto engine = std::make_unique<flutter::FlutterTizenEngine>(project);
35+
if (window_properties.headed) {
36+
engine->InitializeRenderer(window_properties.x, window_properties.y,
37+
window_properties.width,
38+
window_properties.height);
39+
}
3540
if (!engine->RunEngine()) {
3641
FT_LOGE("Failed to run the Flutter engine.");
3742
return nullptr;

shell/platform/tizen/flutter_tizen_engine.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ constexpr double kProfileFactor = 1.0;
3333

3434
} // namespace
3535

36-
FlutterTizenEngine::FlutterTizenEngine(const FlutterProjectBundle& project,
37-
bool headed)
36+
FlutterTizenEngine::FlutterTizenEngine(const FlutterProjectBundle& project)
3837
: project_(std::make_unique<FlutterProjectBundle>(project)),
3938
aot_data_(nullptr, nullptr) {
4039
embedder_api_.struct_size = sizeof(FlutterEngineProcTable);
@@ -58,19 +57,20 @@ FlutterTizenEngine::FlutterTizenEngine(const FlutterProjectBundle& project,
5857

5958
plugin_registrar_ = std::make_unique<FlutterDesktopPluginRegistrar>();
6059
plugin_registrar_->engine = this;
61-
62-
if (headed) {
63-
InitializeRenderer();
64-
}
6560
}
6661

6762
FlutterTizenEngine::~FlutterTizenEngine() {
6863
renderer = nullptr;
6964
}
7065

71-
void FlutterTizenEngine::InitializeRenderer() {
66+
void FlutterTizenEngine::InitializeRenderer(int32_t x,
67+
int32_t y,
68+
int32_t width,
69+
int32_t height) {
70+
TizenRenderer::WindowGeometry geometry = {x, y, width, height};
71+
7272
#ifdef TIZEN_RENDERER_EVAS_GL
73-
renderer = std::make_unique<TizenRendererEvasGL>(*this);
73+
renderer = std::make_unique<TizenRendererEvasGL>(geometry, *this);
7474

7575
render_loop_ = std::make_unique<TizenRenderEventLoop>(
7676
std::this_thread::get_id(), // main thread
@@ -81,7 +81,7 @@ void FlutterTizenEngine::InitializeRenderer() {
8181
},
8282
renderer.get());
8383
#else
84-
renderer = std::make_unique<TizenRendererEcoreWl2>(*this);
84+
renderer = std::make_unique<TizenRendererEcoreWl2>(geometry, *this);
8585

8686
tizen_vsync_waiter_ = std::make_unique<TizenVsyncWaiter>(this);
8787
#endif
@@ -340,7 +340,7 @@ void FlutterTizenEngine::SetWindowOrientation(int32_t degree) {
340340
renderer->SetRotate(degree);
341341
// Compute renderer transformation based on the angle of rotation.
342342
double rad = (360 - degree) * M_PI / 180;
343-
auto geometry = renderer->GetGeometry();
343+
auto geometry = renderer->GetCurrentGeometry();
344344
double width = geometry.w;
345345
double height = geometry.h;
346346

shell/platform/tizen/flutter_tizen_engine.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ namespace flutter {
5151
class FlutterTizenEngine : public TizenRenderer::Delegate {
5252
public:
5353
// Creates a new Flutter engine object configured to run |project|.
54-
explicit FlutterTizenEngine(const FlutterProjectBundle& project, bool headed);
54+
explicit FlutterTizenEngine(const FlutterProjectBundle& project);
5555

5656
virtual ~FlutterTizenEngine();
5757

@@ -60,7 +60,7 @@ class FlutterTizenEngine : public TizenRenderer::Delegate {
6060
FlutterTizenEngine& operator=(FlutterTizenEngine const&) = delete;
6161

6262
// Sets up an instance of TizenRenderer.
63-
void InitializeRenderer();
63+
void InitializeRenderer(int32_t x, int32_t y, int32_t width, int32_t height);
6464

6565
// Starts running the engine.
6666
bool RunEngine();

shell/platform/tizen/public/flutter_tizen.h

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ extern "C" {
2121
struct FlutterDesktopEngine;
2222
typedef struct FlutterDesktopEngine* FlutterDesktopEngineRef;
2323

24+
// Properties for configuring the initial settings of a Flutter window.
25+
typedef struct {
26+
// Whether the app is headed or headless. Other properties are ignored if
27+
// this value is set to false.
28+
bool headed;
29+
// The x-coordinate of the top left corner of the window.
30+
int32_t x;
31+
// The y-coordinate of the top left corner of the window.
32+
int32_t y;
33+
// The width of the window, or the maximum width if the value is zero.
34+
int32_t width;
35+
// The height of the window, or the maximum height if the value is zero.
36+
int32_t height;
37+
} FlutterDesktopWindowProperties;
38+
2439
// Properties for configuring a Flutter engine instance.
2540
typedef struct {
2641
// The path to the flutter_assets folder for the application to be run.
@@ -41,9 +56,9 @@ typedef struct {
4156
// Runs an instance of a Flutter engine with the given properties.
4257
//
4358
// If |headed| is false, the engine is run in headless mode.
44-
FLUTTER_EXPORT FlutterDesktopEngineRef
45-
FlutterDesktopRunEngine(const FlutterDesktopEngineProperties& engine_properties,
46-
bool headed);
59+
FLUTTER_EXPORT FlutterDesktopEngineRef FlutterDesktopRunEngine(
60+
const FlutterDesktopWindowProperties& window_properties,
61+
const FlutterDesktopEngineProperties& engine_properties);
4762

4863
// Shuts down the given engine instance.
4964
//

shell/platform/tizen/tizen_renderer.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
namespace flutter {
88

9-
TizenRenderer::TizenRenderer(TizenRenderer::Delegate& delegate)
10-
: delegate_(delegate) {}
9+
TizenRenderer::TizenRenderer(WindowGeometry geometry, Delegate& delegate)
10+
: initial_geometry_(geometry), delegate_(delegate) {}
1111

1212
TizenRenderer::~TizenRenderer() = default;
1313

shell/platform/tizen/tizen_renderer.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace flutter {
1212

1313
class TizenRenderer {
1414
public:
15-
struct TizenWindowGeometry {
15+
struct WindowGeometry {
1616
int32_t x{0}, y{0}, w{0}, h{0};
1717
};
1818

@@ -32,7 +32,7 @@ class TizenRenderer {
3232
virtual uint32_t OnGetFBO() = 0;
3333
virtual void* OnProcResolver(const char* name) = 0;
3434

35-
virtual TizenWindowGeometry GetGeometry() = 0;
35+
virtual WindowGeometry GetCurrentGeometry() = 0;
3636
virtual int32_t GetDpi() = 0;
3737
virtual uintptr_t GetWindowId() = 0;
3838

@@ -45,12 +45,13 @@ class TizenRenderer {
4545
virtual void SetPreferredOrientations(const std::vector<int>& rotations) = 0;
4646

4747
protected:
48-
explicit TizenRenderer(TizenRenderer::Delegate& delegate);
48+
explicit TizenRenderer(WindowGeometry geometry, Delegate& delegate);
4949

50-
bool is_valid_ = false;
50+
WindowGeometry initial_geometry_;
51+
Delegate& delegate_;
5152

52-
bool received_rotation_{false};
53-
TizenRenderer::Delegate& delegate_;
53+
bool is_valid_ = false;
54+
bool received_rotation_ = false;
5455
};
5556

5657
} // namespace flutter

shell/platform/tizen/tizen_renderer_ecore_wl2.cc

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111

1212
namespace flutter {
1313

14-
TizenRendererEcoreWl2::TizenRendererEcoreWl2(TizenRenderer::Delegate& delegate)
15-
: TizenRenderer(delegate) {
14+
TizenRendererEcoreWl2::TizenRendererEcoreWl2(WindowGeometry geometry,
15+
Delegate& delegate)
16+
: TizenRenderer(geometry, delegate) {
1617
InitializeRenderer();
1718
}
1819

@@ -211,8 +212,8 @@ void* TizenRendererEcoreWl2::OnProcResolver(const char* name) {
211212
return nullptr;
212213
}
213214

214-
TizenRenderer::TizenWindowGeometry TizenRendererEcoreWl2::GetGeometry() {
215-
TizenWindowGeometry result;
215+
TizenRenderer::WindowGeometry TizenRendererEcoreWl2::GetCurrentGeometry() {
216+
WindowGeometry result;
216217
ecore_wl2_window_geometry_get(ecore_wl2_window_, &result.x, &result.y,
217218
&result.w, &result.h);
218219
return result;
@@ -233,20 +234,20 @@ uintptr_t TizenRendererEcoreWl2::GetWindowId() {
233234

234235
bool TizenRendererEcoreWl2::InitializeRenderer() {
235236
int32_t width, height;
236-
if (!SetupDisplay(width, height)) {
237-
FT_LOGE("SetupDisplay fail");
237+
if (!SetupDisplay(&width, &height)) {
238+
FT_LOGE("SetupDisplay failed.");
238239
return false;
239240
}
240241
if (!SetupEcoreWlWindow(width, height)) {
241-
FT_LOGE("SetupEcoreWlWindow fail");
242+
FT_LOGE("SetupEcoreWlWindow failed.");
242243
return false;
243244
}
244245
if (!SetupEglWindow(width, height)) {
245-
FT_LOGE("SetupEglWindow fail");
246+
FT_LOGE("SetupEglWindow failed.");
246247
return false;
247248
}
248249
if (!SetupEglSurface()) {
249-
FT_LOGE("SetupEglSurface fail");
250+
FT_LOGE("SetupEglSurface failed.");
250251
return false;
251252
}
252253
Show();
@@ -265,38 +266,50 @@ void TizenRendererEcoreWl2::DestroyRenderer() {
265266
ShutdownDisplay();
266267
}
267268

268-
bool TizenRendererEcoreWl2::SetupDisplay(int32_t& width, int32_t& height) {
269+
bool TizenRendererEcoreWl2::SetupDisplay(int32_t* width, int32_t* height) {
269270
if (!ecore_wl2_init()) {
270-
FT_LOGE("Could not initialize ecore_wl2");
271+
FT_LOGE("Could not initialize ecore_wl2.");
271272
return false;
272273
}
273274
ecore_wl2_display_ = ecore_wl2_display_connect(nullptr);
274275
if (ecore_wl2_display_ == nullptr) {
275-
FT_LOGE("Display not found");
276+
FT_LOGE("Display not found.");
276277
return false;
277278
}
278-
279279
ecore_wl2_sync();
280-
ecore_wl2_display_screen_size_get(ecore_wl2_display_, &width, &height);
280+
281+
ecore_wl2_display_screen_size_get(ecore_wl2_display_, width, height);
282+
if (*width == 0 || *height == 0) {
283+
FT_LOGE("Invalid screen size: %d x %d", *width, *height);
284+
return false;
285+
}
286+
if (initial_geometry_.w > 0) {
287+
*width = initial_geometry_.w;
288+
}
289+
if (initial_geometry_.h > 0) {
290+
*height = initial_geometry_.h;
291+
}
292+
281293
return true;
282294
}
283295

284296
bool TizenRendererEcoreWl2::SetupEcoreWlWindow(int32_t width, int32_t height) {
285-
if (width == 0 || height == 0) {
286-
FT_LOGE("Invalid screen size: %d x %d", width, height);
287-
return false;
288-
}
297+
int32_t x = initial_geometry_.x;
298+
int32_t y = initial_geometry_.y;
299+
289300
ecore_wl2_window_ =
290-
ecore_wl2_window_new(ecore_wl2_display_, nullptr, 0, 0, width, height);
301+
ecore_wl2_window_new(ecore_wl2_display_, nullptr, x, y, width, height);
291302
ecore_wl2_window_type_set(ecore_wl2_window_, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
292303
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_FALSE);
293-
ecore_wl2_window_position_set(ecore_wl2_window_, 0, 0);
304+
ecore_wl2_window_position_set(ecore_wl2_window_, x, y);
294305
ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0,
295306
"wm.policy.win.user.geometry", "1");
307+
296308
int rotations[4] = {0, 90, 180, 270};
297309
ecore_wl2_window_available_rotations_set(ecore_wl2_window_, rotations,
298310
sizeof(rotations) / sizeof(int));
299311
ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_ROTATE, RotationEventCb, this);
312+
300313
return true;
301314
}
302315

shell/platform/tizen/tizen_renderer_ecore_wl2.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace flutter {
1515

1616
class TizenRendererEcoreWl2 : public TizenRenderer {
1717
public:
18-
explicit TizenRendererEcoreWl2(TizenRenderer::Delegate& delegate);
18+
explicit TizenRendererEcoreWl2(WindowGeometry geometry, Delegate& delegate);
1919
virtual ~TizenRendererEcoreWl2();
2020

2121
bool OnMakeCurrent() override;
@@ -25,7 +25,7 @@ class TizenRendererEcoreWl2 : public TizenRenderer {
2525
uint32_t OnGetFBO() override;
2626
void* OnProcResolver(const char* name) override;
2727

28-
TizenWindowGeometry GetGeometry() override;
28+
WindowGeometry GetCurrentGeometry() override;
2929
int32_t GetDpi() override;
3030
uintptr_t GetWindowId() override;
3131

@@ -42,7 +42,7 @@ class TizenRendererEcoreWl2 : public TizenRenderer {
4242
void Show();
4343
void DestroyRenderer();
4444

45-
bool SetupDisplay(int32_t& width, int32_t& height);
45+
bool SetupDisplay(int32_t* width, int32_t* height);
4646
bool SetupEcoreWlWindow(int32_t width, int32_t height);
4747
bool SetupEglWindow(int32_t width, int32_t height);
4848
EGLDisplay GetEGLDisplay();

0 commit comments

Comments
 (0)