forked from enlightenment/efl
Efl.Ui.Panes: allow panes to respect the min size of its content
refer T5359
This commit is contained in:
parent
f1a6497459
commit
0ca98280d4
|
@ -194,6 +194,7 @@ void test_menu2(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_panel(void *data, Evas_Object *obj, void *event_info);
|
void test_panel(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_panel2(void *data, Evas_Object *obj, void *event_info);
|
void test_panel2(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_panes(void *data, Evas_Object *obj, void *event_info);
|
void test_panes(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
void test_panes_minsize(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_calendar(void *data, Evas_Object *obj, void *event_info);
|
void test_calendar(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_calendar2(void *data, Evas_Object *obj, void *event_info);
|
void test_calendar2(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_calendar3(void *data, Evas_Object *obj, void *event_info);
|
void test_calendar3(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
@ -1000,7 +1001,7 @@ add_tests:
|
||||||
ADD_TEST(NULL, "Dividers", "Panel", test_panel);
|
ADD_TEST(NULL, "Dividers", "Panel", test_panel);
|
||||||
ADD_TEST(NULL, "Dividers", "Panel Scrollable", test_panel2);
|
ADD_TEST(NULL, "Dividers", "Panel Scrollable", test_panel2);
|
||||||
ADD_TEST(NULL, "Dividers", "Panes", test_panes);
|
ADD_TEST(NULL, "Dividers", "Panes", test_panes);
|
||||||
|
ADD_TEST(NULL, "Dividers", "Panes minsize", test_panes_minsize);
|
||||||
//------------------------------//
|
//------------------------------//
|
||||||
ADD_TEST(NULL, "Standardization", "Conformant", test_conformant);
|
ADD_TEST(NULL, "Standardization", "Conformant", test_conformant);
|
||||||
ADD_TEST(NULL, "Standardization", "Conformant 2", test_conformant2);
|
ADD_TEST(NULL, "Standardization", "Conformant 2", test_conformant2);
|
||||||
|
|
|
@ -103,3 +103,44 @@ test_panes(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_inf
|
||||||
evas_object_resize(win, 320, 400);
|
evas_object_resize(win, 320, 400);
|
||||||
evas_object_show(win);
|
evas_object_show(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_panes_minsize(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
|
{
|
||||||
|
Eo *win, *panes, *panes_h;
|
||||||
|
|
||||||
|
win = efl_add(EFL_UI_WIN_CLASS, NULL,
|
||||||
|
efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
|
||||||
|
efl_text_set(efl_added, "Panes Minsize"),
|
||||||
|
efl_ui_win_autodel_set(efl_added, EINA_TRUE)
|
||||||
|
);
|
||||||
|
|
||||||
|
panes = efl_add(EFL_UI_PANES_CLASS, win,
|
||||||
|
efl_gfx_size_hint_weight_set(efl_added, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND),
|
||||||
|
efl_content_set(win, efl_added)
|
||||||
|
);
|
||||||
|
|
||||||
|
efl_add(EFL_UI_BUTTON_CLASS, win,
|
||||||
|
efl_text_set(efl_added, "Left - min size 110, 110"),
|
||||||
|
efl_gfx_size_hint_min_set(efl_added, 110, 110),
|
||||||
|
efl_content_set(efl_part(panes, "first"), efl_added)
|
||||||
|
);
|
||||||
|
|
||||||
|
panes_h = efl_add(EFL_UI_PANES_CLASS, win,
|
||||||
|
efl_orientation_set(efl_added, EFL_ORIENT_HORIZONTAL),
|
||||||
|
efl_content_set(efl_part(panes, "second"), efl_added)
|
||||||
|
);
|
||||||
|
efl_add(EFL_UI_BUTTON_CLASS, win,
|
||||||
|
efl_text_set(efl_added, "Up - no min size"),
|
||||||
|
efl_content_set(efl_part(panes_h, "first"), efl_added)
|
||||||
|
);
|
||||||
|
|
||||||
|
efl_add(EFL_UI_BUTTON_CLASS, win,
|
||||||
|
efl_text_set(efl_added, "Down - min size 50 40"),
|
||||||
|
efl_gfx_size_hint_min_set(efl_added, 50, 40),
|
||||||
|
efl_content_set(efl_part(panes_h, "second"), efl_added)
|
||||||
|
);
|
||||||
|
|
||||||
|
efl_gfx_size_set(win, 320, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ static const Elm_Layout_Part_Alias_Description _content_aliases[] =
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void _set_min_size_new(void *data);
|
||||||
|
|
||||||
EOLIAN static Efl_Ui_Theme_Apply
|
EOLIAN static Efl_Ui_Theme_Apply
|
||||||
_efl_ui_panes_elm_widget_theme_apply(Eo *obj, Efl_Ui_Panes_Data *sd)
|
_efl_ui_panes_elm_widget_theme_apply(Eo *obj, Efl_Ui_Panes_Data *sd)
|
||||||
{
|
{
|
||||||
|
@ -173,6 +175,99 @@ _on_unpressed(void *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_ui_panes_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Panes_Data *sd)
|
||||||
|
{
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
|
Eo *first_content, *second_content;
|
||||||
|
int minw, minh;
|
||||||
|
|
||||||
|
first_content = efl_content_get(efl_part(obj, "first"));
|
||||||
|
second_content = efl_content_get(efl_part(obj, "second"));
|
||||||
|
|
||||||
|
if (first_content)
|
||||||
|
efl_gfx_size_hint_combined_min_get(first_content, &sd->first_minw, &sd->first_minh);
|
||||||
|
//TODO: use this for allow cropping?
|
||||||
|
//efl_gfx_size_hint_min_get(first_content, &sd->first_minw, &sd->first_minh);
|
||||||
|
if (second_content)
|
||||||
|
efl_gfx_size_hint_combined_min_get(second_content, &sd->second_minw, &sd->second_minh);
|
||||||
|
//TODO: use this for allow cropping
|
||||||
|
//efl_gfx_size_hint_min_get(second_content, &sd->second_minw, &sd->second_minh);
|
||||||
|
|
||||||
|
if (sd->orientation == EFL_ORIENT_HORIZONTAL)
|
||||||
|
{
|
||||||
|
edje_object_size_min_restricted_calc(wd->resize_obj, &minw, &minh,
|
||||||
|
MAX(sd->first_minw, sd->second_minw),
|
||||||
|
sd->first_minh + sd->second_minh);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
edje_object_size_min_restricted_calc(wd->resize_obj, &minw, &minh,
|
||||||
|
sd->first_minw + sd->second_minw,
|
||||||
|
MAX(sd->first_minh, sd->second_minh));
|
||||||
|
}
|
||||||
|
|
||||||
|
efl_gfx_size_hint_min_set(obj, minw, minh);
|
||||||
|
_set_min_size_new(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_set_min_size_new(void *data)
|
||||||
|
{
|
||||||
|
Eo *obj = data;
|
||||||
|
EFL_UI_PANES_DATA_GET(obj, sd);
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
|
int first_minw = sd->first_minw, first_minh = sd->first_minh;
|
||||||
|
int second_minw = sd->second_minw, second_minh = sd->second_minh;
|
||||||
|
int w, h;
|
||||||
|
double first_min_relative_size = 0.0, second_min_relative_size = 0.0;
|
||||||
|
|
||||||
|
evas_object_geometry_get(wd->resize_obj, NULL, NULL, &w, &h);
|
||||||
|
|
||||||
|
if (sd->orientation == EFL_ORIENT_HORIZONTAL)
|
||||||
|
{
|
||||||
|
if (first_minh + second_minh > h)
|
||||||
|
{
|
||||||
|
first_min_relative_size = first_minh/(first_minh + second_minh);
|
||||||
|
second_min_relative_size = second_minh/(first_minh + second_minh);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (h > 0)
|
||||||
|
{
|
||||||
|
first_min_relative_size = first_minh/(double)h;
|
||||||
|
second_min_relative_size = second_minh/(double)h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
edje_object_part_drag_value_set(wd->resize_obj, "right_constraint",
|
||||||
|
0.0, 1.0 - second_min_relative_size);
|
||||||
|
edje_object_part_drag_value_set(wd->resize_obj, "left_constraint",
|
||||||
|
0.0, first_min_relative_size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (first_minw + second_minw > w)
|
||||||
|
{
|
||||||
|
first_min_relative_size = first_minw/(first_minw + second_minw);
|
||||||
|
second_min_relative_size = second_minw/(first_minw + second_minw);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (w > 0)
|
||||||
|
{
|
||||||
|
first_min_relative_size = first_minw/(double)w;
|
||||||
|
second_min_relative_size = second_minw/(double)w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
edje_object_part_drag_value_set(wd->resize_obj, "right_constraint",
|
||||||
|
1.0 - second_min_relative_size, 0.0);
|
||||||
|
edje_object_part_drag_value_set(wd->resize_obj, "left_constraint",
|
||||||
|
first_min_relative_size, 0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_set_min_size(void *data)
|
_set_min_size(void *data)
|
||||||
{
|
{
|
||||||
|
@ -203,6 +298,7 @@ _set_min_size(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: call this in legacy api implementation
|
||||||
static void
|
static void
|
||||||
_update_fixed_sides(void *data)
|
_update_fixed_sides(void *data)
|
||||||
{
|
{
|
||||||
|
@ -242,6 +338,7 @@ _update_fixed_sides(void *data)
|
||||||
if (sd->orientation == EFL_ORIENT_VERTICAL && (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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +348,9 @@ _on_resize(void *data,
|
||||||
Evas_Object *obj EINA_UNUSED,
|
Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
_update_fixed_sides(data);
|
//TODO: needs a flag to enable the old behaviour
|
||||||
|
//_update_fixed_sides(data);
|
||||||
|
_set_min_size_new(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
@ -562,7 +661,8 @@ ELM_LAYOUT_CONTENT_ALIASES_IMPLEMENT(MY_CLASS_PFX);
|
||||||
|
|
||||||
#define EFL_UI_PANES_EXTRA_OPS \
|
#define EFL_UI_PANES_EXTRA_OPS \
|
||||||
EFL_CANVAS_GROUP_ADD_OPS(efl_ui_panes), \
|
EFL_CANVAS_GROUP_ADD_OPS(efl_ui_panes), \
|
||||||
ELM_LAYOUT_CONTENT_ALIASES_OPS(MY_CLASS_PFX)
|
ELM_LAYOUT_CONTENT_ALIASES_OPS(MY_CLASS_PFX), \
|
||||||
|
ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_panes)
|
||||||
|
|
||||||
|
|
||||||
#include "efl_ui_panes.eo.c"
|
#include "efl_ui_panes.eo.c"
|
||||||
|
|
|
@ -37,6 +37,8 @@ struct _Efl_Ui_Panes_Data
|
||||||
Efl_Orient orientation;
|
Efl_Orient orientation;
|
||||||
double left_min_relative_size;
|
double left_min_relative_size;
|
||||||
double right_min_relative_size;
|
double right_min_relative_size;
|
||||||
|
int first_minw, first_minh;
|
||||||
|
int second_minw, second_minh;
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue