Skip to content

Commit

Permalink
TizenViewElementary: Change the size of view when the size of contain…
Browse files Browse the repository at this point in the history
…er changes (#302)

* TizenViewElementary: Change the size of view when the size of container changes

When the size of the container is changed from the outside,
the size of FlutterView and the size of the image are changed together.

+)
Basically, the size of the container is set according to the size of the image.
It was enough to set min/max size only for images.
After setting the image size for an unknown reason,
the container resize callback is called once again.
At this time, evas_object_geometry_get() of container_ returns
the initially set value and the size backs to the original size.
Therefore, we set min/max of container_ together.

* TIzenViewBase: Refactoring view resize

OnGeometryChanged() is not a method for TizenView, so refactor it to not use it.
  • Loading branch information
JSUYA authored Jul 1, 2022
1 parent 76079c9 commit 4901d94
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 14 deletions.
3 changes: 1 addition & 2 deletions shell/platform/tizen/flutter_tizen_elementary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,5 @@ void FlutterDesktopViewResize(FlutterDesktopViewRef view_ref,
int32_t width,
int32_t height) {
auto* view = reinterpret_cast<flutter::FlutterTizenView*>(view_ref);
flutter::TizenGeometry view_geometry = {0, 0, width, height};
view->tizen_view()->OnGeometryChanged(view_geometry);
view->OnResize(0, 0, width, height);
}
4 changes: 0 additions & 4 deletions shell/platform/tizen/tizen_view_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,6 @@ class TizenViewBase {

virtual void ResizeWithRotation(TizenGeometry geometry, int32_t degree) = 0;

// FIXME
// This is a temporary implementation that is only used by the window channel.
virtual void OnGeometryChanged(TizenGeometry geometry) = 0;

virtual void Show() = 0;

virtual TizenViewType GetType() = 0;
Expand Down
32 changes: 26 additions & 6 deletions shell/platform/tizen/tizen_view_elementary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ bool TizenViewElementary::CreateView() {
return false;
}
evas_object_size_hint_align_set(image_, EVAS_HINT_FILL, EVAS_HINT_FILL);
EvasObjectResize(image_, initial_width_, initial_height_);
evas_object_image_size_set(image_, initial_width_, initial_height_);
evas_object_image_alpha_set(image_, EINA_TRUE);
elm_table_pack(container_, image_, 0, 0, 1, 1);
Expand All @@ -107,6 +106,8 @@ bool TizenViewElementary::CreateView() {
evas_object_color_set(event_layer_, 0, 0, 0, 0);
elm_table_pack(container_, event_layer_, 0, 0, 1, 1);

SetGeometry(TizenGeometry{0, 0, initial_width_, initial_height_});

return true;
}

Expand All @@ -117,6 +118,22 @@ void TizenViewElementary::DestroyView() {
}

void TizenViewElementary::RegisterEventHandlers() {
evas_object_callbacks_[EVAS_CALLBACK_RESIZE] =
[](void* data, Evas* evas, Evas_Object* object, void* event_info) {
auto* self = reinterpret_cast<TizenViewElementary*>(data);
if (self->view_) {
if (self->container_ == object) {
int32_t width = 0, height = 0;
evas_object_geometry_get(object, nullptr, nullptr, &width, &height);

self->view_->OnResize(0, 0, width, height);
}
}
};
evas_object_event_callback_add(container_, EVAS_CALLBACK_RESIZE,
evas_object_callbacks_[EVAS_CALLBACK_RESIZE],
this);

evas_object_callbacks_[EVAS_CALLBACK_MOUSE_DOWN] =
[](void* data, Evas* evas, Evas_Object* object, void* event_info) {
auto* self = reinterpret_cast<TizenViewElementary*>(data);
Expand Down Expand Up @@ -263,6 +280,8 @@ void TizenViewElementary::RegisterEventHandlers() {
}

void TizenViewElementary::UnregisterEventHandlers() {
evas_object_event_callback_del(container_, EVAS_CALLBACK_RESIZE,
evas_object_callbacks_[EVAS_CALLBACK_RESIZE]);
evas_object_event_callback_del(
event_layer_, EVAS_CALLBACK_MOUSE_DOWN,
evas_object_callbacks_[EVAS_CALLBACK_MOUSE_DOWN]);
Expand Down Expand Up @@ -292,6 +311,10 @@ TizenGeometry TizenViewElementary::GetGeometry() {
void TizenViewElementary::SetGeometry(TizenGeometry geometry) {
EvasObjectResize(image_, geometry.width, geometry.height);
evas_object_move(image_, geometry.left, geometry.top);
evas_object_image_size_set(image_, geometry.width, geometry.height);

EvasObjectResize(container_, geometry.width, geometry.height);
evas_object_move(container_, geometry.left, geometry.top);
}

int32_t TizenViewElementary::GetDpi() {
Expand All @@ -309,6 +332,8 @@ uintptr_t TizenViewElementary::GetWindowId() {

void TizenViewElementary::ResizeWithRotation(TizenGeometry geometry,
int32_t angle) {
SetGeometry(geometry);

TizenRendererEvasGL* renderer_evas_gl =
reinterpret_cast<TizenRendererEvasGL*>(view_->engine()->renderer());
renderer_evas_gl->ResizeSurface(geometry.width, geometry.height);
Expand All @@ -320,11 +345,6 @@ void TizenViewElementary::Show() {
evas_object_show(event_layer_);
}

void TizenViewElementary::OnGeometryChanged(TizenGeometry geometry) {
SetGeometry(geometry);
view_->OnResize(geometry.left, geometry.top, geometry.width, geometry.height);
}

void TizenViewElementary::PrepareInputMethod() {
input_method_context_ =
std::make_unique<TizenInputMethodContext>(GetWindowId());
Expand Down
2 changes: 0 additions & 2 deletions shell/platform/tizen/tizen_view_elementary.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ class TizenViewElementary : public TizenView {

void Show() override;

void OnGeometryChanged(TizenGeometry geometry) override;

private:
bool CreateView();

Expand Down
2 changes: 2 additions & 0 deletions shell/platform/tizen/tizen_window.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class TizenWindow : public TizenViewBase {
// Returns the geometry of the display screen.
virtual TizenGeometry GetScreenGeometry() = 0;

virtual void OnGeometryChanged(TizenGeometry geometry) = 0;

virtual void BindKeys(const std::vector<std::string>& keys) = 0;

TizenViewType GetType() override { return TizenViewType::kWindow; };
Expand Down

0 comments on commit 4901d94

Please sign in to comment.