images.image: "icon_arrow_up.png" COMP;
images.image: "icon_arrow_down.png" COMP;
data.item: "focus_highlight" "on";
+ script {
+ public is_rtl = 0;
+ }
parts {
part { name: "shadow"; mouse_events: 0;
description { state: "default" 0.0;
rel2.to: "elm.swallow.event";
color: 0 0 0 0;
}
+ description { state: "hidden" 0.0;
+ rel1.to: "elm.swallow.event";
+ rel2.to: "elm.swallow.event";
+ }
}
part { name: "dots"; mouse_events: 0;
description { state: "default" 0.0;
transition: DECELERATE 0.3;
target: "elm.swallow.event";
target: "base";
- target: "icn";
+ }
+ program {
+ signal: "elm,action,show"; source: "elm";
+ script {
+ if (get_int(is_rtl) == 0)
+ set_state(PART:"icn", "default", 0.0);
+ else
+ set_state(PART:"icn", "hidden", 0.0);
+ }
+ }
+ program {
+ signal: "edje,state,rtl";
+ source: "edje";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.event", st, 30, vl);
+ if (!strcmp(st, "default"))
+ set_state(PART:"icn", "hidden", 0.0);
+ else
+ set_state(PART:"icn", "default", 0.0);
+ set_int(is_rtl, 1);
+ }
+ }
+ program {
+ signal: "edje,state,ltr";
+ source: "edje";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.event", st, 30, vl);
+ if (!strcmp(st, "default"))
+ set_state(PART:"icn", "default", 0.0);
+ else
+ set_state(PART:"icn", "hidden", 0.0);
+ set_int(is_rtl, 0);
+ }
}
program {
signal: "elm,action,hide"; source: "elm";
action: STATE_SET "hidden" 0.0;
transition: ACCELERATE 0.3;
target: "elm.swallow.event";
- target: "icn";
+ }
+ program {
+ signal: "elm,action,hide"; source: "elm";
+ script {
+ if (get_int(is_rtl) == 0)
+ set_state(PART:"icn", "hidden", 0.0);
+ else
+ set_state(PART:"icn", "default", 0.0);
+ }
}
program { name: "hide1";
signal: "elm,action,hide"; source: "elm";
script {
new x, y, w, h;
-
- custom_state(PART:"base", "default", 0.0);
- set_state_val(PART:"base", STATE_REL1, -1.0, 0.0);
- get_geometry(PART:"elm.swallow.event", x, y, w, h);
- set_state_val(PART:"base", STATE_REL1_OFFSET, w, 0);
+ if (get_int(is_rtl) == 0)
+ {
+ custom_state(PART:"base", "default", 0.0);
+ set_state_val(PART:"base", STATE_REL1, -1.0, 0.0);
+ get_geometry(PART:"elm.swallow.event", x, y, w, h);
+ set_state_val(PART:"base", STATE_REL1_OFFSET, w, 0);
+ }
+ else
+ {
+ custom_state(PART:"base", "default", 0.0);
+ set_state_val(PART:"base", STATE_REL1, -1.0, 0.0);
+ set_state_val(PART:"base", STATE_REL2, -2.0, 1.0);
+ get_geometry(PART:"elm.swallow.event", x, y, w, h);
+ set_state_val(PART:"base", STATE_REL2_OFFSET, -w, 0);
+ }
}
after: "hide2";
}
program { name: "hide1";
script {
new x, y, w, h;
-
+
custom_state(PART:"base", "default", 0.0);
set_state_val(PART:"base", STATE_REL1, 1.0, 0.0);
set_state_val(PART:"base", STATE_REL2, 2.0, 1.0);
set_state_val(PART:"base", STATE_REL1_OFFSET, 0, h);
}
}
+ program {
+ signal: "elm,action,show"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "icn";
+ }
+ program {
+ signal: "edje,state,rtl";
+ source: "edje";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.event", st, 30, vl);
+ if (!strcmp(st, "default"))
+ set_state(PART:"icn", "default", 0.0);
+ else
+ set_state(PART:"icn", "hidden", 0.0);
+ }
+ }
+ program {
+ signal: "edje,state,ltr";
+ source: "edje";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.event", st, 30, vl);
+ if (!strcmp(st, "default"))
+ set_state(PART:"icn", "default", 0.0);
+ else
+ set_state(PART:"icn", "hidden", 0.0);
+ }
+ }
+ program {
+ signal: "elm,action,hide"; source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "icn";
+ }
}
}
group { name: "elm/panel/bottom/default";
- inherit: "elm/panel/left/default";
+ inherit: "elm/panel/top/default";
parts {
part { name: "base";
description { state: "default" 0.0;
program { name: "hide1";
script {
new x, y, w, h;
-
custom_state(PART:"base", "default", 0.0);
set_state_val(PART:"base", STATE_REL1, 0.0, 1.0);
set_state_val(PART:"base", STATE_REL2, 1.0, 2.0);
{SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
{NULL, NULL}
};
-
+static void _panel_toggle(void *, Evas_Object *, const char *,const char *);
static Eina_Bool _key_action_toggle(Evas_Object *obj, const char *params);
+static void _drawer_open(Evas_Object *, Evas_Coord , Evas_Coord , Eina_Bool );
+static void _drawer_close(Evas_Object *, Evas_Coord , Evas_Coord , Eina_Bool);
static const Elm_Action key_actions[] = {
{"toggle", _key_action_toggle},
break;
case ELM_PANEL_ORIENT_LEFT:
- if (!elm_widget_mirrored_get(obj))
- {
- if (!elm_layout_theme_set
- (obj, "panel", "left", elm_widget_style_get(obj)))
- CRI("Failed to set layout!");
- }
- else
- {
- if (!elm_layout_theme_set
- (obj, "panel", "right", elm_widget_style_get(obj)))
- CRI("Failed to set layout!");
- }
+ if (!elm_layout_theme_set(obj, "panel", "left",
+ elm_widget_style_get(obj)))
+ CRI("Failed to set layout!");
break;
case ELM_PANEL_ORIENT_RIGHT:
- if (!elm_widget_mirrored_get(obj))
- {
- if (!elm_layout_theme_set
- (obj, "panel", "right", elm_widget_style_get(obj)))
- CRI("Failed to set layout!");
- }
- else
- {
- if (!elm_layout_theme_set
- (obj, "panel", "left", elm_widget_style_get(obj)))
- CRI("Failed to set layout!");
- }
+ if (!elm_layout_theme_set(obj, "panel", "right",
+ elm_widget_style_get(obj)))
+ CRI("Failed to set layout!");
break;
}
_elm_panel_elm_widget_theme_apply(Eo *obj, Elm_Panel_Data *sd)
{
const char *str;
+ int w, h;
Evas_Coord minw = 0, minh = 0;
Eina_Bool int_ret = EINA_FALSE;
elm_widget_theme_object_set(obj, sd->scr_edje, "scroller", "panel",
elm_widget_style_get(obj));
_scrollable_layout_theme_set(obj, sd);
-
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ if (!sd->hidden) _drawer_open(obj, w, h, EINA_FALSE);
+ else _drawer_close(obj, w, h, EINA_FALSE);
handler_size = edje_object_data_get(sd->scr_edje, "handler_size");
if (handler_size)
sd->handler_size = (int) (elm_object_scale_get(obj)) * (atoi(handler_size));
if (sd->freeze)
{
eo_do(obj, elm_interface_scrollable_movement_block_set
- (ELM_SCROLLER_MOVEMENT_NO_BLOCK));
+ (ELM_SCROLLER_MOVEMENT_NO_BLOCK));
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
switch (sd->orient)
{
case ELM_PANEL_ORIENT_TOP:
+ break;
case ELM_PANEL_ORIENT_LEFT:
+ if (elm_widget_mirrored_get(obj))
+ x = w * sd->content_size_ratio;
break;
case ELM_PANEL_ORIENT_BOTTOM:
break;
case ELM_PANEL_ORIENT_RIGHT:
- x = w * sd->content_size_ratio;
+ if (!elm_widget_mirrored_get(obj))
+ x = w * sd->content_size_ratio;
break;
}
break;
case ELM_PANEL_ORIENT_LEFT:
- x = w * sd->content_size_ratio;
+ if (!elm_widget_mirrored_get(obj))
+ x = w * sd->content_size_ratio;
horizontal = EINA_TRUE;
break;
case ELM_PANEL_ORIENT_BOTTOM:
break;
+
case ELM_PANEL_ORIENT_RIGHT:
+ if (elm_widget_mirrored_get(obj))
+ x = w * sd->content_size_ratio;
horizontal = EINA_TRUE;
break;
}
eo_do(obj, elm_interface_scrollable_content_pos_get(&pos, NULL));
horizontal = EINA_TRUE;
- if (pos == 0) open = EINA_TRUE;
- else if (pos == panel_size) open = EINA_FALSE;
- else return EINA_FALSE;
+ if (!elm_widget_mirrored_get(obj))
+ {
+ if (pos == 0) open = EINA_TRUE;
+ else if (pos == panel_size) open = EINA_FALSE;
+ else return EINA_FALSE;
+ }
+ else
+ {
+ if (pos == panel_size) open = EINA_TRUE;
+ else if (pos == 0) open = EINA_FALSE;
+ else return EINA_FALSE;
+ }
break;
case ELM_PANEL_ORIENT_RIGHT:
eo_do(obj, elm_interface_scrollable_content_pos_get(&pos, NULL));
horizontal = EINA_TRUE;
- if (pos == panel_size) open = EINA_TRUE;
- else if (pos == 0) open = EINA_FALSE;
- else return EINA_FALSE;
+ if (!elm_widget_mirrored_get(obj))
+ {
+ if (pos == 0) open = EINA_TRUE;
+ else if (pos == panel_size) open = EINA_FALSE;
+ else return EINA_FALSE;
+ }
+ else
+ {
+ if (pos == panel_size) open = EINA_TRUE;
+ else if (pos == 0) open = EINA_FALSE;
+ else return EINA_FALSE;
+ }
break;
}
Evas_Coord finger_size = elm_config_finger_size_get();
Evas_Coord x, y, w, h;
evas_object_geometry_get(obj, &x, &y, &w, &h);
+ Eina_Bool is_mirrored = elm_widget_mirrored_get(obj);
sd->down_x = ev->canvas.x - x;
sd->down_y = ev->canvas.y - y;
}
break;
case ELM_PANEL_ORIENT_LEFT:
- if ((sd->freeze) && (sd->down_x >= 0) && (sd->down_x < finger_size))
+ if ((!is_mirrored && (sd->freeze) && (sd->down_x >= 0) && (sd->down_x < finger_size)) ||
+ ((is_mirrored && (sd->freeze) && (sd->down_x <= w) && (sd->down_x > (w - finger_size)))))
{
ecore_timer_del(sd->timer);
sd->timer = ecore_timer_add(0.2, _timer_cb, obj);
}
break;
case ELM_PANEL_ORIENT_RIGHT:
- if ((sd->freeze) && (sd->down_x <= w) && (sd->down_x > (w - finger_size)))
+ if ((is_mirrored && (sd->freeze) && (sd->down_x >= 0) && (sd->down_x < finger_size)) ||
+ (!is_mirrored && (sd->freeze) && (sd->down_x <= w) && (sd->down_x > (w - finger_size))))
{
ecore_timer_del(sd->timer);
sd->timer = ecore_timer_add(0.2, _timer_cb, obj);
Evas_Coord x, y, w, h, cur_x, cur_y, finger_size;
evas_object_geometry_get(obj, &x, &y, &w, &h);
finger_size = elm_config_finger_size_get();
+ Eina_Bool is_mirrored = elm_widget_mirrored_get(obj);
cur_x = ev->cur.canvas.x - x;
cur_y = ev->cur.canvas.y - y;
}
break;
case ELM_PANEL_ORIENT_LEFT:
- if (sd->timer && ((cur_x - sd->down_x) > finger_size))
+ if ((!is_mirrored && (sd->timer) && ((cur_x - sd->down_x) > finger_size)) ||
+ ((is_mirrored) && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
eo_do(obj, elm_interface_scrollable_freeze_set(EINA_FALSE));
sd->freeze = EINA_FALSE;
}
break;
case ELM_PANEL_ORIENT_RIGHT:
- if (sd->timer && ((sd->down_x - cur_x) > finger_size))
+ if ((is_mirrored && (sd->timer) && ((cur_x - sd->down_x) > finger_size)) ||
+ (!is_mirrored && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
eo_do(obj, elm_interface_scrollable_freeze_set(EINA_FALSE));
sd->freeze = EINA_FALSE;
threshold = panel_size / 4;
eo_do(obj, elm_interface_scrollable_content_pos_get(&pos, NULL));
- if (sd->hidden)
+ if (elm_widget_mirrored_get(obj))
{
- if (pos < (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
- else _drawer_close(obj, w, h, EINA_TRUE);
+ if (sd->hidden)
+ {
+ if (pos > threshold) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
+ else
+ {
+ if (pos > (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
}
else
{
- if (pos < threshold) _drawer_open(obj, w, h, EINA_TRUE);
- else _drawer_close(obj, w, h, EINA_TRUE);
+ if (sd->hidden)
+ {
+ if (pos < (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
+ else
+ {
+ if (pos < threshold) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
}
break;
threshold = panel_size / 4;
eo_do(obj, elm_interface_scrollable_content_pos_get(&pos, NULL));
- if (sd->hidden)
+ if (!elm_widget_mirrored_get(obj))
{
- if (pos > threshold) _drawer_open(obj, w, h, EINA_TRUE);
- else _drawer_close(obj, w, h, EINA_TRUE);
+ if (sd->hidden)
+ {
+ if (pos > threshold) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
+ else
+ {
+ if (pos > (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
}
else
{
- if (pos > (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
- else _drawer_close(obj, w, h, EINA_TRUE);
+ if (sd->hidden)
+ {
+ if (pos < (panel_size - threshold)) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
+ else
+ {
+ if (pos < threshold) _drawer_open(obj, w, h, EINA_TRUE);
+ else _drawer_close(obj, w, h, EINA_TRUE);
+ }
}
break;
}
event.rel_y = (double) y / (double) ((sd->content_size_ratio) * h);
break;
case ELM_PANEL_ORIENT_LEFT:
- event.rel_x = 1 - ((double) x / (double) ((sd->content_size_ratio) * w));
- event.rel_y = 1;
+ if (!elm_widget_mirrored_get(obj))
+ {
+ event.rel_x = 1 - ((double) x / (double) ((sd->content_size_ratio) * w));
+ event.rel_y = 1;
+ }
+ else
+ {
+ event.rel_x = (double) x / (double) ((sd->content_size_ratio) * w);
+ event.rel_y = 1;
+ }
break;
case ELM_PANEL_ORIENT_RIGHT:
- event.rel_x = (double) x / (double) ((sd->content_size_ratio) * w);
- event.rel_y = 1;
+ if (elm_widget_mirrored_get(obj))
+ {
+ event.rel_x = 1 - ((double) x / (double) ((sd->content_size_ratio) * w));
+ event.rel_y = 1;
+ }
+ else
+ {
+ event.rel_x = (double) x / (double) ((sd->content_size_ratio) * w);
+ event.rel_y = 1;
+ }
break;
}
evas_object_smart_callback_call(obj, SIG_SCROLL, (void *) &event);