Skip to content

Commit 0709d84

Browse files
committed
Support partial window (flutter-tizen#114)
* Support user made window * This is a necessary feature for partial window. Signed-off-by: MuHong Byun <[email protected]> * Apply Review's commit Signed-off-by: MuHong Byun <[email protected]>
1 parent 9ebcb6a commit 0709d84

7 files changed

+53
-24
lines changed

shell/platform/tizen/flutter_tizen.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ FlutterDesktopEngineRef FlutterDesktopRunEngine(
2929
bool headed) {
3030
StartLogging();
3131

32-
auto engine = std::make_unique<FlutterTizenEngine>(headed);
32+
auto engine = std::make_unique<FlutterTizenEngine>(
33+
headed, engine_properties.custom_win);
3334
if (!engine->RunEngine(engine_properties)) {
3435
FT_LOGE("Failed to run the Flutter engine.");
3536
return nullptr;

shell/platform/tizen/flutter_tizen_engine.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ static DeviceProfile GetDeviceProfile() {
3838
return DeviceProfile::kUnknown;
3939
}
4040

41-
FlutterTizenEngine::FlutterTizenEngine(bool headed)
42-
: device_profile(GetDeviceProfile()) {
41+
FlutterTizenEngine::FlutterTizenEngine(bool headed, void* win)
42+
: device_profile(GetDeviceProfile()), custom_window_(win) {
4343
embedder_api_.struct_size = sizeof(FlutterEngineProcTable);
4444
FlutterEngineGetProcAddresses(&embedder_api_);
4545

@@ -429,6 +429,13 @@ bool FlutterTizenEngine::MarkExternalTextureFrameAvailable(int64_t texture_id) {
429429
engine_, texture_id) == kSuccess);
430430
}
431431

432+
bool FlutterTizenEngine::hasCustomWindow() {
433+
return custom_window_ != nullptr;
434+
}
435+
void* FlutterTizenEngine::CustomWindow() {
436+
return custom_window_;
437+
}
438+
432439
// The Flutter Engine calls out to this function when new platform messages are
433440
// available.
434441

shell/platform/tizen/flutter_tizen_engine.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ enum DeviceProfile { kUnknown, kMobile, kWearable, kTV, kCommon };
5959
// Manages state associated with the underlying FlutterEngine.
6060
class FlutterTizenEngine : public TizenRenderer::Delegate {
6161
public:
62-
explicit FlutterTizenEngine(bool headed);
62+
explicit FlutterTizenEngine(bool headed, void* win );
6363
virtual ~FlutterTizenEngine();
6464

6565
// Prevent copying.
@@ -119,6 +119,10 @@ class FlutterTizenEngine : public TizenRenderer::Delegate {
119119
// given |texture_id|.
120120
bool MarkExternalTextureFrameAvailable(int64_t texture_id);
121121

122+
// This is an experimental feature to support partial window.
123+
bool hasCustomWindow() override;
124+
void* CustomWindow() override;
125+
122126
// The plugin messenger handle given to API clients.
123127
std::unique_ptr<FlutterDesktopMessenger> messenger;
124128

@@ -187,6 +191,8 @@ class FlutterTizenEngine : public TizenRenderer::Delegate {
187191

188192
// The current renderer transformation.
189193
FlutterTransformation transformation_;
194+
195+
void* custom_window_;
190196
};
191197

192198
#endif // EMBEDDER_FLUTTER_TIZEN_ENGINE_H_

shell/platform/tizen/public/flutter_tizen.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ typedef struct {
3636
const char** switches;
3737
// The number of elements in |switches|.
3838
size_t switches_count;
39+
// This is an experimental feature to support partial window.
40+
void* custom_win;
3941
} FlutterDesktopEngineProperties;
4042

4143
// Runs an instance of a Flutter engine with the given properties.

shell/platform/tizen/tizen_renderer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class TizenRenderer {
1717
class Delegate {
1818
public:
1919
virtual void OnOrientationChange(int32_t degree) = 0;
20+
// This is an experimental feature to support partial window.
21+
virtual bool hasCustomWindow() = 0;
22+
virtual void* CustomWindow() = 0;
2023
};
2124

2225
virtual ~TizenRenderer();

shell/platform/tizen/tizen_renderer_ecore_wl2.cc

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,19 @@ bool TizenRendererEcoreWl2::SetupEcoreWlWindow(int32_t width, int32_t height) {
284284
FT_LOGE("Invalid screen size: %d x %d", width, height);
285285
return false;
286286
}
287-
ecore_wl2_window_ =
288-
ecore_wl2_window_new(ecore_wl2_display_, nullptr, 0, 0, width, height);
289-
ecore_wl2_window_type_set(ecore_wl2_window_, ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
290-
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_FALSE);
291-
ecore_wl2_window_position_set(ecore_wl2_window_, 0, 0);
292-
ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0,
293-
"wm.policy.win.user.geometry", "1");
287+
if (delegate_.hasCustomWindow()) {
288+
ecore_wl2_window_ =
289+
reinterpret_cast<Ecore_Wl2_Window*>(delegate_.CustomWindow());
290+
} else {
291+
ecore_wl2_window_ =
292+
ecore_wl2_window_new(ecore_wl2_display_, nullptr, 0, 0, width, height);
293+
ecore_wl2_window_type_set(ecore_wl2_window_,
294+
ECORE_WL2_WINDOW_TYPE_TOPLEVEL);
295+
ecore_wl2_window_alpha_set(ecore_wl2_window_, EINA_FALSE);
296+
ecore_wl2_window_position_set(ecore_wl2_window_, 0, 0);
297+
ecore_wl2_window_aux_hint_add(ecore_wl2_window_, 0,
298+
"wm.policy.win.user.geometry", "1");
299+
}
294300
int rotations[4] = {0, 90, 180, 270};
295301
ecore_wl2_window_available_rotations_set(ecore_wl2_window_, rotations,
296302
sizeof(rotations) / sizeof(int));

shell/platform/tizen/tizen_renderer_evas_gl.cc

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -635,21 +635,25 @@ Evas_Object* TizenRendererEvasGL::SetupEvasWindow(int32_t& width,
635635
int32_t& height) {
636636
elm_config_accel_preference_set("hw:opengl");
637637

638-
evas_window_ = elm_win_add(NULL, NULL, ELM_WIN_BASIC);
639-
auto* ecore_evas =
640-
ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_));
641-
int32_t x, y;
642-
ecore_evas_screen_geometry_get(ecore_evas, &x, &y, &width, &height);
643-
if (width == 0 || height == 0) {
644-
FT_LOGE("Invalid screen size: %d x %d", width, height);
645-
return nullptr;
638+
if (delegate_.hasCustomWindow()) {
639+
evas_window_ = reinterpret_cast<Evas_Object*>(delegate_.CustomWindow());
640+
} else {
641+
evas_window_ = elm_win_add(NULL, NULL, ELM_WIN_BASIC);
642+
auto* ecore_evas =
643+
ecore_evas_ecore_evas_get(evas_object_evas_get(evas_window_));
644+
int32_t x = 0, y = 0;
645+
ecore_evas_screen_geometry_get(ecore_evas, &x, &y, &width, &height);
646+
if (width == 0 || height == 0) {
647+
FT_LOGE("Invalid screen size: %d x %d", width, height);
648+
return nullptr;
649+
}
650+
651+
elm_win_alpha_set(evas_window_, EINA_FALSE);
652+
evas_object_move(evas_window_, 0, 0);
653+
evas_object_resize(evas_window_, width, height);
654+
evas_object_raise(evas_window_);
646655
}
647656

648-
elm_win_alpha_set(evas_window_, EINA_FALSE);
649-
evas_object_move(evas_window_, 0, 0);
650-
evas_object_resize(evas_window_, width, height);
651-
evas_object_raise(evas_window_);
652-
653657
Evas_Object* bg = elm_bg_add(evas_window_);
654658
evas_object_color_set(bg, 0x00, 0x00, 0x00, 0x00);
655659

0 commit comments

Comments
 (0)