Panes: Use orientation interface APIs instead of horizontal set/get APIs

Differential Revision: https://phab.enlightenment.org/D3919
This commit is contained in:
Amitesh Singh 2016-05-18 00:00:03 +09:00 committed by Jean-Philippe ANDRE
parent 546ff7bbba
commit f007380fb9
5 changed files with 84 additions and 38 deletions

View File

@ -76,7 +76,7 @@ test_panes(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf
// add panes // add panes
panes_h = elm_panes_add(win); panes_h = elm_panes_add(win);
elm_panes_horizontal_set(panes_h, EINA_TRUE); efl_orientation_set(panes_h, EFL_ORIENT_HORIZONTAL);
elm_panes_content_right_min_size_set(panes_h, 100); elm_panes_content_right_min_size_set(panes_h, 100);
elm_panes_content_right_size_set(panes_h, 0.3); elm_panes_content_right_size_set(panes_h, 0.3);
evas_object_show(panes_h); evas_object_show(panes_h);

View File

@ -52,7 +52,7 @@ _elm_panes_elm_widget_theme_apply(Eo *obj, Elm_Panes_Data *sd)
Eina_Bool int_ret = EINA_FALSE; Eina_Bool int_ret = EINA_FALSE;
ELM_LAYOUT_DATA_GET(obj, ld); ELM_LAYOUT_DATA_GET(obj, ld);
if (sd->horizontal) if (sd->orientation == EFL_ORIENT_HORIZONTAL)
eina_stringshare_replace(&ld->group, "horizontal"); eina_stringshare_replace(&ld->group, "horizontal");
else else
eina_stringshare_replace(&ld->group, "vertical"); eina_stringshare_replace(&ld->group, "vertical");
@ -100,7 +100,8 @@ _elm_panes_elm_widget_focus_next(Eo *obj, Elm_Panes_Data *sd, Elm_Focus_Directio
left = elm_layout_content_get(obj, "left"); left = elm_layout_content_get(obj, "left");
right = elm_layout_content_get(obj, "right"); right = elm_layout_content_get(obj, "right");
if (((sd->horizontal) && (h == 0.0)) || ((!sd->horizontal) && (w == 0.0))) if (((sd->orientation == EFL_ORIENT_HORIZONTAL) && (h == 0.0)) ||
((sd->orientation == EFL_ORIENT_VERTICAL) && (w == 0.0)))
{ {
return elm_widget_focus_next_get(right, dir, next, next_item); return elm_widget_focus_next_get(right, dir, next, next_item);
} }
@ -193,7 +194,7 @@ _set_min_size(void *data)
sizer = sizer / sum; sizer = sizer / sum;
sizel = sizel / sum; sizel = sizel / sum;
} }
if (sd->horizontal) if (sd->orientation == EFL_ORIENT_HORIZONTAL)
{ {
edje_object_part_drag_value_set edje_object_part_drag_value_set
(wd->resize_obj, "right_constraint", 0.0, (1 - sizer)); (wd->resize_obj, "right_constraint", 0.0, (1 - sizer));
@ -219,7 +220,7 @@ _update_fixed_sides(void *data)
if (sd->right_min_size_is_relative) if (sd->right_min_size_is_relative)
{ {
if (sd->horizontal) if (sd->orientation == EFL_ORIENT_HORIZONTAL)
sd->right_min_size = (int)(h * sd->right_min_relative_size); sd->right_min_size = (int)(h * sd->right_min_relative_size);
else else
sd->right_min_size =(int)(w * sd->right_min_relative_size); sd->right_min_size =(int)(w * sd->right_min_relative_size);
@ -227,15 +228,15 @@ _update_fixed_sides(void *data)
else else
{ {
sd->right_min_relative_size = 0; sd->right_min_relative_size = 0;
if (sd->horizontal && (h > 0)) if (sd->orientation == EFL_ORIENT_HORIZONTAL && (h > 0))
sd->right_min_relative_size = sd->right_min_size / (double)h; sd->right_min_relative_size = sd->right_min_size / (double)h;
if (!sd->horizontal && (w > 0)) if (sd->orientation == EFL_ORIENT_VERTICAL && (w > 0))
sd->right_min_relative_size = sd->right_min_size / (double)w; sd->right_min_relative_size = sd->right_min_size / (double)w;
} }
if(sd->left_min_size_is_relative) if(sd->left_min_size_is_relative)
{ {
if (sd->horizontal) if (sd->orientation == EFL_ORIENT_HORIZONTAL)
sd->left_min_size = (int)(h * sd->left_min_relative_size); sd->left_min_size = (int)(h * sd->left_min_relative_size);
else else
sd->left_min_size = (int)(w * sd->left_min_relative_size); sd->left_min_size = (int)(w * sd->left_min_relative_size);
@ -243,9 +244,9 @@ _update_fixed_sides(void *data)
else else
{ {
sd->left_min_relative_size = 0; sd->left_min_relative_size = 0;
if (sd->horizontal && (h > 0)) if (sd->orientation == EFL_ORIENT_HORIZONTAL && (h > 0))
sd->left_min_relative_size = sd->left_min_size / (double)h; sd->left_min_relative_size = sd->left_min_size / (double)h;
if (!sd->horizontal && (w > 0)) if (sd->orientation == EFL_ORIENT_VERTICAL && (w > 0))
sd->left_min_relative_size = sd->left_min_size / (double)w; sd->left_min_relative_size = sd->left_min_size / (double)w;
} }
_set_min_size(data); _set_min_size(data);
@ -385,7 +386,8 @@ _elm_panes_content_left_size_get(Eo *obj, Elm_Panes_Data *sd)
edje_object_part_drag_value_get edje_object_part_drag_value_get
(wd->resize_obj, "elm.bar", &w, &h); (wd->resize_obj, "elm.bar", &w, &h);
if (sd->horizontal) return h; if (sd->orientation == EFL_ORIENT_HORIZONTAL)
return h;
else return w; else return w;
} }
@ -397,7 +399,7 @@ _elm_panes_content_left_size_set(Eo *obj, Elm_Panes_Data *sd, double size)
if (size < 0.0) size = 0.0; if (size < 0.0) size = 0.0;
else if (size > 1.0) size = 1.0; else if (size > 1.0) size = 1.0;
if (sd->horizontal) if (sd->orientation == EFL_ORIENT_HORIZONTAL)
edje_object_part_drag_value_set edje_object_part_drag_value_set
(wd->resize_obj, "elm.bar", 0.0, size); (wd->resize_obj, "elm.bar", 0.0, size);
else else
@ -418,19 +420,46 @@ _elm_panes_content_right_size_set(Eo *obj, Elm_Panes_Data *_pd EINA_UNUSED, doub
} }
EOLIAN static void EOLIAN static void
_elm_panes_horizontal_set(Eo *obj, Elm_Panes_Data *sd, Eina_Bool horizontal) _elm_panes_efl_orientation_orientation_set(Eo *obj, Elm_Panes_Data *sd, Efl_Orient dir)
{ {
sd->horizontal = horizontal; if ((dir != EFL_ORIENT_HORIZONTAL) && (dir != EFL_ORIENT_VERTICAL))
return;
sd->orientation = dir;
elm_obj_widget_theme_apply(obj); elm_obj_widget_theme_apply(obj);
_update_fixed_sides(obj); _update_fixed_sides(obj);
elm_panes_content_left_size_set(obj, 0.5); elm_panes_content_left_size_set(obj, 0.5);
} }
EOLIAN static Eina_Bool EOLIAN static Efl_Orient
_elm_panes_horizontal_get(Eo *obj EINA_UNUSED, Elm_Panes_Data *sd) _elm_panes_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Elm_Panes_Data *sd)
{ {
return sd->horizontal; return sd->orientation;
}
EAPI void
elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal)
{
Efl_Orient orient;
if (horizontal)
orient = EFL_ORIENT_HORIZONTAL;
else
orient = EFL_ORIENT_VERTICAL;
efl_orientation_set(obj, orient);
}
EAPI Eina_Bool
elm_panes_horizontal_get(const Evas_Object *obj)
{
Efl_Orient orient = efl_orientation_get(obj);
if (orient == EFL_ORIENT_HORIZONTAL)
return EINA_TRUE;
return EINA_FALSE;
} }
EOLIAN static void EOLIAN static void

View File

@ -1,4 +1,5 @@
class Elm.Panes (Elm.Layout, Evas.Clickable_Interface) class Elm.Panes (Elm.Layout, Efl.Orientation,
Evas.Clickable_Interface)
{ {
legacy_prefix: elm_panes; legacy_prefix: elm_panes;
eo_prefix: elm_obj_panes; eo_prefix: elm_obj_panes;
@ -25,25 +26,6 @@ class Elm.Panes (Elm.Layout, Evas.Clickable_Interface)
size: double; [[Value between 0.0 and 1.0 representing size proportion of left side.]] size: double; [[Value between 0.0 and 1.0 representing size proportion of left side.]]
} }
} }
@property horizontal {
[[Set how to split and dispose each content.
Use this function to change how your panes is to be disposed:
vertically or horizontally.
Horizontal panes have "top" and "bottom" contents, vertical panes have
"left" and "right" contents.
By default panes is in a vertical mode.]]
set {
}
get {
}
values {
horizontal: bool; [[Use $true to make $obj to split panes
horizontally ("top" and "bottom" contents). $false to make it
vertically ("left" and "right" contents).]]
}
}
@property fixed { @property fixed {
[[Set whether the left and right panes can be resized by user interaction. [[Set whether the left and right panes can be resized by user interaction.
@ -139,6 +121,7 @@ class Elm.Panes (Elm.Layout, Evas.Clickable_Interface)
Elm.Widget.focus_next; Elm.Widget.focus_next;
Elm.Widget.theme_apply; Elm.Widget.theme_apply;
Elm.Layout.content_aliases.get; Elm.Layout.content_aliases.get;
Efl.Orientation.orientation;
} }
events { events {
press; press;

View File

@ -11,4 +11,38 @@
*/ */
EAPI Evas_Object *elm_panes_add(Evas_Object *parent); EAPI Evas_Object *elm_panes_add(Evas_Object *parent);
/**
* @brief Set how to split and dispose each content.
*
* Use this function to change how your panes is to be disposed: vertically or
* horizontally. Horizontal panes have "top" and "bottom" contents, vertical
* panes have "left" and "right" contents.
*
* By default panes is in a vertical mode.
*
* @param[in] horizontal Use @c true to make @c obj to split panes horizontally
* ("top" and "bottom" contents). @c false to make it vertically ("left" and
* "right" contents).
*
* @ingroup Elm_Panes
*/
EAPI void elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
/**
* @brief Set how to split and dispose each content.
*
* Use this function to change how your panes is to be disposed: vertically or
* horizontally. Horizontal panes have "top" and "bottom" contents, vertical
* panes have "left" and "right" contents.
*
* By default panes is in a vertical mode.
*
* @return Use @c true to make @c obj to split panes horizontally ("top" and
* "bottom" contents). @c false to make it vertically ("left" and "right"
* contents).
*
* @ingroup Elm_Panes
*/
EAPI Eina_Bool elm_panes_horizontal_get(const Evas_Object *obj);
#include "elm_panes.eo.legacy.h" #include "elm_panes.eo.legacy.h"

View File

@ -34,12 +34,12 @@ struct _Elm_Panes_Data
Eina_Bool move; Eina_Bool move;
} move; } move;
Efl_Orient orientation;
double left_min_relative_size; double left_min_relative_size;
double right_min_relative_size; double right_min_relative_size;
Evas_Coord left_min_size; Evas_Coord left_min_size;
Evas_Coord right_min_size; Evas_Coord right_min_size;
Eina_Bool double_clicked : 1; Eina_Bool double_clicked : 1;
Eina_Bool horizontal : 1;
Eina_Bool fixed : 1; Eina_Bool fixed : 1;
Eina_Bool left_min_size_is_relative : 1; Eina_Bool left_min_size_is_relative : 1;
Eina_Bool right_min_size_is_relative : 1; Eina_Bool right_min_size_is_relative : 1;