From 6890023f7145e52ba1803495bd8177f9031673de Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 29 Oct 2005 11:51:19 +0000 Subject: [PATCH] a scrollview smart plus gfx for it. SVN revision: 18103 --- configure.in | 2 +- data/themes/Makefile.am | 3 +- data/themes/default.edc | 3 +- data/themes/default_scrollframe.edc | 737 ++++++++++++++++++++++++++ data/themes/images/Makefile.am | 16 +- data/themes/images/e17_sb_barh1.png | Bin 0 -> 2092 bytes data/themes/images/e17_sb_barh2.png | Bin 0 -> 2078 bytes data/themes/images/e17_sb_barv1.png | Bin 0 -> 2268 bytes data/themes/images/e17_sb_barv2.png | Bin 0 -> 2230 bytes data/themes/images/e17_sb_btd1.png | Bin 0 -> 726 bytes data/themes/images/e17_sb_btd2.png | Bin 0 -> 718 bytes data/themes/images/e17_sb_btl1.png | Bin 0 -> 725 bytes data/themes/images/e17_sb_btl2.png | Bin 0 -> 715 bytes data/themes/images/e17_sb_btr1.png | Bin 0 -> 720 bytes data/themes/images/e17_sb_btr2.png | Bin 0 -> 718 bytes data/themes/images/e17_sb_btu1.png | Bin 0 -> 721 bytes data/themes/images/e17_sb_btu2.png | Bin 0 -> 715 bytes data/themes/images/e17_sb_runnerh.png | Bin 0 -> 144 bytes data/themes/images/e17_sb_runnerv.png | Bin 0 -> 150 bytes src/bin/Makefile.am | 2 + src/bin/e_includes.h | 1 + src/bin/e_intl.c | 1 + src/bin/e_pan.c | 12 +- src/bin/e_pan.h | 16 +- src/bin/e_scrollframe.c | 611 +++++++++++++++++++++ src/bin/e_scrollframe.h | 30 ++ src/bin/e_test.c | 25 + 27 files changed, 1440 insertions(+), 19 deletions(-) create mode 100644 data/themes/default_scrollframe.edc create mode 100644 data/themes/images/e17_sb_barh1.png create mode 100644 data/themes/images/e17_sb_barh2.png create mode 100644 data/themes/images/e17_sb_barv1.png create mode 100644 data/themes/images/e17_sb_barv2.png create mode 100644 data/themes/images/e17_sb_btd1.png create mode 100644 data/themes/images/e17_sb_btd2.png create mode 100644 data/themes/images/e17_sb_btl1.png create mode 100644 data/themes/images/e17_sb_btl2.png create mode 100644 data/themes/images/e17_sb_btr1.png create mode 100644 data/themes/images/e17_sb_btr2.png create mode 100644 data/themes/images/e17_sb_btu1.png create mode 100644 data/themes/images/e17_sb_btu2.png create mode 100644 data/themes/images/e17_sb_runnerh.png create mode 100644 data/themes/images/e17_sb_runnerv.png create mode 100644 src/bin/e_scrollframe.c create mode 100644 src/bin/e_scrollframe.h diff --git a/configure.in b/configure.in index a75809bad..564f82552 100644 --- a/configure.in +++ b/configure.in @@ -166,7 +166,7 @@ CPPFLAGS="${PCPPFLAGS}" AC_SUBST(cf_cflags) AC_SUBST(cf_libs) -ALL_LINGUAS="bg de es fi fr ja pl pt ru zh_CN hu sl it cs da sk sv nb" +ALL_LINGUAS="bg de es fi fr ja pl pt ru zh_CN hu sl it cs da sk sv nb nl" AC_SUBST(ALL_LINGUAS) AM_GNU_GETTEXT([external]) diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 5082182de..34101b001 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -45,7 +45,8 @@ default_check.edc \ default_radio.edc \ default_frame.edc \ default_label.edc \ -default_button.edc +default_button.edc \ +default_scrollframe.edc default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ diff --git a/data/themes/default.edc b/data/themes/default.edc index 21b6cf1f5..e86cb987e 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -54,6 +54,7 @@ collections { #include "default_radio.edc" #include "default_frame.edc" #include "default_button.edc" -#include "default_label.edc" +#include "default_label.edc" +#include "default_scrollframe.edc" } diff --git a/data/themes/default_scrollframe.edc b/data/themes/default_scrollframe.edc new file mode 100644 index 000000000..5e17aa33d --- /dev/null +++ b/data/themes/default_scrollframe.edc @@ -0,0 +1,737 @@ +images { + image: "e17_ibar_bg_v.png" COMP; + image: "e17_ibar_over_v.png" COMP; + image: "e17_sb_btd1.png" COMP; + image: "e17_sb_btd2.png" COMP; + image: "e17_sb_btu1.png" COMP; + image: "e17_sb_btu2.png" COMP; + image: "e17_sb_btl1.png" COMP; + image: "e17_sb_btl2.png" COMP; + image: "e17_sb_btr1.png" COMP; + image: "e17_sb_btr2.png" COMP; + image: "e17_sb_btu1.png" COMP; + image: "e17_sb_barh1.png" COMP; + image: "e17_sb_barh2.png" COMP; + image: "e17_sb_barv1.png" COMP; + image: "e17_sb_barv2.png" COMP; + image: "e17_sb_runnerh.png" COMP; + image: "e17_sb_runnerv.png" COMP; + image: "e17_scrollbar_hdrag_thumb.png" COMP; + image: "e17_scrollbar_vdrag_thumb.png" COMP; +} + +group { + name: "widgets/scrollframe"; + parts { + part { + name: "bg"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "e17_ibar_bg_v.png"; + border: 7 7 7 7; + } + fill { + smooth : 0; + } + } + } + part { + name: "clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to: "bg"; + offset: 4 4; + } + rel2 { + to: "bg"; + offset: -5 -5; + } + } + } + part { + name: "item"; + clip_to: "clipper"; + type: SWALLOW; + mouse_events: 0; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel2 { + relative: 0.0 0.0; + offset: -1 -1; + to_x: "sb_vbar"; + to_y: "sb_hbar"; + } + } + } + part { + name: "conf_over"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to: "bg"; + } + rel2 { + to: "bg"; + } + image { + normal: "e17_ibar_over_v.png"; + border: 13 13 13 13; + } + fill { + smooth : 0; + } + } + } + part { + name: "sb_vbar"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + align: 1.0 0.0; + rel1 { + to: "bg"; + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + to: "bg"; + relative: 1.0 0.0; + offset: -5 -1; + to_y: "sb_hbar"; + } + } + description { + state: "hidden" 0.0; + visible: 0; + max: 0 99999; + rel1 { + to: "bg"; + relative: 1.0 0.0; + offset: -4 4; + } + rel2 { + to: "bg"; + relative: 1.0 0.0; + offset: -4 -1; + to_y: "sb_hbar"; + } + } + } + part { + name: "sb_vbar_base"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 0.0 1.0; + offset: 0 0; + to: "sb_vbar_a1"; + } + rel2 { + relative: 1.0 0.0; + offset: -1 -1; + to: "sb_vbar_a2"; + } + } + } + part { + name: "sb_vbar_runner"; + clip_to: "sb_vbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 2 99999; + rel1 { + to: "sb_vbar_base"; + } + rel2 { + to: "sb_vbar_base"; + } + image { + normal: "e17_sb_runnerv.png"; + border: 0 0 4 4; + } + fill { + smooth: 0; + } + } + } + part { + name: "sb_vbar_p1"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 0.0 1.0; + offset: 0 0; + to: "sb_vbar_a1"; + } + rel2 { + relative: 1.0 0.0; + offset: -1 -1; + to: "vbar_bar"; + } + } + } + part { + name: "sb_vbar_p2"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 0.0 1.0; + offset: 0 0; + to: "vbar_bar"; + } + rel2 { + relative: 1.0 0.0; + offset: -1 -1; + to: "sb_vbar_a2"; + } + } + } + part { + name: "vbar_bar"; + clip_to: "sb_vbar"; + mouse_events: 1; + dragable { + x: 0 0 0; + y: 1 1 0; + confine: "sb_vbar_base"; + } + description { + state: "default" 0.0; + min: 16 16; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar_base"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar_base"; + } + image { + normal: "e17_sb_barv1.png"; + border: 5 5 5 5; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_barv2.png"; + } + } + } + part { + name: "vbar_bar_thumb"; + clip_to: "sb_vbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 8 8; + min: 8 8; + rel1 { + to: "vbar_bar"; + } + rel2 { + to: "vbar_bar"; + } + image { + normal: "e17_scrollbar_vdrag_thumb.png"; + } + } + } + part { + name: "sb_vbar_a1"; + type: IMAGE; + mouse_events: 1; + clip_to: "sb_vbar"; + description { + state: "default" 0.0; + align: 0.5 0.0; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + rel1 { + to: "sb_vbar"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "sb_vbar"; + relative: 1.0 0.0; + offset: -1 0; + } + image { + normal: "e17_sb_btu1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_btu2.png"; + } + } + } + part { + name: "sb_vbar_a2"; + type: IMAGE; + mouse_events: 1; + clip_to: "sb_vbar"; + description { + state: "default" 0.0; + align: 0.5 1.0; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + rel1 { + to: "sb_vbar"; + relative: 0.0 1.0; + offset: 0 -1; + } + rel2 { + to: "sb_vbar"; + relative: 1.0 1.0; + offset: -1 -1; + } + image { + normal: "e17_sb_btd1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_btd2.png"; + } + } + } + part { + name: "sb_hbar"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + align: 0.0 1.0; + rel1 { + to: "bg"; + relative: 0.0 1.0; + offset: 4 -5; + } + rel2 { + to: "bg"; + relative: 0.0 1.0; + offset: -1 -5; + to_x: "sb_vbar"; + } + } + description { + state: "hidden" 0.0; + visible: 0; + rel1 { + to: "bg"; + relative: 0.0 1.0; + offset: 0 -4; + } + rel2 { + to: "bg"; + relative: 0.0 1.0; + offset: -1 -4; + to_x: "sb_vbar"; + } + } + } + part { + name: "sb_hbar_base"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 1.0 0.0; + offset: 0 0; + to: "sb_hbar_a1"; + } + rel2 { + relative: 0.0 1.0; + offset: -1 -1; + to: "sb_hbar_a2"; + } + } + } + part { + name: "sb_hbar_runner"; + clip_to: "sb_hbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 99999 2; + rel1 { + to: "sb_hbar_base"; + } + rel2 { + to: "sb_hbar_base"; + } + image { + normal: "e17_sb_runnerh.png"; + border: 4 4 0 0; + } + fill { + smooth: 0; + } + } + } + part { + name: "sb_hbar_p1"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 1.0 0.0; + offset: 0 0; + to: "sb_hbar_a1"; + } + rel2 { + relative: 0.0 1.0; + offset: -1 -1; + to: "hbar_bar"; + } + } + } + part { + name: "sb_hbar_p2"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 1.0 0.0; + offset: 0 0; + to: "hbar_bar"; + } + rel2 { + relative: 0.0 1.0; + offset: -1 -1; + to: "sb_hbar_a2"; + } + } + } + part { + name: "hbar_bar"; + clip_to: "sb_hbar"; + mouse_events: 1; + dragable { + x: 1 1 0; + y: 0 0 0; + confine: "sb_hbar_base"; + } + description { + state: "default" 0.0; + min: 16 16; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar_base"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar_base"; + } + image { + normal: "e17_sb_barh1.png"; + border: 5 5 5 5; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_barh2.png"; + } + } + } + part { + name: "hbar_bar_thumb"; + clip_to: "sb_hbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 8 8; + min: 8 8; + rel1 { + to: "hbar_bar"; + } + rel2 { + to: "hbar_bar"; + } + image { + normal: "e17_scrollbar_hdrag_thumb.png"; + } + } + } + part { + name: "sb_hbar_a1"; + type: IMAGE; + mouse_events: 1; + clip_to: "sb_hbar"; + description { + state: "default" 0.0; + align: 0.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + to: "sb_hbar"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "sb_hbar"; + relative: 0.0 1.0; + offset: 0 -1; + } + image { + normal: "e17_sb_btl1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_btl2.png"; + } + } + } + part { + name: "sb_hbar_a2"; + type: IMAGE; + mouse_events: 1; + clip_to: "sb_hbar"; + description { + state: "default" 0.0; + align: 1.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + to: "sb_hbar"; + relative: 1.0 0.0; + offset: -1 0; + } + rel2 { + to: "sb_hbar"; + relative: 1.0 1.0; + offset: -1 -1; + } + image { + normal: "e17_sb_btr1.png"; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_btr2.png"; + } + } + } + } + programs { + program { + name: "sb_vbar_show"; + signal: "vbar"; + source: "show"; + action: STATE_SET "default" 0.0; + target: "sb_vbar"; + } + program { + name: "sb_vbar_hide"; + signal: "vbar"; + source: "hide"; + action: STATE_SET "hidden" 0.0; + target: "sb_vbar"; + } + program { + name: "sb_hbar_show"; + signal: "hbar"; + source: "show"; + action: STATE_SET "default" 0.0; + target: "sb_hbar"; + } + program { + name: "sb_hbar_hide"; + signal: "hbar"; + source: "hide"; + action: STATE_SET "hidden" 0.0; + target: "sb_hbar"; + } + + program { + name: "sb_vbar_a1_down"; + signal: "mouse,down,1"; + source: "sb_vbar_a1"; + action: STATE_SET "clicked" 0.0; + target: "sb_vbar_a1"; + } + program { + name: "sb_vbar_a1_down2"; + signal: "mouse,down,1"; + source: "sb_vbar_a1"; + action: DRAG_VAL_STEP 0.0 -1.0; + target: "vbar_bar"; + } + program { + name: "sb_vbar_a1_up"; + signal: "mouse,up,1"; + source: "sb_vbar_a1"; + action: STATE_SET "default" 0.0; + target: "sb_vbar_a1"; + } + program { + name: "sb_vbar_a2_down"; + signal: "mouse,down,1"; + source: "sb_vbar_a2"; + action: STATE_SET "clicked" 0.0; + target: "sb_vbar_a2"; + } + program { + name: "sb_vbar_a2_down2"; + signal: "mouse,down,1"; + source: "sb_vbar_a2"; + action: DRAG_VAL_STEP 0.0 1.0; + target: "vbar_bar"; + } + program { + name: "sb_vbar_a2_up"; + signal: "mouse,up,1"; + source: "sb_vbar_a2"; + action: STATE_SET "default" 0.0; + target: "sb_vbar_a2"; + } + program { + name: "sb_vbar_p1_down"; + signal: "mouse,down,1"; + source: "sb_vbar_p1"; + action: DRAG_VAL_PAGE 0.0 -1.0; + target: "vbar_bar"; + } + program { + name: "sb_vbar_p2_down"; + signal: "mouse,down,1"; + source: "sb_vbar_p2"; + action: DRAG_VAL_PAGE 0.0 1.0; + target: "vbar_bar"; + } + program { + name: "sb_vbar_down"; + signal: "mouse,down,1"; + source: "vbar_bar"; + action: STATE_SET "clicked" 0.0; + target: "vbar_bar"; + } + program { + name: "sb_vbar_up"; + signal: "mouse,up,1"; + source: "vbar_bar"; + action: STATE_SET "default" 0.0; + target: "vbar_bar"; + } + program { + name: "sb_hbar_a1_down"; + signal: "mouse,down,1"; + source: "sb_hbar_a1"; + action: STATE_SET "clicked" 0.0; + target: "sb_hbar_a1"; + } + program { + name: "sb_hbar_a1_down2"; + signal: "mouse,down,1"; + source: "sb_hbar_a1"; + action: DRAG_VAL_STEP -1.0 0.0; + target: "hbar_bar"; + } + program { + name: "sb_hbar_a1_up"; + signal: "mouse,up,1"; + source: "sb_hbar_a1"; + action: STATE_SET "default" 0.0; + target: "sb_hbar_a1"; + } + program { + name: "sb_hbar_a2_down"; + signal: "mouse,down,1"; + source: "sb_hbar_a2"; + action: STATE_SET "clicked" 0.0; + target: "sb_hbar_a2"; + } + program { + name: "sb_hbar_a2_down2"; + signal: "mouse,down,1"; + source: "sb_hbar_a2"; + action: DRAG_VAL_STEP 1.0 0.0; + target: "hbar_bar"; + } + program { + name: "sb_hbar_a2_up"; + signal: "mouse,up,1"; + source: "sb_hbar_a2"; + action: STATE_SET "default" 0.0; + target: "sb_hbar_a2"; + } + program { + name: "sb_hbar_p1_down"; + signal: "mouse,down,1"; + source: "sb_hbar_p1"; + action: DRAG_VAL_PAGE -1.0 0.0; + target: "hbar_bar"; + } + program { + name: "sb_hbar_p2_down"; + signal: "mouse,down,1"; + source: "sb_hbar_p2"; + action: DRAG_VAL_PAGE 1.0 0.0; + target: "hbar_bar"; + } + program { + name: "sb_hbar_down"; + signal: "mouse,down,1"; + source: "hbar_bar"; + action: STATE_SET "clicked" 0.0; + target: "hbar_bar"; + } + program { + name: "sb_hbar_up"; + signal: "mouse,up,1"; + source: "hbar_bar"; + action: STATE_SET "default" 0.0; + target: "hbar_bar"; + } + } +} diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index 0203af2b9..e4bbe17b0 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -403,4 +403,18 @@ e17_button_sm.png \ e17_button_sm2.png \ e17_button_sm_disabled.png \ e17_menu_check0.png \ -e17_menu_radio0.png +e17_menu_radio0.png \ +e17_sb_barh1.png \ +e17_sb_barh2.png \ +e17_sb_barv1.png \ +e17_sb_barv2.png \ +e17_sb_btd1.png \ +e17_sb_btd2.png \ +e17_sb_btl1.png \ +e17_sb_btl2.png \ +e17_sb_btr1.png \ +e17_sb_btr2.png \ +e17_sb_btu1.png \ +e17_sb_btu2.png \ +e17_sb_runnerh.png \ +e17_sb_runnerv.png diff --git a/data/themes/images/e17_sb_barh1.png b/data/themes/images/e17_sb_barh1.png new file mode 100644 index 0000000000000000000000000000000000000000..c62c1e4dbf1044948f30d6155443129726caf0e6 GIT binary patch literal 2092 zcmV+{2-Ek8P)k8%1}ymqu*;Gxvtwnkin5D@L;yQ7 zvYjA5``zg}EV{b8dhWIP0KAb#Gt<-E)7^FY)Tz4HXomq8aax@D*gsz%|KEqwRX~kX z9Xxk|Pvg7?+yqMMpj@xv^^p#bYXx2d&wy`%7l&Y_pMLSh@Bi@V(c|BK_~E@fr9df| zneBj>&s^?j%KlefpQrjM@Y=4bv)rT2sK=}?(mO>Tsh&sK$$R1|sI6S_P7-qAaqq4+ z48?Q2AN4fv6?G7;YABBQhxa_kx9EMhI>RQTPAl)r z<$~&BtIl!rcJ+3xwX#)lwH@{R#pT;4UqAio^Dn>o9q`u!Z~#7i^yrt5A3pre9ryuw z8OFBvfZ+^qhM}3pBi)M$pbR9=JqMr&a4mHbhy|+`!sAfJl=pb z#_ghnaf^F&lYltDa9Y;;(*TbG-*ZD`5Rw72fFS{reLLO_G#U^|&kWOO(v2%kx6S{! zRgT-nRx8_9Ic}9Lo^M@Xw?8hoFMsyn7oUIm&12x%AyD(<2M<2D-GKBr;5%STa;h77 zOGd48hj&JBL9Ojdz_H6l^lnxHm5HRNay>6T5i6 zvSXhBQv#8Dy1J-p!7v)s?<3Al}?uaqDiCsz>hjZ zQS=`;Ucs9eP`8y8PFP@P++1fL2w2o9N|MUQAhFb!C6~0g+B1C;1}B54gJ2pxxFHNU zU6uAg>uv>7+cqY}IP<95c)>eptgXBxFq{3Fg=R6LDwGDYRwoMk)f-6Vh6R93!ep&H z09tl{bcZT635t!ftceE8!OEO~l`eAHcTKh`1lI4-=Oic%X*Yozhl#;A;79PQR=H$@ z@9kNjsYR$RQ_Xut z=Z2gZ(MPX|&AJZC%V%?mIuMNkOsTDZ7xP&|fnpD;HI1dcP!q%bTVoStSLwcUbu?h> zU3me;*labar7Omr4@M@S97YfIR+Qb{Wu0`on#yd`S;N+pl`*5UA)q}r_DFj8Rm4X$UHruI&Hr_huO*`+@=3=Aac4KCh zCZLXYTBTY}v6`7^@vS=Jk@iA4yQ$`Q?)zD3jN5CLz zEPx}`nHJcw2t(}V`AoN`5dRvi=1YV&7kBn+c@w%8M$J(fJDoJ6KO1{fgB66jk}1~Q zQz>Wm{si!hLwv~M;eG+j?8A;5y6Jl59<55K*0G7-eE)Wg;4onD`ba5d6}H)JS)h9i z$ddn8qRldQ-wu${DWR@-(z=89;c^$w3iXLliECmz$s1cpD56pu`79sl0vqj|(sN9H zqehom!o(iW+&gnJTcUOBX_FY;L0V`HI9Fv10t0+d$A$~0k`w-$gc1Uz(;g`Tni6lSq$4GvHaY8wGjyn=6d-KfWn z?d=s_H@4$O-D(5Mv9eVkx~MM6%|?`tmVkW#G$l8+OGkLl-XuZakLN$U?OF4|P?!Js z_Sx0LkM7=@=vJTih~hovb*6#Bjd-0q*d4DGd5vq7c}@Dq@z{CZ+l;)=nvM1)BR%sZ zo+jo=DX&bZQ}1o-Pn0?({i&AHPF?b|Ox9lMR*RGziBhd{-^>C(0aVK_uJu!lrgyBp zFC7@})Xf`^`g)FzO8_-&mU2wh8#C3~z*2jT?H#$QQ{BgmR1;92zkK7sC9oX=Sx^7? zr$2x7tIt0E`TcvhZd`<49zVULP-i9rGwV$FjzpkxHaR8BMk4L>CxVQA*FIv2h$MJ$ zhW5L3*3y>}GxVe%3wtaH3U%?VB}koM+@%{*26}bXXQC#pF=URc^2QzOy!%zYfp4{k zw06+zH2Gys&!==oU)!2;TFW}?+}i9S)Kprlc=7!kJ^A|SE8w5NtNzJPfL{ZTBjb4= zxbcpE9$X*S2kAGs%K+08;4d94H-QK7Z-bx2zYh-SUk2Bpx<1bR+d#k(cm+HK{`Ft- Wrh!w8*ik_M0000|i)8YyDXVj|INRhR7f!17-q40wilYUJW!Hh@@w_ zX{`INs+Okf^WXN$w(sn)7Fq5!9eozY;L-%o8)vWXzM386<7yx`3b?PEP@A30S(a*{GA5 zKm#CyVHnJ07TtLJ1~O})Ac3c`Rg5WvLRncW-S=sZI-1+|vEgHC2G76S0Eg)qgT`9u z!dkkHBbi1Q&^FT<^YVjn6nN*}or{o4b^0~ZUE zE$r21%~C%DYkkiBFpt;Lvz-`uEG7*1f&@S$7Fv9+c3?0NbAMviry&Lf8O+r0g+rdI zN-}0*7tL1|_6aa05UHlC8r7VfO#&cT7s7&%r_HU1__G;mf~q0XKrJ0qsd4x#J6ZaJ zOQQ?2_%8Mz*lytJ8>sut3MVYE7&q5hb(=(;Vo6eIA0(3clH`&mS9_*U!r){OH4qG= z2RDQPhpVy`Xw9uaYU^XN7-t@pj~BFoMttSX3`9o1BB5D?s0zhF=5?a5UDZKqDo6lG z%n%bV4}g{hkg8D4T!JFKENi09axgO|Af<^Mf3KL#3W523v^g1+6tW%1?G@+-dgGN# zHu!2+S@gCrIp(qI=XjD>{TYNOu4%XulHr{p5(}7)VKmSrEi^rcE9g3=cWIMQou-=i zik%yBVnpq|CN^t2C@-IkC2BwvIxx+A{hOH28VW4-pn20++Jm_<+q?QE%C1s%adkMb z?Nwo%#n@yvsiZ5y-Jgu~(g0Mw6J+(qk|eOx)wIkujWuM>FbE?$>jGM1V=vmK>x-xp zZnZB6bM$4Zep6!CE-cT+26%aYw(BH=)|Zs5vTQ(McovlfE~tvw~qw$rN$- zRLYsXKL9-95bd(KyI<(3A)E0zD~wjTMXP35t$h<;eRtgxp2vm&eYsIenT2h3TN3E* z1Cr$bEzxEfyKe!c*(ssUc(Qp1uitc1meE zCf%r7ryxL)aGg596viy&Fqmvgjf{{V33q6o+w!$6$%vj`E(saBS9IS|_06GGBPEwv zn7&bZiX(4_&T1~YYgKAh_G;9~vyD`N3|%@AlC!xixot}l=3mcmP8e#dH{U~%9u9Y3 ziy%cPQlJz>oKl;z>!f5ZfM-fS<9fpI!!0$I(Yefqv2&YY&>3uNod%p%zrTk8jMlfI zDe_aFb8};Tp-V8r0g8W}5)oIkurQvDgyJaycikkRrz8M{NNiexBb1~0M!+aqL3gz7 z)NN5Im_72dL+_WVfp*ee#1bsW6y|@P08lV(- z@#M+h_n%$fI}UVPn|F`mHRW}Nfx?Yw9XnVRtrgQ6*C^AP^pB#k^R%_;d7n8Oty4yN z0%Fi-bd!}2Pq-0N&+AQ})B=8eJmF(iYpCY*4 z5&yk3V5m}ebs)9%>>ZZ?YS=90n5sH6)#_lWEywnXT-B-WV??S6sQ>=~F7F2T z`jdx$di3jGz4zhU_wF1I;g|cTmlW!ZL||r}0pFeow46;&$+DhEJN-nE(XX~fED@0e z5021&NoP%cSz?Bk^kZU=DM4XPeA^VH4lpk1hLnMxUGta`M^<^`_H|x9qB{6y zdzj4~v^p-o#PxhiXSB7gDW^59vz=R;B|=T5wHnV~TxdiDr-3|!@p!yg0pBjb5- z`%(Dz_yHe>8#6ryz674inZK_bZ~wM(d;Gw^uMpqk`rlXn3y|%5na)7!vH$=807*qo IM6N<$g01W5-v9sr literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_barv1.png b/data/themes/images/e17_sb_barv1.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e5d185eaa1f0de3d2a1071eeb56c3f4930ecf9 GIT binary patch literal 2268 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 Eg2#>v_5c6? literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_btd1.png b/data/themes/images/e17_sb_btd1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee7b5a1ba8714ee4a6c9834326fc3c47cea7577 GIT binary patch literal 726 zcmV;{0xA88P)2YyurqR6V+~^60_h;=;x0X)~#*L)Jp?^i;mtq}lAqcBe;{4QRCc z!#As&8xLP>)POYu7+`*J@$}N{?Ab|ZgYAM7BzmHbWHzXsVIUt0mC17DxV{vX3co)vk3dBPa-> zR<6TMi;4&%btKYq9Cg(3dgsnPUoE_M9IO{!UO1fh^LZY@p-CX0y6k%EHrExC)SXB_ z4gnW|ai9dKV@0xL1MC4+U;)@vY1hdYFP=Otm#<9>oh$^B8nm{NVUu{R&c;TA#%_~1 zidf$c_1wo_i_hLI+yUk#Pz1)x<*VmMMlJ_Iev}-&#LJ5_wWjt-l|2Q6$8ktBvFu_)mw7FCe0DzjY!;eSKifUQML zZHsWXNz`i5ZpS#S=}{If9THC<1VBJ~ED0bFwjgm-W?qxT30fPpF&JYp)?w^ny#L@K ztM8w8pgDr7*}(5_bMNL9V35+1%Q0@K#6}R&@D|8#k3QPcAn`Qm+%6-fXd8c8r8S-5A`uPGQjZZ zz7DxmMv_FHz!xHND6Eda8K!Svq5sTv>I-i$NOa5F_uGs ztn=(N=kTUT*w|sW8572qpS67eofUAv{^w6W%s_u$Y2!((LtBe;4m?O9@ZMuQ?1h@u zdZ<%MJC%xJ`NP*gOXH)ZbNRediS-!kaNgsc$9ZsgT5Zclqh-EVx0iqwAnq2^WJ=Fc zMiL-9x6f8hJFgs4mQC>=Ijb%SA6H|h$c~)<0yA=+Gtq2d~tFC zSOJ>0q%bix71p2)Y(ZxS-TO)2XpnY0JbJlKmKF3fhZCh%^8;WWn5lS%MjD263mQ8V zzazTML)z^g_t)N|&N07ylMyQfMhT1oI1AMM>bGsL4VfTOlm1~$(ocBs{3Au-a85vk z&?;FWl^`Jy_(RE#4$$0D431GvdHCuRo+qd(h++Y&3Ig^-U<+7(C~_K;4{{R8$UQ;q zNnVRVfgpgs<9K5eP#b|-$m-qesOO>9A{eqvh~t88Plg>-6kKyRQgNxt^AyJkJ15GWTPr+$ z@tHJn?C!JzxV^uMR_Cs+`8zaytD|B~w1GkON&H0{;93)C@a%<>>n300000NkvXX Hu0mjf!cH}t literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_btl2.png b/data/themes/images/e17_sb_btl2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecdf72778d2c0dc8da4b0688aeb0b63962439ad GIT binary patch literal 715 zcmV;+0yO=JP)tpaA#S-NTVICcHY^Ud0&q|W`L-0Gjca-GIC~x zi&s3H1daiRfEp0|1yUyGKo|H7yaRp)Mb(+Pxtq7^^>fpcyDOog3CRW~?vXZr&}y}5 zcY37#KHoQD`*h*khkH-nT?OV1Pz4Uw>t~NlO`QzGXg@w<__>1Qh!IjN!~-GDl(DfW zJbGYa8aN14P4Ugz-aXp_SO*s2*Alw+729Z#c7Ji_;d8Pqr=K~TDAj5Z7Ok4H$I#PN zNEe~8M849b+v>2szQy&~dDJ0x$iEP)i!kSGzgGL;x)1>;}h-=LkPMIKt)38qlN#!gKmq_EIR zn-G+&f$gGMtu}|K{NV&J zo8uf%0yJmC0wbUUw1BRkSG~Nx{^EJPK7VI&(ywYli1*QhzDimhI-RZ@cKgKfi1xv7 z{BfhzSY2x@1DihJ1GDw|jfLsyTU9uKvkM^Pe6Bo9Lj(TLqkeQ69Z#FPvgR&VVEjZ^2 zLP|iOPbljjB7+06@c@w+tu3DC@I2wwhXy`^76AwPm|zX)6RIQ`Vxm5=OEI3qX~0ux zU!eoIcK06Dil$sv1pa@C_{GM=hBQeSrxq)M%T*!@mY+Q4@Ag|JrfXD0Fu_Rz@r!{{ zJ&BYfJbbK)!1q8DOUo;Cw%?JVF{vXOTY4jRrUTpl9g4GwGA6+SNg^yREwj75j${>v zhh2{P3B$y)6AlVho^%j@+ia$_T2MBbkXpz62M_u5eia0?QiuqdKyPUH)gC$^1~Na- z6n^~?Hm+WpxETa~kXm79?IlhGae@<3~)P_=Ugt5Aiq00008L83(RbuG z=tU?m6K_<|f#$}&ceENI)))r7guJr&j^H~EfS)Z%0jRwlX#K=is)UUuu`$FZ=FXE( zn6AM|Vsc8b)&kO_=76eJ9ckByyKO`|D3##47S|OXy;{OUP$FPKIS2VY0MP*^Y|*h1 z#P8Vw5A&+BqCTqoc)-)b(8JVQ-(&4P!PfR zJpk)vB8k*7Bp>49k(dxX7sO$9Zl0~uGh!4bvV`4)=AQkh15+t)BDRY$ngq~Vn3O)&Sjarm0k( z!-ig3D|c2V`s0=!iU|MIkIQxzk?QN4 A&j0`b literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_btu1.png b/data/themes/images/e17_sb_btu1.png new file mode 100644 index 0000000000000000000000000000000000000000..3546c8963e93541e05d4f31a6008cf202da0f109 GIT binary patch literal 721 zcmV;?0xtcDP)XV?w{G%A=KcRNFOoW6pZ z>ftV6vBDl81T6oD2eyDNunr7d)%Ec5^4;4@OQ+Ax&AFB(g0zPnk4(1SrQ03opTUSU z-J;WvC$B!Px9>b}UjsflzyXU(ODE6o-+!hBeaMGUC@Ljlg*5kOJn>``rP&Ib$BxXM z2F?Q=SFNyjem-nM4`{>SJKF71#3Qn;6rU&Lc}bFcoKc!h7XZhB1y}7B8d*0Kedw)H zMm^%q5lNadnPf;&&~l!_3Kk_W24EjBTTg)9>On3@)FIi7Nt2YDkKa+2p39d`V0=kv zmAsUikPry$l(Nwublj($j8RRw_4GZBhR|pz_g}PeC{`5&>^8v`uv4luiz$*3spQ;v z@&U0x!(g4k2JqnJH(E{0%#0y$|0FUkP^1NUl5zdsdqfqfRH6oGSZvtf(d!?~FYadH z(CoCYs~5`c96FP5^~y!UgBK7LR0UrO;qPG%(E7aYgJAsNI!pC$!BMSnW9v3FBIM*BA{T6K~*UghH=5qPAotQ zl&-22z5N=sj~?80DhOPVd!_V(sG_2Xf}o@mPt;HJ%Sv|$YyiXBObfu-N}k6nkpxxF z>~LY-c?0+eys48RFkiXxK;=$Xv1F>xH40z|M8NOA?Jq|*b)~hW00000NkvXXu0mjf D9!^3y literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_btu2.png b/data/themes/images/e17_sb_btu2.png new file mode 100644 index 0000000000000000000000000000000000000000..655a62cc71ed23f0f5cb9da92d257f333b484341 GIT binary patch literal 715 zcmV;+0yO=JP)KL8475H%q2;f5kj zlqP9XM3G`5B~pY)FxayA^4a(fb6$4$c4pp}!n?=G$w-ez8qNFpJda`jSRiX)$KJ+| zjNNquG0n$gz}LVTU>a}-lC;4A_yDW{Pl0!?sk*qleB;*A(zo-+j!vYOE|fiNKA?KN z&DK_*{_cRPDA?@f{-?(;S8xCD^fK_91vSIZ)3+g&h)DdTtPRFIqsJ5Lo zHTnjsKJ2U#x;x~%1B$X_IIIxwnRF3v1&fjz1CY`z%L3SsJ5USK-J;mdDT|Wp4}T|w z$fb)5m>9^cQU?KaM9pWa27Pp|M;Pv*T5|Kz3P~a)iE{VHCpZ+V3If)Ajvpn^D#sTC zN~yWF{0Cxz#9*Dlrf~1)f0^u9CMFE2Gym&(m@ zVfMtKk+@tdlG=WOP83}E?gH8I^N0$nLJWe$eZ;8vsH|?>A9c{O;JdFkQ5oWWMcn)z ztRsqmacBtSz4z=6D)K6_(cJ^^Z2|%I{`&J-IC401J}7k*e2j<)C|F}qRf58Y-1BNX z_l=~*HKus+>)&smpE)^wHp`r=qY|PZs;DTUASmT9vehrcKWn|`z&cQkn`yC;=X5I) xpj~%Md|P>aU$VS2|6^x2X5oWwY#lkW^Cx>mJ_RXKu(bdH002ovPDHLkV1kg)NzVWP literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_runnerh.png b/data/themes/images/e17_sb_runnerh.png new file mode 100644 index 0000000000000000000000000000000000000000..0e883abf95ca53b8cad9d190d2007d1228fb6765 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~f!3HD)-^P3dQfx`y?k+$Y2!1;6t_M<_1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$mn^ra+;Z*~PoR*jr;B3<$MxitgoF+03i2{3Kt{rk g|NsBj75OqS=)7auzoA-k2T&n{r>mdKI;Vst00~1QX8-^I literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_sb_runnerv.png b/data/themes/images/e17_sb_runnerv.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2413423642833c8672b96250ab775a824d4775 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Ea!3HF4R;=3sq}YQL70(Y)*K0-AbW|YuPggiE?I6-L!MhZ1%N`zo-U3d9M|_A+sMnHz{6~y-T$@Z oNNVE4wkjhYmRs|FY%6}q$Ul|kws!BbIG}O{Pgg&ebxsLQ0M-{JsQ>@~ literal 0 HcmV?d00001 diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index af9e52a34..6c298a6fc 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -106,6 +106,7 @@ e_int_border_remember.h \ e_eap_editor.h \ e_widget_iconsel.h \ e_widget_fileman.h \ +e_scrollframe.h \ e_file_selector.h \ e_file_dialog.h @@ -194,6 +195,7 @@ e_int_border_remember.c \ e_eap_editor.c \ e_widget_iconsel.c \ e_widget_fileman.c \ +e_scrollframe.c \ e_file_selector.c \ e_file_dialog.c \ $(ENLIGHTENMENTHEADERS) diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 2f528f46b..dd5ee822d 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -84,6 +84,7 @@ #include "e_thumb.h" #include "e_int_border_remember.h" #include "e_eap_editor.h" +#include "e_scrollframe.h" #include "e_file_selector.h" #include "e_file_dialog.h" #include "e_widget_fileman.h" diff --git a/src/bin/e_intl.c b/src/bin/e_intl.c index e41c46acb..713d6c63a 100644 --- a/src/bin/e_intl.c +++ b/src/bin/e_intl.c @@ -85,6 +85,7 @@ e_intl_init(void) ADD_LANG("sk_SK.UTF-8"); ADD_LANG("sv_SV.UTF-8"); ADD_LANG("nb_NO.UTF-8"); + ADD_LANG("nl_NL.UTF-8"); _e_intl_input_method_config_edd = E_CONFIG_DD_NEW("input_method_config", E_Input_Method_Config); E_CONFIG_VAL(_e_intl_input_method_config_edd, E_Input_Method_Config, version, INT); diff --git a/src/bin/e_pan.c b/src/bin/e_pan.c index abe0bfcb4..34f9479b4 100644 --- a/src/bin/e_pan.c +++ b/src/bin/e_pan.c @@ -89,13 +89,13 @@ void e_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) { API_ENTRY return; - sd->px = x; - sd->py = y; - if (x > (sd->w - sd->child_w)) x = sd->w - sd->child_w; - if (y > (sd->h - sd->child_h)) y = sd->h - sd->child_h; + if (x > (sd->child_w - sd->w)) x = sd->child_w - sd->w; + if (y > (sd->child_h - sd->h)) y = sd->child_h - sd->h; if (x < 0) x = 0; if (y < 0) y = 0; if ((x == sd->px) && (y == sd->py)) return; + sd->px = x; + sd->py = y; _e_smart_reconfigure(sd); evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); } @@ -114,12 +114,12 @@ e_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) API_ENTRY return; if (x) { - if (sd->w > sd->child_w) *x = sd->w - sd->child_w; + if (sd->w < sd->child_w) *x = sd->child_w - sd->w; else *x = 0; } if (y) { - if (sd->h > sd->child_h) *y = sd->h - sd->child_h; + if (sd->h < sd->child_h) *y = sd->child_h - sd->h; else *y = 0; } } diff --git a/src/bin/e_pan.h b/src/bin/e_pan.h index 64e742ecf..bff3736ab 100644 --- a/src/bin/e_pan.h +++ b/src/bin/e_pan.h @@ -6,15 +6,13 @@ #ifndef E_PAN_H #define E_PAN_H -EAPI Evas_Object *e_pan_add(Evas *evas); -void e_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y); -void e_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); -void e_pan_child_set(Evas_Object *obj, Evas_Object *child); -Evas_Object *e_pan_child_get(Evas_Object *obj); -void e_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y); -void e_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); -void e_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); -void e_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); +EAPI Evas_Object *e_pan_add (Evas *evas); +EAPI void e_pan_child_set (Evas_Object *obj, Evas_Object *child); +EAPI Evas_Object *e_pan_child_get (Evas_Object *obj); +EAPI void e_pan_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +EAPI void e_pan_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +EAPI void e_pan_max_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +EAPI void e_pan_child_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); #endif #endif diff --git a/src/bin/e_scrollframe.c b/src/bin/e_scrollframe.c new file mode 100644 index 000000000..33d58545d --- /dev/null +++ b/src/bin/e_scrollframe.c @@ -0,0 +1,611 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +#define SMART_NAME "e_scrollframe" +#define API_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME))) +#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +typedef struct _E_Smart_Data E_Smart_Data; + +struct _E_Smart_Data +{ + Evas_Coord x, y, w, h; + + Evas_Object *smart_obj; + Evas_Object *child_obj; + Evas_Object *pan_obj; + Evas_Object *edje_obj; + Evas_Object *event_obj; + + E_Scrollframe_Policy hbar_flags, vbar_flags; + + struct { + Evas_Coord w, h; + } child; + struct { + Evas_Coord x, y; + } step, page; + + unsigned char hbar_visible : 1; + unsigned char vbar_visible : 1; +}; + +/* local subsystem functions */ +static void _e_smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_smart_event_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_smart_edje_drag_h(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_smart_scrollbar_read(E_Smart_Data *sd); +static void _e_smart_scrollbar_reset(E_Smart_Data *sd); +static int _e_smart_scrollbar_bar_h_visibility_adjust(E_Smart_Data *sd); +static int _e_smart_scrollbar_bar_v_visibility_adjust(E_Smart_Data *sd); +static void _e_smart_scrollbar_bar_visibility_adjust(E_Smart_Data *sd); +static void _e_smart_scrollbar_size_adjust(E_Smart_Data *sd); +static void _e_smart_reconfigure(E_Smart_Data *sd); +static void _e_smart_add(Evas_Object *obj); +static void _e_smart_del(Evas_Object *obj); +static void _e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _e_smart_show(Evas_Object *obj); +static void _e_smart_hide(Evas_Object *obj); +static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _e_smart_clip_unset(Evas_Object *obj); +static void _e_smart_init(void); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +e_scrollframe_add(Evas *evas) +{ + _e_smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +void +e_scrollframe_child_set(Evas_Object *obj, Evas_Object *child) +{ + Evas_Coord w, h; + + API_ENTRY return; + if (sd->child_obj) + { + e_pan_child_set(sd->pan_obj, NULL); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, _e_smart_child_del_hook); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_RESIZE, _e_smart_child_resize_hook); + } + + sd->child_obj = child; + if (!child) return; + + evas_object_event_callback_add(child, EVAS_CALLBACK_FREE, _e_smart_child_del_hook, sd); + evas_object_event_callback_add(child, EVAS_CALLBACK_RESIZE, _e_smart_child_resize_hook, sd); + evas_object_geometry_get(child, NULL, NULL, &w, &h); + sd->child.w = w; + sd->child.h = h; + e_pan_child_set(sd->pan_obj, sd->child_obj); + _e_smart_scrollbar_size_adjust(sd); + _e_smart_scrollbar_reset(sd); +} + +void +e_scrollframe_child_pos_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Evas_Coord mx = 0, my = 0; + double vx, vy; + + API_ENTRY return; + e_pan_max_get(sd->pan_obj, &mx, &my); + if (mx > 0) vx = (double)x / (double)mx; + else vx = 0.0; + if (vx < 0.0) vx = 0.0; + else if (vx > 1.0) vx = 1.0; + if (my > 0) vy = (double)y / (double)my; + else vy = 0.0; + if (vy < 0.0) vy = 0.0; + else if (vy > 1.0) vy = 1.0; + edje_object_part_drag_value_set(sd->edje_obj, "vbar_bar", 0.0, vy); + edje_object_part_drag_value_set(sd->edje_obj, "hbar_bar", vx, 0.0); + e_pan_set(sd->pan_obj, x, y); +} + +void +e_scrollframe_child_pos_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + API_ENTRY return; + e_pan_get(sd->pan_obj, x, y); +} + +void +e_scrollframe_child_viewport_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +{ + API_ENTRY return; + evas_object_geometry_get(sd->pan_obj, NULL, NULL, w, h); +} + +void +e_scrollframe_step_size_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + API_ENTRY return; + if (x < 1) x = 1; + if (y < 1) y = 1; + sd->step.x = x; + sd->step.y = y; + _e_smart_scrollbar_size_adjust(sd); +} + +void +e_scrollframe_step_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + API_ENTRY return; + if (x) *x = sd->step.x; + if (y) *y = sd->step.y; +} + +void +e_scrollframe_page_size_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + API_ENTRY return; + sd->page.x = x; + sd->page.y = y; + _e_smart_scrollbar_size_adjust(sd); +} + +void +e_scrollframe_page_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + API_ENTRY return; + if (x) *x = sd->page.x; + if (y) *y = sd->page.y; +} + +void +e_scrollframe_policy_set(Evas_Object *obj, E_Scrollframe_Policy hbar, E_Scrollframe_Policy vbar) +{ + API_ENTRY return; + if ((sd->hbar_flags == hbar) && (sd->vbar_flags == vbar)) return; + sd->hbar_flags = hbar; + sd->vbar_flags = vbar; + _e_smart_scrollbar_size_adjust(sd); +} + +void +e_scrollframe_policy_get(Evas_Object *obj, E_Scrollframe_Policy *hbar, E_Scrollframe_Policy *vbar) +{ + API_ENTRY return; + if (hbar) *hbar = sd->hbar_flags; + if (vbar) *vbar = sd->vbar_flags; +} + +/* local subsystem functions */ +static void +_e_smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Smart_Data *sd; + + sd = data; + _e_smart_scrollbar_read(sd); +} + +static void +_e_smart_edje_drag_h(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Smart_Data *sd; + + sd = data; + _e_smart_scrollbar_read(sd); +} + +static void +_e_smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + E_Smart_Data *sd; + + sd = data; + sd->child_obj = NULL; + _e_smart_scrollbar_size_adjust(sd); + _e_smart_scrollbar_reset(sd); +} + +static void +_e_smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord w, h; + E_Smart_Data *sd; + + sd = data; + evas_object_geometry_get(sd->child_obj, NULL, NULL, &w, &h); + if ((w != sd->child.w) || (h != sd->child.h)) + { + sd->child.w = w; + sd->child.h = h; + _e_smart_scrollbar_size_adjust(sd); + } +} + +static void +_e_smart_event_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Wheel *ev; + E_Smart_Data *sd; + Evas_Coord x = 0, y = 0; + + sd = data; + ev = event_info; + e_scrollframe_child_pos_get(sd->smart_obj, &x, &y); + y += ev->z * sd->step.y; + e_scrollframe_child_pos_set(sd->smart_obj, x, y); +} + +static void +_e_smart_scrollbar_read(E_Smart_Data *sd) +{ + Evas_Coord x, y, mx = 0, my = 0; + double vx, vy; + + edje_object_part_drag_value_get(sd->edje_obj, "vbar_bar", NULL, &vy); + edje_object_part_drag_value_get(sd->edje_obj, "hbar_bar", &vx, NULL); + e_pan_max_get(sd->pan_obj, &mx, &my); + x = vx * (double)mx; + y = vy * (double)my; + e_pan_set(sd->pan_obj, x, y); +} + +static void +_e_smart_scrollbar_reset(E_Smart_Data *sd) +{ + edje_object_part_drag_value_set(sd->edje_obj, "vbar_bar", 0.0, 0.0); + edje_object_part_drag_value_set(sd->edje_obj, "hbar_bar", 0.0, 0.0); + if (!sd->child_obj) + { + edje_object_part_drag_size_set(sd->edje_obj, "vbar_bar", 1.0, 1.0); + edje_object_part_drag_size_set(sd->edje_obj, "hbar_bar", 1.0, 1.0); + } + e_pan_set(sd->pan_obj, 0, 0); +} + +static int +_e_smart_scrollbar_bar_v_visibility_adjust(E_Smart_Data *sd) +{ + int scroll_v_vis_change = 0; + Evas_Coord w, h, vw, vh; + + w = sd->child.w; + h = sd->child.h; + evas_object_geometry_get(sd->pan_obj, NULL, NULL, &vw, &vh); + if (sd->vbar_visible) + { + if (sd->vbar_flags == E_SCROLLFRAME_POLICY_AUTO) + { + if (sd->child_obj) + { + if (h <= vh) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 0; + } + } + else + { + scroll_v_vis_change = 1; + sd->vbar_visible = 0; + } + } + else if (sd->vbar_flags == E_SCROLLFRAME_POLICY_OFF) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 0; + } + } + else + { + if (sd->vbar_flags == E_SCROLLFRAME_POLICY_AUTO) + { + if (sd->child_obj) + { + if (h > vh) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 1; + } + } + } + else if (sd->vbar_flags == E_SCROLLFRAME_POLICY_ON) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 1; + } + } + if (scroll_v_vis_change) + { + if (sd->vbar_visible) + edje_object_signal_emit(sd->edje_obj, "vbar", "show"); + else + edje_object_signal_emit(sd->edje_obj, "vbar", "hide"); + edje_object_message_signal_process(sd->edje_obj); + _e_smart_scrollbar_size_adjust(sd); + } + return scroll_v_vis_change; +} + +static int +_e_smart_scrollbar_bar_h_visibility_adjust(E_Smart_Data *sd) +{ + int scroll_h_vis_change = 0; + Evas_Coord w, h, vw, vh; + + w = sd->child.w; + h = sd->child.h; + evas_object_geometry_get(sd->pan_obj, NULL, NULL, &vw, &vh); + if (sd->hbar_visible) + { + if (sd->hbar_flags == E_SCROLLFRAME_POLICY_AUTO) + { + if (sd->child_obj) + { + if (w <= vw) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 0; + } + } + else + { + scroll_h_vis_change = 1; + sd->hbar_visible = 0; + } + } + else if (sd->hbar_flags == E_SCROLLFRAME_POLICY_OFF) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 0; + } + } + else + { + if (sd->hbar_flags == E_SCROLLFRAME_POLICY_AUTO) + { + if (sd->child_obj) + { + if (w > vw) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 1; + } + } + } + else if (sd->hbar_flags == E_SCROLLFRAME_POLICY_ON) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 1; + } + } + if (scroll_h_vis_change) + { + if (sd->hbar_visible) + edje_object_signal_emit(sd->edje_obj, "hbar", "show"); + else + edje_object_signal_emit(sd->edje_obj, "hbar", "hide"); + edje_object_message_signal_process(sd->edje_obj); + _e_smart_scrollbar_size_adjust(sd); + } + return scroll_h_vis_change; +} + +static void +_e_smart_scrollbar_bar_visibility_adjust(E_Smart_Data *sd) +{ + int changed = 0; + + changed |= _e_smart_scrollbar_bar_h_visibility_adjust(sd); + changed |= _e_smart_scrollbar_bar_v_visibility_adjust(sd); + if (changed) + { + _e_smart_scrollbar_bar_h_visibility_adjust(sd); + _e_smart_scrollbar_bar_v_visibility_adjust(sd); + } +} + +static void +_e_smart_scrollbar_size_adjust(E_Smart_Data *sd) +{ + if (sd->child_obj) + { + Evas_Coord x, y, w, h, mx = 0, my = 0, vw = 0, vh = 0; + double vx, vy, size; + + evas_object_geometry_get(sd->pan_obj, NULL, NULL, &vw, &vh); + w = sd->child.w; + if (w < 1) w = 1; + size = (double)vw / (double)w; + if (size > 1.0) + { + size = 1.0; + edje_object_part_drag_value_set(sd->edje_obj, "hbar_bar", 0.0, 0.0); + } + edje_object_part_drag_size_set(sd->edje_obj, "hbar_bar", size, 1.0); + + h = sd->child.h; + if (h < 1) h = 1; + size = (double)vh / (double)h; + if (size > 1.0) + { + size = 1.0; + edje_object_part_drag_value_set(sd->edje_obj, "vbar_bar", 0.0, 0.0); + } + edje_object_part_drag_size_set(sd->edje_obj, "vbar_bar", 1.0, size); + + edje_object_part_drag_value_get(sd->edje_obj, "hbar_bar", &vx, NULL); + edje_object_part_drag_value_get(sd->edje_obj, "vbar_bar", NULL, &vy); + e_pan_max_get(sd->pan_obj, &mx, &my); + x = vx * mx; + y = vy * my; + + edje_object_part_drag_step_set(sd->edje_obj, "hbar_bar", (double)sd->step.x / (double)w, 0.0); + edje_object_part_drag_step_set(sd->edje_obj, "vbar_bar", 0.0, (double)sd->step.y / (double)h); + if (sd->page.x > 0) + edje_object_part_drag_page_set(sd->edje_obj, "hbar_bar", (double)sd->page.x / (double)w, 0.0); + else + edje_object_part_drag_page_set(sd->edje_obj, "hbar_bar", -((double)sd->page.x * ((double)vw / (double)w)) / 100.0, 0.0); + if (sd->page.y > 0) + edje_object_part_drag_page_set(sd->edje_obj, "vbar_bar", 0.0, (double)sd->page.y / (double)h); + else + edje_object_part_drag_page_set(sd->edje_obj, "vbar_bar", 0.0, -((double)sd->page.y * ((double)vh / (double)h)) / 100.0); + + e_pan_set(sd->pan_obj, x, y); + } + else + { + edje_object_part_drag_size_set(sd->edje_obj, "vbar_bar", 1.0, 1.0); + edje_object_part_drag_size_set(sd->edje_obj, "hbar_bar", 1.0, 1.0); + e_pan_set(sd->pan_obj, 0, 0); + } + _e_smart_scrollbar_bar_visibility_adjust(sd); +} + +static void +_e_smart_reconfigure(E_Smart_Data *sd) +{ + evas_object_move(sd->edje_obj, sd->x, sd->y); + evas_object_resize(sd->edje_obj, sd->w, sd->h); + evas_object_move(sd->event_obj, sd->x, sd->y); + evas_object_resize(sd->event_obj, sd->w, sd->h); + _e_smart_scrollbar_size_adjust(sd); +} + +static void +_e_smart_add(Evas_Object *obj) +{ + E_Smart_Data *sd; + Evas_Object *o; + + sd = calloc(1, sizeof(E_Smart_Data)); + if (!sd) return; + evas_object_smart_data_set(obj, sd); + + sd->smart_obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + sd->step.x = 32; + sd->step.y = 32; + sd->page.x = -50; + sd->page.y = -50; + sd->hbar_flags = E_SCROLLFRAME_POLICY_AUTO; + sd->vbar_flags = E_SCROLLFRAME_POLICY_AUTO; + sd->hbar_visible = 1; + sd->vbar_visible = 1; + + o = edje_object_add(evas_object_evas_get(obj)); + sd->edje_obj = o; + e_theme_edje_object_set(o, "base/theme/widgets", + "widgets/scrollframe"); + edje_object_signal_callback_add(o, "drag*", "vbar_bar", _e_smart_edje_drag_v, sd); + edje_object_signal_callback_add(o, "drag*", "hbar_bar", _e_smart_edje_drag_h, sd); + evas_object_smart_member_add(o, obj); + + o = e_pan_add(evas_object_evas_get(obj)); + sd->pan_obj = o; + evas_object_show(o); + edje_object_part_swallow(sd->edje_obj, "item", o); + + o = evas_object_rectangle_add(evas_object_evas_get(obj)); + sd->event_obj = o; + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL, _e_smart_event_wheel, sd); + evas_object_smart_member_add(o, obj); + evas_object_repeat_events_set(o, 1); + evas_object_show(o); + + _e_smart_scrollbar_reset(sd); +} + +static void +_e_smart_del(Evas_Object *obj) +{ + INTERNAL_ENTRY; + e_scrollframe_child_set(obj, NULL); + evas_object_del(sd->pan_obj); + evas_object_del(sd->edje_obj); + evas_object_del(sd->event_obj); + free(sd); +} + +static void +_e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + INTERNAL_ENTRY; + sd->x = x; + sd->y = y; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + INTERNAL_ENTRY; + sd->w = w; + sd->h = h; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_show(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_show(sd->edje_obj); +} + +static void +_e_smart_hide(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_hide(sd->edje_obj); +} + +static void +_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + INTERNAL_ENTRY; + evas_object_color_set(sd->edje_obj, r, g, b, a); +} + +static void +_e_smart_clip_set(Evas_Object *obj, Evas_Object * clip) +{ + INTERNAL_ENTRY; + evas_object_clip_set(sd->edje_obj, clip); +} + +static void +_e_smart_clip_unset(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_clip_unset(sd->edje_obj); +} + +/* never need to touch this */ + +static void +_e_smart_init(void) +{ + if (_e_smart) return; + _e_smart = evas_smart_new(SMART_NAME, + _e_smart_add, + _e_smart_del, + NULL, NULL, NULL, NULL, NULL, + _e_smart_move, + _e_smart_resize, + _e_smart_show, + _e_smart_hide, + _e_smart_color_set, + _e_smart_clip_set, + _e_smart_clip_unset, + NULL); +} + diff --git a/src/bin/e_scrollframe.h b/src/bin/e_scrollframe.h new file mode 100644 index 000000000..b29df717d --- /dev/null +++ b/src/bin/e_scrollframe.h @@ -0,0 +1,30 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_SCROLLFRAME_H +#define E_SCROLLFRAME_H + +typedef enum _E_Scrollframe_Policy +{ + E_SCROLLFRAME_POLICY_OFF, + E_SCROLLFRAME_POLICY_ON, + E_SCROLLFRAME_POLICY_AUTO +} +E_Scrollframe_Policy; + +EAPI Evas_Object *e_scrollframe_add (Evas *evas); +EAPI void e_scrollframe_child_set (Evas_Object *obj, Evas_Object *child); +EAPI void e_scrollframe_child_pos_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +EAPI void e_scrollframe_child_pos_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +EAPI void e_scrollframe_child_viewport_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); +EAPI void e_scrollframe_step_size_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +EAPI void e_scrollframe_step_size_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +EAPI void e_scrollframe_page_size_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +EAPI void e_scrollframe_page_size_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +EAPI void e_scrollframe_policy_set (Evas_Object *obj, E_Scrollframe_Policy hbar, E_Scrollframe_Policy vbar); +EAPI void e_scrollframe_policy_get (Evas_Object *obj, E_Scrollframe_Policy *hbar, E_Scrollframe_Policy *vbar); + +#endif +#endif diff --git a/src/bin/e_test.c b/src/bin/e_test.c index b9da9ee5b..d4769f828 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -307,6 +307,31 @@ _e_test_internal(E_Container *con) e_win_centered_set(dia->win, 1); e_dialog_show(dia); } +#elif 0 +static void +_e_test_internal(E_Container *con) +{ + E_Dialog *dia; + Evas_Object *o, *o2; + + dia = e_dialog_new(con); + e_dialog_title_set(dia, "A Test Dialog"); + + o = e_icon_add(dia->win->evas); + e_icon_file_set(o, "/home/raster/t.png"); + evas_object_resize(o, 1024, 768); + evas_object_show(o); + + o2 = e_scrollframe_add(dia->win->evas); + evas_object_resize(o2, 200, 300); + evas_object_show(o2); + e_scrollframe_child_set(o2, o); + + e_dialog_content_set(dia, o2, 500, 300); + e_dialog_button_add(dia, "OK", NULL, NULL, NULL); + e_win_centered_set(dia->win, 1); + e_dialog_show(dia); +} #else static void _e_test_internal(E_Container *con)