Skip to content

Commit f2bafaa

Browse files
committed
Support ecore_wl2 window transparency (#139)
* Support ecore_wl2 window transparency * Add properties: transparent, focusable
1 parent 090a895 commit f2bafaa

11 files changed

+60
-15
lines changed

shell/platform/tizen/flutter_tizen.cc

+4-3
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ FlutterDesktopEngineRef FlutterDesktopRunEngine(
3333
flutter::FlutterProjectBundle project(engine_properties);
3434
auto engine = std::make_unique<flutter::FlutterTizenEngine>(project);
3535
if (window_properties.headed) {
36-
engine->InitializeRenderer(window_properties.x, window_properties.y,
37-
window_properties.width,
38-
window_properties.height);
36+
engine->InitializeRenderer(
37+
window_properties.x, window_properties.y, window_properties.width,
38+
window_properties.height, window_properties.transparent,
39+
window_properties.focusable);
3940
}
4041
if (!engine->RunEngine()) {
4142
FT_LOGE("Failed to run the Flutter engine.");

shell/platform/tizen/flutter_tizen_engine.cc

+7-3
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,14 @@ FlutterTizenEngine::~FlutterTizenEngine() {
6666
void FlutterTizenEngine::InitializeRenderer(int32_t x,
6767
int32_t y,
6868
int32_t width,
69-
int32_t height) {
69+
int32_t height,
70+
bool transparent,
71+
bool focusable) {
7072
TizenRenderer::WindowGeometry geometry = {x, y, width, height};
7173

7274
#ifdef TIZEN_RENDERER_EVAS_GL
73-
renderer = std::make_unique<TizenRendererEvasGL>(geometry, *this);
75+
renderer = std::make_unique<TizenRendererEvasGL>(geometry, transparent,
76+
focusable, *this);
7477

7578
render_loop_ = std::make_unique<TizenRenderEventLoop>(
7679
std::this_thread::get_id(), // main thread
@@ -82,7 +85,8 @@ void FlutterTizenEngine::InitializeRenderer(int32_t x,
8285
},
8386
renderer.get());
8487
#else
85-
renderer = std::make_unique<TizenRendererEcoreWl2>(geometry, *this);
88+
renderer = std::make_unique<TizenRendererEcoreWl2>(geometry, transparent,
89+
focusable, *this);
8690

8791
tizen_vsync_waiter_ = std::make_unique<TizenVsyncWaiter>(this);
8892
#endif

shell/platform/tizen/flutter_tizen_engine.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,12 @@ class FlutterTizenEngine : public TizenRenderer::Delegate {
6060
FlutterTizenEngine& operator=(FlutterTizenEngine const&) = delete;
6161

6262
// Sets up an instance of TizenRenderer.
63-
void InitializeRenderer(int32_t x, int32_t y, int32_t width, int32_t height);
63+
void InitializeRenderer(int32_t x,
64+
int32_t y,
65+
int32_t width,
66+
int32_t height,
67+
bool transparent,
68+
bool focusable);
6469

6570
// Starts running the engine.
6671
bool RunEngine();

shell/platform/tizen/flutter_tizen_shell.cc

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class FlutterApp {
2424
window_prop.y = 0;
2525
window_prop.width = window_width_;
2626
window_prop.height = window_height_;
27+
window_prop.transparent = false;
28+
window_prop.focusable = true;
2729

2830
std::string assets_path = app_path_ + "/res/flutter_assets";
2931
std::string icu_data_path = app_path_ + "/res/icudtl.dat";

shell/platform/tizen/public/flutter_tizen.h

+4
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ typedef struct {
3434
int32_t width;
3535
// The height of the window, or the maximum height if the value is zero.
3636
int32_t height;
37+
// Whether the window should have a transparent background or not.
38+
bool transparent;
39+
// Whether the window should be focusable or not.
40+
bool focusable;
3741
} FlutterDesktopWindowProperties;
3842

3943
// Properties for configuring a Flutter engine instance.

shell/platform/tizen/tizen_renderer.cc

+8-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@
66

77
namespace flutter {
88

9-
TizenRenderer::TizenRenderer(WindowGeometry geometry, Delegate& delegate)
10-
: initial_geometry_(geometry), delegate_(delegate) {}
9+
TizenRenderer::TizenRenderer(WindowGeometry geometry,
10+
bool transparent,
11+
bool focusable,
12+
Delegate& delegate)
13+
: initial_geometry_(geometry),
14+
transparent_(transparent),
15+
focusable_(focusable),
16+
delegate_(delegate) {}
1117

1218
TizenRenderer::~TizenRenderer() = default;
1319

shell/platform/tizen/tizen_renderer.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,14 @@ class TizenRenderer {
4646
virtual void SetPreferredOrientations(const std::vector<int>& rotations) = 0;
4747

4848
protected:
49-
explicit TizenRenderer(WindowGeometry geometry, Delegate& delegate);
49+
explicit TizenRenderer(WindowGeometry geometry,
50+
bool transparent,
51+
bool focusable,
52+
Delegate& delegate);
5053

5154
WindowGeometry initial_geometry_;
55+
bool transparent_;
56+
bool focusable_;
5257
Delegate& delegate_;
5358

5459
bool is_valid_ = false;

shell/platform/tizen/tizen_renderer_ecore_wl2.cc

+12-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
namespace flutter {
1313

1414
TizenRendererEcoreWl2::TizenRendererEcoreWl2(WindowGeometry geometry,
15+
bool transparent,
16+
bool focusable,
1517
Delegate& delegate)
16-
: TizenRenderer(geometry, delegate) {
18+
: TizenRenderer(geometry, transparent, focusable, delegate) {
1719
InitializeRenderer();
1820
}
1921

@@ -304,11 +306,19 @@ bool TizenRendererEcoreWl2::SetupEcoreWlWindow(int32_t width, int32_t height) {
304306
ecore_wl2_window_ =
305307
ecore_wl2_window_new(ecore_wl2_display_, nullptr, x, y, width, height);
306308
ecore_wl2_window_type_set(ecore_wl2_window_, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
307-
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_FALSE);
308309
ecore_wl2_window_position_set(ecore_wl2_window_, x, y);
309310
ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0,
310311
"wm.policy.win.user.geometry", "1");
311312

313+
if (transparent_) {
314+
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_TRUE);
315+
} else {
316+
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_FALSE);
317+
}
318+
if (!focusable_) {
319+
ecore_wl2_window_focus_skip_set(ecore_wl2_window_, EINA_TRUE);
320+
}
321+
312322
int rotations[4] = {0, 90, 180, 270};
313323
ecore_wl2_window_available_rotations_set(ecore_wl2_window_, rotations,
314324
sizeof(rotations) / sizeof(int));

shell/platform/tizen/tizen_renderer_ecore_wl2.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ namespace flutter {
1515

1616
class TizenRendererEcoreWl2 : public TizenRenderer {
1717
public:
18-
explicit TizenRendererEcoreWl2(WindowGeometry geometry, Delegate& delegate);
18+
explicit TizenRendererEcoreWl2(WindowGeometry geometry,
19+
bool transparent,
20+
bool focusable,
21+
Delegate& delegate);
1922
virtual ~TizenRendererEcoreWl2();
2023

2124
bool OnMakeCurrent() override;

shell/platform/tizen/tizen_renderer_evas_gl.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ EVAS_GL_GLOBAL_GLES3_DEFINE();
1717
namespace flutter {
1818

1919
TizenRendererEvasGL::TizenRendererEvasGL(WindowGeometry geometry,
20+
bool transparent,
21+
bool focusable,
2022
Delegate& delegate)
21-
: TizenRenderer(geometry, delegate) {
23+
: TizenRenderer(geometry, transparent, focusable, delegate) {
2224
InitializeRenderer();
2325

2426
// Clear once to remove noise.

shell/platform/tizen/tizen_renderer_evas_gl.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ namespace flutter {
1616

1717
class TizenRendererEvasGL : public TizenRenderer {
1818
public:
19-
explicit TizenRendererEvasGL(WindowGeometry geometry, Delegate& delegate);
19+
explicit TizenRendererEvasGL(WindowGeometry geometry,
20+
bool transparent,
21+
bool focusable,
22+
Delegate& delegate);
2023
virtual ~TizenRendererEvasGL();
2124

2225
bool OnMakeCurrent() override;

0 commit comments

Comments
 (0)