#include "wrt/src/browser/tv/decorator_window.h"
-#include <Elementary.h>
#include <appsvc.h>
#include <efl_assist_policy.h>
} // namespace
// static
-DecoratorWindow& DecoratorWindow::GetInstance() {
- static DecoratorWindow* decorator_window = new DecoratorWindow();
- return *decorator_window;
+DecoratorWindow* DecoratorWindow::GetInstance() {
+ static DecoratorWindow decorator_window;
+ return &decorator_window;
}
void DecoratorWindow::SetDecoratorWindow(Evas_Object* top_window) {
(edje_dir.value() + "/" + kDecoratorEdjeFile).c_str());
ea_policy_handle_desktop_mode(top_window_, EINA_TRUE);
+ elm_win_alpha_set(top_window_, EINA_TRUE);
+ SetWindowBorderColor();
+
Evas_Object* layout_border = AddLayout(kBorderContent);
AddRectangle(layout_border);
Evas_Object* box = AddBox(layout_border, 1.0, 0.5);
AddFunctionButton(box, "border-max", false, OnMaximizeClickedCB);
AddCornerButton(kLeftCornerButton, kResizeBottomLeft);
AddCornerButton(kRightCornerButton, kResizeBottomRight);
+ elm_win_maximized_set(top_window_, false);
} else {
AddFunctionButton(box, "border-restore-dimmed", true, nullptr);
+ elm_win_maximized_set(top_window_, true);
+ ShowWindowBorder();
}
AddFunctionButton(box, "border-close", false, OnCloseClickedCB);
+ ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, MouseEventCB, nullptr);
#else
LOG(ERROR) << "This version does not support window decorator";
#endif
Evas_Object* DecoratorWindow::AddRectangle(Evas_Object* parent) {
Evas_Object* rect = evas_object_rectangle_add(evas_object_evas_get(parent));
evas_object_size_hint_min_set(rect, 0, 50);
- evas_object_color_set(rect, 100, 100, 100, 255);
evas_object_show(rect);
elm_object_part_content_set(parent, "border.height", rect);
return rect;
GetBundleValueToString(bundle, kIconPath) + kHeaderIconName;
Evas_Object* icon = elm_image_add(box);
elm_image_file_set(icon, iconPath.c_str(), nullptr);
- evas_object_size_hint_min_set(icon, 20, 20);
+ evas_object_size_hint_min_set(icon, 30, 30);
elm_box_pack_end(box, icon);
evas_object_show(icon);
std::string app_title = GetBundleValueToString(bundle, kAppTitle);
- std::string windowTitle = "<font_size=25>" + app_title + "</font_size>";
+ std::string windowTitle = "<font_size=30 color=#000000>" + app_title + "</font_size>";
Evas_Object* label = elm_label_add(box);
elm_object_text_set(label, windowTitle.c_str());
elm_box_pack_end(box, label);
auto value = appsvc_get_data(bundle, key);
return value ? std::string(value) : std::string();
}
+
+void DecoratorWindow::SetWindowBorderColor() {
+#if TIZEN_VERSION_AT_LEAST(7, 0, 0)
+ Evas_Object* frameObj = elm_win_frame_edje_get(top_window_);
+ LOG(INFO) << "SetWindowBorderColor start " << frameObj;
+ Edje_Message_Int_Set* message =
+ (Edje_Message_Int_Set*)(alloca(sizeof(*message) + ((3) * sizeof(int))));
+ if (!message)
+ return;
+
+ message->count = 4;
+ message->val[0] = 225; // R
+ message->val[1] = 224; // G
+ message->val[2] = 224; // B
+ message->val[3] = 255; // A
+
+ edje_object_message_send(frameObj, EDJE_MESSAGE_INT_SET, 1, message);
+ edje_object_message_send(frameObj, EDJE_MESSAGE_INT_SET, 2, message);
+ edje_object_message_send(frameObj, EDJE_MESSAGE_INT_SET, 3, message);
+ edje_object_message_send(frameObj, EDJE_MESSAGE_INT_SET, 4, message);
+ LOG(INFO) << "SetWindowBorderColor end";
+#else
+ LOG(ERROR) << "This version does not support window decorator";
+#endif
+ return;
+}
+
+// static
+Eina_Bool DecoratorWindow::MouseEventCB(void* data, int event_type, void* event_info) {
+ LOG(INFO) << "MouseEventCallback type = " << event_type;
+ if (event_type != ECORE_EVENT_MOUSE_BUTTON_DOWN)
+ return ECORE_CALLBACK_PASS_ON;
+
+ auto self = GetInstance();
+ self->ShowWindowBorder();
+ LOG(INFO) << "MouseEventCallback end";
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+void DecoratorWindow::ShowWindowBorder()
+{
+ LOG(INFO) << "ShowWindowBorder called";
+ if (elm_win_borderless_get(top_window_))
+ elm_win_borderless_set(top_window_, EINA_FALSE);
+
+ if (hide_timer_) {
+ LOG(INFO) << "timer_del " << hide_timer_;
+ ecore_timer_del(hide_timer_);
+ }
+ hide_timer_ = ecore_timer_add(10, HideBorderCallback, nullptr);
+ LOG(INFO) << "ShowWindowBorder end " << hide_timer_;
+}
+
+// static
+Eina_Bool DecoratorWindow::HideBorderCallback(void* data) {
+ auto self = GetInstance();
+ LOG(INFO) << "HideBorderCallback called " << self->hide_timer_;
+ if (elm_win_maximized_get(self->top_window_)) {
+ LOG(INFO) << "Hide Window Border!!";
+ elm_win_borderless_set(self->top_window_, EINA_TRUE);
+ }
+ self->hide_timer_ = nullptr;
+ LOG(INFO) << "HideBorderCallback end";
+ return ECORE_CALLBACK_DONE;
+}
} // namespace wrt