scroller segv fix (list showed it).
check theme item placeholder. doing gfx.
SVN revision: 39161
}
}
}
+
+///////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/check/base/default";
+ images {
+ image: "shelf_inset.png" COMP;
+ image: "bt_basew.png" COMP;
+ image: "bt_bases.png" COMP;
+ image: "bt_hilightw.png" COMP;
+ image: "tog_base.png" COMP;
+ }
+ parts {
+ part { name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.relative: 1.0 0.0;
+ rel1.offset: -4 3;
+ rel2.offset: -4 -4;
+ align: 1.0 0.5;
+ min: 96 16;
+ max: 96 16;
+ aspect: 4.0 4.0;
+ aspect_preference: VERTICAL;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "button";
+ type: RECT;
+ scale: 1;
+ clip_to: "clipper";
+ mouse_events: 1;
+ dragable {
+ x: 1 1 0;
+ y: 0 0 0;
+ confine: "bg";
+ }
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to: "bg";
+ rel2.to: "bg";
+ min: 16 16;
+ max: 16 16;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "button_events";
+ type: RECT;
+ dragable {
+ events: "button";
+ }
+ description { state: "default" 0.0;
+ rel1.to_x: "bg";
+ rel1.offset: 0 0;
+ rel1.relative: 0.0 0.0;
+ rel2.to_x: "bg";
+ rel2.offset: -1 -1;
+ rel2.relative: 1.0 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "onrect";
+ type: RECT;
+ scale: 1;
+ clip_to: "clipper";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "button";
+ rel1.relative: -5.0 0.0;
+ rel2.to: "button";
+ rel2.relative: 0.0 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "offrect";
+ type: RECT;
+ scale: 1;
+ clip_to: "clipper";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "button";
+ rel1.relative: 1.0 0.0;
+ rel2.to: "button";
+ rel2.relative: 6.0 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "togbase";
+ mouse_events: 0;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.to: "onrect";
+ rel2.to: "offrect";
+ image.normal: "tog_base.png";
+ }
+ }
+ part { name: "elm.offtext";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to_x: "offrect";
+ rel2.to_x: "offrect";
+ color: 0 0 0 255;
+ text {
+ font: "Sans,Edje-Vera";
+ size: 10;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "OFF";
+ }
+ }
+ }
+ part { name: "elm.ontext";
+ type: TEXT;
+ effect: SOFT_SHADOW;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to_x: "onrect";
+ rel1.offset: 1 1;
+ rel2.to_x: "onrect";
+ rel2.offset: 0 0;
+ color: 224 224 224 255;
+ color3: 0 0 0 64;
+ text {
+ font: "Sans,Edje-Vera";
+ size: 10;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "ON";
+ }
+ }
+ }
+ part { name: "conf_over";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.offset: -1 -1;
+ rel1.to: "bg";
+ rel2.offset: 0 0;
+ rel2.to: "bg";
+ image {
+ normal: "shelf_inset.png";
+ border: 7 7 7 7;
+ middle: 0;
+ }
+ fill.smooth : 0;
+ }
+ }
+ part { name: "button0";
+ mouse_events: 0;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.to: "button2";
+ rel1.offset: -4 -4;
+ rel2.to: "button2";
+ rel2.offset: 3 3;
+ image {
+ normal: "bt_bases.png";
+ border: 11 11 11 11;
+ }
+ image.middle: SOLID;
+ color: 255 255 255 128;
+ }
+ }
+ part { name: "button2";
+ mouse_events: 0;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.to: "button";
+ rel1.offset: -2 -2;
+ rel2.to: "button";
+ rel2.offset: 1 1;
+ image {
+ normal: "bt_basew.png";
+ border: 7 7 7 7;
+ }
+ image.middle: SOLID;
+ }
+ }
+ part { name: "button3";
+ mouse_events: 0;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ rel1.to: "button2";
+ rel2.to: "button2";
+ rel2.relative: 1.0 0.5;
+ image {
+ normal: "bt_hilightw.png";
+ border: 4 4 4 0;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+// fixed: 1 1;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1.offset: 4 4;
+ rel2.relative: 0.0 1.0;
+ rel2.offset: 3 -5;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+// fixed: 0 0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ rel2.offset: 4 -5;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1.to_x: "elm.swallow.content";
+ rel1.relative: 1.0 0.0;
+ rel1.offset: 0 4;
+ rel2.to_x: "bg";
+ rel2.relative: 0.0 1.0;
+ rel2.offset: -5 -5;
+ color: 0 0 0 255;
+ text {
+ font: "Sans,Edje-Vera";
+ size: 10;
+ min: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ text.min: 1 1;
+ }
+ }
+ }
+ programs {
+ program { name: "drag_end";
+ signal: "mouse,up,1";
+ source: "button";
+ script {
+ new Float:dx, Float:dy;
+ get_drag(PART:"button", dx, dy);
+ if (dx > 0.5)
+ {
+ set_drag(PART:"button", 1.0, 0.0);
+ emit("elm,action,check,on", "");
+ }
+ else
+ {
+ set_drag(PART:"button", 0.0, 0.0);
+ emit("elm,action,check,off", "");
+ }
+ }
+ }
+ program { name: "check_on";
+ signal: "elm,state,check,on";
+ source: "elm";
+ script {
+ set_drag(PART:"button", 100.0, 0.0);
+ }
+ }
+ program { name: "check_off";
+ signal: "elm,state,check,off";
+ source: "elm";
+ script {
+ set_drag(PART:"button", 0.0, 0.0);
+ }
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ }
+ }
}
itc1.func.state_get = gl_state_get;
itc1.func.del = gl_del;
- for (i = 0; i < 10000; i++)
+ for (i = 0; i < 2000; i++)
{
gli = elm_genlist_item_append(gl, &itc1,
(void *)i/* item data */,
}
static void
+my_bt_32(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *win, *bg, *bx, *ic, *tg;
+ char buf[PATH_MAX];
+
+ win = elm_win_add(NULL, "check", ELM_WIN_BASIC);
+ elm_win_title_set(win, "Checks");
+ elm_win_autodel_set(win, 1);
+
+ bg = elm_bg_add(win);
+ elm_win_resize_object_add(win, bg);
+ evas_object_size_hint_weight_set(bg, 1.0, 1.0);
+ evas_object_show(bg);
+
+ bx = elm_box_add(win);
+ evas_object_size_hint_weight_set(bx, 1.0, 1.0);
+ elm_win_resize_object_add(win, bx);
+ evas_object_show(bx);
+
+ ic = elm_icon_add(win);
+ snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+ elm_icon_file_set(ic, buf, NULL);
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ tg = elm_check_add(win);
+ evas_object_size_hint_weight_set(tg, 1.0, 1.0);
+ evas_object_size_hint_align_set(tg, -1.0, 0.5);
+ elm_check_label_set(tg, "Icon sized to check");
+ elm_check_icon_set(tg, ic);
+ elm_check_state_set(tg, 1);
+ elm_box_pack_end(bx, tg);
+ evas_object_show(tg);
+ evas_object_show(ic);
+
+ ic = elm_icon_add(win);
+ snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+ elm_icon_file_set(ic, buf, NULL);
+ elm_icon_scale_set(ic, 0, 0);
+ tg = elm_check_add(win);
+ elm_check_label_set(tg, "Icon no scale");
+ elm_check_icon_set(tg, ic);
+ elm_box_pack_end(bx, tg);
+ evas_object_show(tg);
+ evas_object_show(ic);
+
+ tg = elm_check_add(win);
+ elm_check_label_set(tg, "Label Only");
+ elm_box_pack_end(bx, tg);
+ evas_object_show(tg);
+
+ ic = elm_icon_add(win);
+ snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+ elm_icon_file_set(ic, buf, NULL);
+ elm_icon_scale_set(ic, 0, 0);
+ tg = elm_check_add(win);
+ elm_check_icon_set(tg, ic);
+ elm_box_pack_end(bx, tg);
+ evas_object_show(tg);
+ evas_object_show(ic);
+
+ evas_object_show(win);
+}
+
+static void
my_win_main(void)
{
Evas_Object *win, *bg, *bx0, *lb, *li, *fr;
elm_list_item_append(li, "Genlist", NULL, NULL, my_bt_29, NULL);
elm_list_item_append(li, "Genlist 2", NULL, NULL, my_bt_30, NULL);
elm_list_item_append(li, "Genlist 3", NULL, NULL, my_bt_31, NULL);
+ elm_list_item_append(li, "Checks", NULL, NULL, my_bt_32, NULL);
elm_list_go(li);
// * <evas scale cache>
// * <evas shared cache>
//
+// * multiple genlist item styles (multi-label, 1 icon + 2 line label, header etc.)
// * carousel selector widget
// * auto-size label/text that adapts text size to its allocated region
// * [ scrollable dropdown combo box ]
// * full window in window widget (so move/resize of window object does as you'd expect a child window to do within the canvas)
//
//// (improvements - low priority)
+// * test for all bubble styles
+// * test for all frame styles
+// * test for all genlist item styles
+// * need a way to attach a "dnd detector" to any object
+// * need a dnd handler (able to hook to dnd detector)
// * need another sample theme
// * need a way to set a preferred size of a widget (but not min or max).
// * merge with gurana
// * use evas's new box instead of a box smart
// * use evas's table instead of a table smart
// * use stack for win widget
-// * prepend or append theme files from code for an app to allow an app to augment the theme eithe rby forcibly overriding things with its own theme file (so it can ship some custom elements that always override user theme) and so it can also provide a final (even after default) fallback for "extended" styles of its own (but thus allowing themes to overried its extensions if they want)
// * determine prefix of app dynamically and export calls to get prefix info
// * load config from file
// * load config from x property
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
free(wd);
}
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default");
edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
_sizing_eval(obj);
{
Widget_Data *wd = elm_widget_data_get(data);
Evas_Coord x, y, w, h;
+ if (!wd) return;
elm_widget_show_region_get(obj, &x, &y, &w, &h);
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
}
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Coord vw, vh, minw, minh, maxw, maxh, w, h, vmw, vmh;
double xw, xy;
-
+ if (!wd) return;
evas_object_size_hint_min_get(wd->content, &minw, &minh);
evas_object_size_hint_max_get(wd->content, &maxw, &maxh);
evas_object_size_hint_weight_get(wd->content, &xw, &xy);
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *sub = event_info;
+ if (!wd) return;
if (sub == wd->content)
{
elm_widget_on_show_region_hook_set(wd->content, NULL, NULL);
elm_scroller_content_set(Evas_Object *obj, Evas_Object *content)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
if ((wd->content != content) && (wd->content))
elm_widget_sub_object_del(obj, wd->content);
wd->content = content;
elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
wd->min_w = w;
wd->min_h = h;
_sizing_eval(obj);
elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
}