forked from enlightenment/efl
Ui.Box: Fix flow layout
Set align, fix usage with eo_add(EFL_UI_BOX_FLOW_CLASS).
This commit is contained in:
parent
f2eff88640
commit
e4889ca367
|
@ -626,6 +626,7 @@ lib_elementary_libelementary_la_SOURCES = \
|
||||||
lib/elementary/els_tooltip.c \
|
lib/elementary/els_tooltip.c \
|
||||||
lib/elementary/elu_ews_wm.c \
|
lib/elementary/elu_ews_wm.c \
|
||||||
lib/elementary/efl_ui_box.c \
|
lib/elementary/efl_ui_box.c \
|
||||||
|
lib/elementary/efl_ui_box_flow.c \
|
||||||
lib/elementary/efl_ui_box_layout.c \
|
lib/elementary/efl_ui_box_layout.c \
|
||||||
lib/elementary/efl_ui_grid.c \
|
lib/elementary/efl_ui_grid.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
|
@ -111,7 +111,7 @@ alignv_slider_cb(void *data, const Eo_Event *event)
|
||||||
return EO_CALLBACK_CONTINUE;
|
return EO_CALLBACK_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Efl_Ui_Box_Flow_Params s_flow_params = { 0.5, 0.5, 0, 0 };
|
static Efl_Ui_Box_Flow_Params s_flow_params = { 0, 0 };
|
||||||
static Eina_Bool flow = EINA_FALSE;
|
static Eina_Bool flow = EINA_FALSE;
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -154,15 +154,12 @@ left_check_cb(void *data, const Eo_Event *event)
|
||||||
Eina_Bool chk = elm_check_selected_get(event->obj);
|
Eina_Bool chk = elm_check_selected_get(event->obj);
|
||||||
if (chk)
|
if (chk)
|
||||||
{
|
{
|
||||||
s_flow_params.align_x = 0;
|
efl_pack_align_set(data, 0, 0.5);
|
||||||
s_flow_params.align_y = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_flow_params.align_x = 0.5;
|
efl_pack_align_set(data, 0.5, 0.5);
|
||||||
s_flow_params.align_y = 0.5;
|
|
||||||
}
|
}
|
||||||
efl_pack_layout_engine_set(data, flow ? EFL_UI_BOX_FLOW_CLASS : NULL, &s_flow_params);
|
|
||||||
return EO_CALLBACK_CONTINUE;
|
return EO_CALLBACK_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#include "efl_ui_box_private.h"
|
#include "efl_ui_box_private.h"
|
||||||
|
|
||||||
|
#define MY_CLASS EFL_UI_BOX_CLASS
|
||||||
|
#define MY_CLASS_NAME "Efl.Ui.Box"
|
||||||
|
|
||||||
/* COPIED FROM ELM_BOX
|
/* COPIED FROM ELM_BOX
|
||||||
* - removed transition stuff (TODO: add back - needs clean API first)
|
* - removed transition stuff (TODO: add back - needs clean API first)
|
||||||
*/
|
*/
|
||||||
|
@ -171,10 +174,10 @@ _efl_ui_box_efl_pack_engine_layout_do(Eo *klass EINA_UNUSED,
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
EOLIAN static Eina_Bool
|
||||||
_efl_ui_box_efl_pack_layout_engine_set(Eo *obj EINA_UNUSED, Efl_Ui_Box_Data *pd,
|
_efl_ui_box_efl_pack_layout_engine_set(Eo *obj, Efl_Ui_Box_Data *pd,
|
||||||
const Eo_Class *klass, const void *data)
|
const Eo_Class *klass, const void *data)
|
||||||
{
|
{
|
||||||
pd->layout_engine = klass ? klass : MY_CLASS;
|
pd->layout_engine = klass ? klass : eo_class_get(obj);
|
||||||
pd->layout_data = data;
|
pd->layout_data = data;
|
||||||
efl_pack_layout_request(obj);
|
efl_pack_layout_request(obj);
|
||||||
_sizing_eval(obj, pd);
|
_sizing_eval(obj, pd);
|
||||||
|
@ -272,7 +275,7 @@ _efl_ui_box_eo_base_constructor(Eo *obj, Efl_Ui_Box_Data *pd)
|
||||||
elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_FILLER);
|
elm_interface_atspi_accessible_role_set(obj, ELM_ATSPI_ROLE_FILLER);
|
||||||
|
|
||||||
pd->orient = EFL_ORIENT_RIGHT;
|
pd->orient = EFL_ORIENT_RIGHT;
|
||||||
pd->layout_engine = MY_CLASS;
|
pd->layout_engine = eo_class_get(obj);
|
||||||
pd->align.h = 0.5;
|
pd->align.h = 0.5;
|
||||||
pd->align.v = 0.5;
|
pd->align.v = 0.5;
|
||||||
|
|
||||||
|
@ -561,6 +564,8 @@ _efl_ui_box_efl_pack_padding_get(Eo *obj, Efl_Ui_Box_Data *pd, double *h, double
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_ui_box_efl_pack_pack_align_set(Eo *obj, Efl_Ui_Box_Data *pd, double h, double v)
|
_efl_ui_box_efl_pack_pack_align_set(Eo *obj, Efl_Ui_Box_Data *pd, double h, double v)
|
||||||
{
|
{
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
if (h < 0) h = -1;
|
if (h < 0) h = -1;
|
||||||
if (v < 0) v = -1;
|
if (v < 0) v = -1;
|
||||||
if (h > 1) h = 1;
|
if (h > 1) h = 1;
|
||||||
|
@ -568,6 +573,7 @@ _efl_ui_box_efl_pack_pack_align_set(Eo *obj, Efl_Ui_Box_Data *pd, double h, doub
|
||||||
pd->align.h = h;
|
pd->align.h = h;
|
||||||
pd->align.v = v;
|
pd->align.v = v;
|
||||||
|
|
||||||
|
evas_object_box_align_set(wd->resize_obj, h, v);
|
||||||
efl_pack_layout_request(obj);
|
efl_pack_layout_request(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
#include "efl_ui_box_private.h"
|
||||||
|
|
||||||
|
#define MY_CLASS EFL_UI_BOX_FLOW_CLASS
|
||||||
|
|
||||||
|
typedef struct _Efl_Ui_Box_Flow_Data Efl_Ui_Box_Flow_Data;
|
||||||
|
|
||||||
|
struct _Efl_Ui_Box_Flow_Data
|
||||||
|
{
|
||||||
|
Efl_Ui_Box_Flow_Params params;
|
||||||
|
};
|
||||||
|
|
||||||
|
EOLIAN static Eo *
|
||||||
|
_efl_ui_box_flow_eo_base_constructor(Eo *obj, Efl_Ui_Box_Flow_Data *pd)
|
||||||
|
{
|
||||||
|
eo_constructor(eo_super(obj, MY_CLASS));
|
||||||
|
efl_pack_layout_engine_set(obj, MY_CLASS, &pd->params);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_box_flow_box_flow_homogenous_set(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd, Eina_Bool val)
|
||||||
|
{
|
||||||
|
pd->params.homogenous = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static Eina_Bool
|
||||||
|
_efl_ui_box_flow_box_flow_homogenous_get(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd)
|
||||||
|
{
|
||||||
|
return pd->params.homogenous;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_box_flow_box_flow_max_size_set(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd, Eina_Bool val)
|
||||||
|
{
|
||||||
|
pd->params.max_size = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static Eina_Bool
|
||||||
|
_efl_ui_box_flow_box_flow_max_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Box_Flow_Data *pd)
|
||||||
|
{
|
||||||
|
return pd->params.max_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_box_flow_efl_pack_engine_layout_do(Eo_Class *klass EINA_UNUSED,
|
||||||
|
void *_pd EINA_UNUSED,
|
||||||
|
Eo *obj, const void *data)
|
||||||
|
{
|
||||||
|
void (*func)(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
|
||||||
|
const Efl_Ui_Box_Flow_Params *params = data;
|
||||||
|
Evas_Object_Box_Data *bd;
|
||||||
|
Efl_Ui_Box_Data *pd;
|
||||||
|
Eina_Bool homo = EINA_FALSE, maxsize = EINA_FALSE;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_FALSE_RETURN(eo_isa(obj, EFL_UI_BOX_CLASS));
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
bd = eo_data_scope_get(wd->resize_obj, EVAS_BOX_CLASS);
|
||||||
|
pd = eo_data_scope_get(obj, EFL_UI_BOX_CLASS);
|
||||||
|
|
||||||
|
if (params)
|
||||||
|
{
|
||||||
|
homo = params->homogenous;
|
||||||
|
maxsize = params->max_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_horiz(pd->orient))
|
||||||
|
{
|
||||||
|
if (homo)
|
||||||
|
{
|
||||||
|
if (maxsize)
|
||||||
|
func = evas_object_box_layout_homogeneous_max_size_horizontal;
|
||||||
|
else
|
||||||
|
func = evas_object_box_layout_homogeneous_horizontal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
func = evas_object_box_layout_flow_horizontal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (homo)
|
||||||
|
{
|
||||||
|
if (maxsize)
|
||||||
|
func = evas_object_box_layout_homogeneous_max_size_vertical;
|
||||||
|
else
|
||||||
|
func = evas_object_box_layout_homogeneous_vertical;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
func = evas_object_box_layout_flow_vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
func(wd->resize_obj, bd, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "efl_ui_box_flow.eo.c"
|
|
@ -1,7 +1,5 @@
|
||||||
struct Efl.Ui.Box_Flow_Params {
|
struct Efl.Ui.Box_Flow_Params {
|
||||||
[[Extra parameters for Box_Flow layout. Can be omitted.]]
|
[[Extra parameters for Box_Flow layout. Can be omitted.]]
|
||||||
align_x: double;
|
|
||||||
align_y: double;
|
|
||||||
homogenous: bool;
|
homogenous: bool;
|
||||||
max_size: bool;
|
max_size: bool;
|
||||||
}
|
}
|
||||||
|
@ -10,8 +8,24 @@ class Efl.Ui.Box_Flow (Efl.Ui.Box, Efl.Pack_Engine)
|
||||||
{
|
{
|
||||||
[[A custom layout engine for @Efl.Ui.Box.]]
|
[[A custom layout engine for @Efl.Ui.Box.]]
|
||||||
legacy_prefix: null;
|
legacy_prefix: null;
|
||||||
data: null;
|
methods {
|
||||||
|
@property box_flow_homogenous {
|
||||||
|
set {}
|
||||||
|
get {}
|
||||||
|
values {
|
||||||
|
val: bool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@property box_flow_max_size {
|
||||||
|
set {}
|
||||||
|
get {}
|
||||||
|
values {
|
||||||
|
val: bool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
implements {
|
implements {
|
||||||
|
Eo.Base.constructor;
|
||||||
Efl.Pack_Engine.layout_do;
|
Efl.Pack_Engine.layout_do;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -258,59 +258,3 @@ _efl_ui_box_custom_layout(Efl_Ui_Box *ui_box, Evas_Object_Box_Data *bd)
|
||||||
evas_object_geometry_set(item->obj, x, y, w, h);
|
evas_object_geometry_set(item->obj, x, y, w, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_ui_box_flow_efl_pack_engine_layout_do(Eo_Class *klass EINA_UNUSED,
|
|
||||||
void *_pd EINA_UNUSED,
|
|
||||||
Eo *obj, const void *data)
|
|
||||||
{
|
|
||||||
void (*func)(Evas_Box *obj, Evas_Object_Box_Data *priv, void *data);
|
|
||||||
const Efl_Ui_Box_Flow_Params *params = data;
|
|
||||||
double ax = 0.5, ay = 0.5;
|
|
||||||
Evas_Object_Box_Data *bd;
|
|
||||||
Efl_Ui_Box_Data *pd;
|
|
||||||
Eina_Bool homo = EINA_FALSE, maxsize = EINA_FALSE;
|
|
||||||
|
|
||||||
EINA_SAFETY_ON_FALSE_RETURN(eo_isa(obj, EFL_UI_BOX_CLASS));
|
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
|
||||||
bd = eo_data_scope_get(wd->resize_obj, EVAS_BOX_CLASS);
|
|
||||||
pd = eo_data_scope_get(obj, EFL_UI_BOX_CLASS);
|
|
||||||
|
|
||||||
// FIXME: I wonder how this data will work with bindings? (lifetime, etc...)
|
|
||||||
if (params)
|
|
||||||
{
|
|
||||||
ax = params->align_x;
|
|
||||||
ay = params->align_y;
|
|
||||||
homo = params->homogenous;
|
|
||||||
maxsize = params->max_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_horiz(pd->orient))
|
|
||||||
{
|
|
||||||
if (homo)
|
|
||||||
{
|
|
||||||
if (maxsize)
|
|
||||||
func = evas_object_box_layout_homogeneous_max_size_horizontal;
|
|
||||||
else
|
|
||||||
func = evas_object_box_layout_homogeneous_horizontal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
func = evas_object_box_layout_flow_horizontal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (homo)
|
|
||||||
{
|
|
||||||
if (maxsize)
|
|
||||||
func = evas_object_box_layout_homogeneous_max_size_vertical;
|
|
||||||
else
|
|
||||||
func = evas_object_box_layout_homogeneous_vertical;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
func = evas_object_box_layout_flow_vertical;
|
|
||||||
}
|
|
||||||
|
|
||||||
func(wd->resize_obj, bd, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "efl_ui_box_flow.eo.c"
|
|
||||||
|
|
|
@ -13,9 +13,6 @@
|
||||||
// FIXME: stop using Evas.Box
|
// FIXME: stop using Evas.Box
|
||||||
#include <../evas/canvas/evas_box.eo.h>
|
#include <../evas/canvas/evas_box.eo.h>
|
||||||
|
|
||||||
#define MY_CLASS EFL_UI_BOX_CLASS
|
|
||||||
#define MY_CLASS_NAME "Efl.Ui.Box"
|
|
||||||
|
|
||||||
// FIXME: stop using evas box
|
// FIXME: stop using evas box
|
||||||
void _efl_ui_box_custom_layout(Efl_Ui_Box *box, Evas_Object_Box_Data *priv);
|
void _efl_ui_box_custom_layout(Efl_Ui_Box *box, Evas_Object_Box_Data *priv);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue