#define FOCAL_RATIO 1.5
#define OFFSET_FIX_RATIO 1.2
-#define TRANS_TIME 0.4
+#define TRANS_TIME 0.3
+#define COLLAPSE_TIME 0.15
#define OPACITY_RATIO 1.3
collections {
clip_to : "clipper_panel";
description {
state: "default" 0.0;
+ min: ITEM_W WIN_H;
map {
- on: 1;
- smooth: 1;
- perspective_on: 1;
- perspective: "focal.point";
+ on: 1;
+ smooth: 1;
+ perspective_on: 1;
+ perspective: "focal.point";
}
}
description {
state: "visible" 0.0;
inherit: "default" 0.0;
}
+ description {
+ state: "collapse" 0.0;
+ min: 0 WIN_H;
+ max: 0 -1;
+ visible: 0;
+ }
}
}
programs {
- program
- {
+ program {
name : "set_to_default";
signal : "default_state";
source : "";
target : "clipper_panel";
transition: BOUNCE 1.0 4.5 5.0;
}
- program
- {
+ program {
name : "move_up";
signal : "move_up";
source : "";
action : STATE_SET "up" 0.0;
after: "move_finished";
}
- program
- {
+ program {
name : "move_down";
signal : "move_down";
source : "";
transition: LINEAR TRANS_TIME;
after: "move_finished";
}
- program
- {
+ program {
name : "zoom_out";
signal : "zoom_out";
source : "";
transition: LINEAR TRANS_TIME;
after: "zoom_finished";
}
- program
- {
+ program {
name : "opacity_hidden";
signal : "opacity_hidden";
source : "";
transition: LINEAR TRANS_TIME;
}
program {
+ name : "collapse";
+ signal : "collapse";
+ source : "";
+ action : STATE_SET "collapse" 0.0;
+ target : "swallow.content";
+ transition: LINEAR COLLAPSE_TIME;
+ after: "collapse_finished";
+ }
+ program {
name : "zoom_finished";
action : SIGNAL_EMIT "zoom_finished" "";
}
name : "move_finished";
action : SIGNAL_EMIT "move_finished" "";
}
+ program {
+ name : "collapse_finished";
+ action : SIGNAL_EMIT "collapse_finished" "";
+ }
}
script {
set_offset(Float:ratio) {
static int getHeight();
void playKillAnim();
+ void playKillAllAnim();
void playKillUpAnim();
void playKillDownAnim();
const AppInfo &getAppInfo() const;
void onUp(Evas *e, Evas_Object *obj, void *event_info);
void onKillAnimFinished(Evas_Object *obj, const char *emission, const char *source);
-
+ void onCollapseAnimFinished(Evas_Object *obj, const char *emission, const char *source);
+ Eina_Bool onAnimator();
void onDelButtonClicked(Evas_Object *obj, void *event_info);
void onAppClicked(Evas_Object *obj, const char *emission, const char *source);
Eina_Bool onScreenReaderAppClicked(Evas_Object *obj, Elm_Access_Action_Info *action_info);
void setOffsetUpState();
void setOffsetDownState();
void setOpacityState();
+ void setCollapseState();
+
+ void playCollapseAnim();
+ void stopAnimator();
+ void startAnimator();
+ bool isAnimPlaying() const;
private:
TaskListView &m_Parent;
DelButton *m_pDelButton;
double m_MoveDistance; // 0..1;
bool m_IsKillAnimPlaying;
+ bool m_IsCollapseAnimPlaying;
bool m_IgnoreAppClick;
Atspi m_AoIcon;
Atspi m_AoDelButton;
+ Ecore_Animator *m_pAnimator;
+ bool m_ReqCollapseAnim;
};
}
, m_pDelButton(nullptr)
, m_MoveDistance(0)
, m_IsKillAnimPlaying(false)
+ , m_IsCollapseAnimPlaying(false)
, m_IgnoreAppClick(false)
+ , m_pAnimator(nullptr)
+ , m_ReqCollapseAnim(false)
{
setEo(addLayout(parent, ANIM_ITEM_EDJ, "anim_item"));
addEventCb(EVAS_CALLBACK_MOUSE_MOVE, makeCbFirst(&TaskListViewItem::onMove), this);
addEventCb(EVAS_CALLBACK_MOUSE_UP, makeCbFirst(&TaskListViewItem::onUp), this);
addSignalCb("zoom_finished", "", makeCbFirst(&TaskListViewItem::onKillAnimFinished), this);
addSignalCb("move_finished", "", makeCbFirst(&TaskListViewItem::onKillAnimFinished), this);
+ addSignalCb("move_finished", "", makeCbFirst(&TaskListViewItem::onKillAnimFinished), this);
+ addSignalCb("collapse_finished", "", makeCbFirst(&TaskListViewItem::onCollapseAnimFinished), this);
expand();
m_pTaskLayout = View::addLayout(getEo(), TASK_ITEM_EDJ, "task_item");
TaskListViewItem::~TaskListViewItem()
{
+ stopAnimator();
+}
+
+void TaskListViewItem::stopAnimator()
+{
+ if (m_pAnimator) {
+ ecore_animator_del(m_pAnimator);
+ m_pAnimator = nullptr;
+ }
+}
+void TaskListViewItem::startAnimator()
+{
+ if (!m_pAnimator)
+ m_pAnimator = ecore_animator_add(makeCbFirst(&TaskListViewItem::onAnimator), this);
}
const AppInfo &TaskListViewItem::getAppInfo() const
return HEIGHT;
}
+bool TaskListViewItem::isAnimPlaying() const
+{
+ return m_IsKillAnimPlaying || m_IsCollapseAnimPlaying;
+}
+
void TaskListViewItem::playKillAnim()
{
+ playKillAllAnim();
+ m_ReqCollapseAnim = true;
+}
+
+void TaskListViewItem::playKillAllAnim()
+{
if (!m_IsKillAnimPlaying) {
m_IsKillAnimPlaying = true;
setZoomOutState();
{
if (!m_IsKillAnimPlaying) {
m_IsKillAnimPlaying = true;
+ m_ReqCollapseAnim = true;
setZoomOutState();
setOpacityState();
setOffsetUpState();
{
if (!m_IsKillAnimPlaying) {
m_IsKillAnimPlaying = true;
+ m_ReqCollapseAnim = true;
setZoomOutState();
setOpacityState();
setOffsetDownState();
}
}
+void TaskListViewItem::playCollapseAnim()
+{
+ if (m_ReqCollapseAnim && !m_IsCollapseAnimPlaying) {
+ m_IsCollapseAnimPlaying = true;
+ m_ReqCollapseAnim = false;
+ evas_object_del(m_pTaskLayout);
+ m_pTaskLayout = nullptr;
+ setCollapseState();
+ startAnimator();
+ }
+}
+
void TaskListViewItem::setDefaultState()
{
m_IsKillAnimPlaying = false;
emitSignal("opacity_hidden", "", true);
}
+void TaskListViewItem::setCollapseState()
+{
+ emitSignal("collapse", "", true);
+}
+
void TaskListViewItem::onMove(Evas *e, Evas_Object *obj, void *event_info)
{
auto *event = (Evas_Event_Mouse_Move*)event_info;
- if (m_IsKillAnimPlaying ||
+ if (isAnimPlaying() ||
!m_IsMouseDown ||
(event->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
return;
void TaskListViewItem::onDown(Evas *e, Evas_Object *obj, void *event_info)
{
- if (m_IsKillAnimPlaying)
+ if (isAnimPlaying())
return;
m_IgnoreAppClick = false;
void TaskListViewItem::onUp(Evas *e, Evas_Object *obj, void *event_info)
{
- if (m_IsKillAnimPlaying)
+ if (isAnimPlaying())
return;
static const double killThreshold = 0.25;
void TaskListViewItem::onKillAnimFinished(Evas_Object *obj, const char *emission, const char *source)
{
LOG("");
+ if (!m_IsKillAnimPlaying)
+ return;
+
m_IsKillAnimPlaying = false;
+ m_ReqCollapseAnim ? playCollapseAnim() : m_Parent.onDelRequest(*this);
+}
+
+void TaskListViewItem::onCollapseAnimFinished(Evas_Object *obj, const char *emission, const char *source)
+{
+ LOG("");
+ stopAnimator();
+ m_IsCollapseAnimPlaying = false;
m_Parent.onDelRequest(*this);
}
+Eina_Bool TaskListViewItem::onAnimator()
+{
+ elm_layout_sizing_eval(getEo());
+ return true;
+}