From 51123a345247e2ae600283d5dd5af26ade3d13da Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 30 Sep 2008 06:58:56 +0000 Subject: [PATCH] elementary becomes its own tree/lib/test binary SVN revision: 36343 --- legacy/elementary/AUTHORS | 1 + legacy/elementary/COPYING | 1 + legacy/elementary/ChangeLog | 0 legacy/elementary/INSTALL | 14 + legacy/elementary/Makefile.am | 14 + legacy/elementary/NEWS | 0 legacy/elementary/README | 1 + legacy/elementary/autogen.sh | 19 + legacy/elementary/configure.in | 57 + legacy/elementary/data/.cvsignore | 3 + legacy/elementary/data/Makefile.am | 3 + legacy/elementary/data/themes/Makefile.am | 68 + legacy/elementary/data/themes/arrow_down.png | Bin 0 -> 1577 bytes .../elementary/data/themes/arrow_down.xcf.gz | Bin 0 -> 4262 bytes legacy/elementary/data/themes/arrow_up.png | Bin 0 -> 1584 bytes legacy/elementary/data/themes/arrow_up.xcf.gz | Bin 0 -> 3261 bytes legacy/elementary/data/themes/bt_base1.png | Bin 0 -> 952 bytes legacy/elementary/data/themes/bt_base2.png | Bin 0 -> 981 bytes legacy/elementary/data/themes/bt_bases.png | Bin 0 -> 769 bytes legacy/elementary/data/themes/bt_basew.png | Bin 0 -> 1527 bytes legacy/elementary/data/themes/bt_hilight.png | Bin 0 -> 343 bytes legacy/elementary/data/themes/bt_hilightw.png | Bin 0 -> 279 bytes legacy/elementary/data/themes/bt_shine.png | Bin 0 -> 305 bytes legacy/elementary/data/themes/bt_sm_base1.png | Bin 0 -> 477 bytes legacy/elementary/data/themes/bt_sm_base2.png | Bin 0 -> 482 bytes .../elementary/data/themes/bt_sm_hilight.png | Bin 0 -> 285 bytes legacy/elementary/data/themes/bt_sm_shine.png | Bin 0 -> 275 bytes legacy/elementary/data/themes/default.edc | 2121 +++++++++++++++++ legacy/elementary/data/themes/dia_botshad.png | Bin 0 -> 209 bytes legacy/elementary/data/themes/dia_grad.png | Bin 0 -> 5155 bytes legacy/elementary/data/themes/dia_topshad.png | Bin 0 -> 249 bytes legacy/elementary/data/themes/flip.xcf.gz | Bin 0 -> 10985 bytes legacy/elementary/data/themes/flip_0b.png | Bin 0 -> 1540 bytes legacy/elementary/data/themes/flip_0t.png | Bin 0 -> 1547 bytes legacy/elementary/data/themes/flip_1b.png | Bin 0 -> 451 bytes legacy/elementary/data/themes/flip_1t.png | Bin 0 -> 666 bytes legacy/elementary/data/themes/flip_2b.png | Bin 0 -> 1074 bytes legacy/elementary/data/themes/flip_2t.png | Bin 0 -> 1495 bytes legacy/elementary/data/themes/flip_3b.png | Bin 0 -> 1408 bytes legacy/elementary/data/themes/flip_3t.png | Bin 0 -> 1444 bytes legacy/elementary/data/themes/flip_4b.png | Bin 0 -> 705 bytes legacy/elementary/data/themes/flip_4t.png | Bin 0 -> 1137 bytes legacy/elementary/data/themes/flip_5b.png | Bin 0 -> 1490 bytes legacy/elementary/data/themes/flip_5t.png | Bin 0 -> 824 bytes legacy/elementary/data/themes/flip_6b.png | Bin 0 -> 1651 bytes legacy/elementary/data/themes/flip_6t.png | Bin 0 -> 1569 bytes legacy/elementary/data/themes/flip_7b.png | Bin 0 -> 1110 bytes legacy/elementary/data/themes/flip_7t.png | Bin 0 -> 996 bytes legacy/elementary/data/themes/flip_8b.png | Bin 0 -> 1660 bytes legacy/elementary/data/themes/flip_8t.png | Bin 0 -> 1719 bytes legacy/elementary/data/themes/flip_9b.png | Bin 0 -> 1512 bytes legacy/elementary/data/themes/flip_9t.png | Bin 0 -> 1659 bytes legacy/elementary/data/themes/flip_amb.png | Bin 0 -> 963 bytes legacy/elementary/data/themes/flip_amt.png | Bin 0 -> 1075 bytes legacy/elementary/data/themes/flip_base.png | Bin 0 -> 598 bytes .../elementary/data/themes/flip_base_shad.png | Bin 0 -> 826 bytes legacy/elementary/data/themes/flip_pmb.png | Bin 0 -> 709 bytes legacy/elementary/data/themes/flip_pmt.png | Bin 0 -> 1052 bytes legacy/elementary/data/themes/flip_shad.png | Bin 0 -> 918 bytes legacy/elementary/data/themes/frame_1.png | Bin 0 -> 431 bytes legacy/elementary/data/themes/frame_2.png | Bin 0 -> 676 bytes legacy/elementary/data/themes/sb_runnerh.png | Bin 0 -> 160 bytes legacy/elementary/data/themes/sb_runnerv.png | Bin 0 -> 166 bytes legacy/elementary/data/themes/shelf_inset.png | Bin 0 -> 509 bytes legacy/elementary/data/themes/tog_base.png | Bin 0 -> 847 bytes legacy/elementary/elementary.pc.in | 11 + legacy/elementary/src/.cvsignore | 2 + legacy/elementary/src/Makefile.am | 4 + legacy/elementary/src/bin/.cvsignore | 7 + legacy/elementary/src/bin/Makefile.am | 17 + legacy/elementary/src/bin/test.c | 999 ++++++++ legacy/elementary/src/lib/Elementary.h | 553 +++++ legacy/elementary/src/lib/Makefile.am | 54 + legacy/elementary/src/lib/elm_bg.c | 99 + legacy/elementary/src/lib/elm_box.c | 131 + legacy/elementary/src/lib/elm_button.c | 170 ++ legacy/elementary/src/lib/elm_callback.c | 58 + legacy/elementary/src/lib/elm_clock.c | 393 +++ legacy/elementary/src/lib/elm_frame.c | 138 ++ legacy/elementary/src/lib/elm_icon.c | 103 + legacy/elementary/src/lib/elm_label.c | 68 + legacy/elementary/src/lib/elm_main.c | 79 + legacy/elementary/src/lib/elm_obj.c | 177 ++ legacy/elementary/src/lib/elm_pad.c | 116 + legacy/elementary/src/lib/elm_priv.h | 64 + legacy/elementary/src/lib/elm_scroller.c | 99 + legacy/elementary/src/lib/elm_table.c | 104 + legacy/elementary/src/lib/elm_theme.c | 13 + legacy/elementary/src/lib/elm_toggle.c | 210 ++ legacy/elementary/src/lib/elm_widget.c | 137 ++ legacy/elementary/src/lib/elm_win.c | 307 +++ legacy/elementary/src/lib/els_box.c | 712 ++++++ legacy/elementary/src/lib/els_box.h | 14 + legacy/elementary/src/lib/els_icon.c | 364 +++ legacy/elementary/src/lib/els_icon.h | 10 + legacy/elementary/src/lib/els_pan.c | 270 +++ legacy/elementary/src/lib/els_pan.h | 7 + legacy/elementary/src/lib/els_scroller.c | 1052 ++++++++ legacy/elementary/src/lib/els_scroller.h | 25 + legacy/elementary/src/lib/els_table.c | 953 ++++++++ legacy/elementary/src/lib/els_table.h | 10 + 101 files changed, 9832 insertions(+) create mode 100644 legacy/elementary/AUTHORS create mode 100644 legacy/elementary/COPYING create mode 100644 legacy/elementary/ChangeLog create mode 100644 legacy/elementary/INSTALL create mode 100644 legacy/elementary/Makefile.am create mode 100644 legacy/elementary/NEWS create mode 100644 legacy/elementary/README create mode 100755 legacy/elementary/autogen.sh create mode 100644 legacy/elementary/configure.in create mode 100644 legacy/elementary/data/.cvsignore create mode 100644 legacy/elementary/data/Makefile.am create mode 100644 legacy/elementary/data/themes/Makefile.am create mode 100644 legacy/elementary/data/themes/arrow_down.png create mode 100644 legacy/elementary/data/themes/arrow_down.xcf.gz create mode 100644 legacy/elementary/data/themes/arrow_up.png create mode 100644 legacy/elementary/data/themes/arrow_up.xcf.gz create mode 100644 legacy/elementary/data/themes/bt_base1.png create mode 100644 legacy/elementary/data/themes/bt_base2.png create mode 100644 legacy/elementary/data/themes/bt_bases.png create mode 100644 legacy/elementary/data/themes/bt_basew.png create mode 100644 legacy/elementary/data/themes/bt_hilight.png create mode 100644 legacy/elementary/data/themes/bt_hilightw.png create mode 100644 legacy/elementary/data/themes/bt_shine.png create mode 100644 legacy/elementary/data/themes/bt_sm_base1.png create mode 100644 legacy/elementary/data/themes/bt_sm_base2.png create mode 100644 legacy/elementary/data/themes/bt_sm_hilight.png create mode 100644 legacy/elementary/data/themes/bt_sm_shine.png create mode 100644 legacy/elementary/data/themes/default.edc create mode 100644 legacy/elementary/data/themes/dia_botshad.png create mode 100644 legacy/elementary/data/themes/dia_grad.png create mode 100644 legacy/elementary/data/themes/dia_topshad.png create mode 100644 legacy/elementary/data/themes/flip.xcf.gz create mode 100644 legacy/elementary/data/themes/flip_0b.png create mode 100644 legacy/elementary/data/themes/flip_0t.png create mode 100644 legacy/elementary/data/themes/flip_1b.png create mode 100644 legacy/elementary/data/themes/flip_1t.png create mode 100644 legacy/elementary/data/themes/flip_2b.png create mode 100644 legacy/elementary/data/themes/flip_2t.png create mode 100644 legacy/elementary/data/themes/flip_3b.png create mode 100644 legacy/elementary/data/themes/flip_3t.png create mode 100644 legacy/elementary/data/themes/flip_4b.png create mode 100644 legacy/elementary/data/themes/flip_4t.png create mode 100644 legacy/elementary/data/themes/flip_5b.png create mode 100644 legacy/elementary/data/themes/flip_5t.png create mode 100644 legacy/elementary/data/themes/flip_6b.png create mode 100644 legacy/elementary/data/themes/flip_6t.png create mode 100644 legacy/elementary/data/themes/flip_7b.png create mode 100644 legacy/elementary/data/themes/flip_7t.png create mode 100644 legacy/elementary/data/themes/flip_8b.png create mode 100644 legacy/elementary/data/themes/flip_8t.png create mode 100644 legacy/elementary/data/themes/flip_9b.png create mode 100644 legacy/elementary/data/themes/flip_9t.png create mode 100644 legacy/elementary/data/themes/flip_amb.png create mode 100644 legacy/elementary/data/themes/flip_amt.png create mode 100644 legacy/elementary/data/themes/flip_base.png create mode 100644 legacy/elementary/data/themes/flip_base_shad.png create mode 100644 legacy/elementary/data/themes/flip_pmb.png create mode 100644 legacy/elementary/data/themes/flip_pmt.png create mode 100644 legacy/elementary/data/themes/flip_shad.png create mode 100644 legacy/elementary/data/themes/frame_1.png create mode 100644 legacy/elementary/data/themes/frame_2.png create mode 100644 legacy/elementary/data/themes/sb_runnerh.png create mode 100644 legacy/elementary/data/themes/sb_runnerv.png create mode 100644 legacy/elementary/data/themes/shelf_inset.png create mode 100644 legacy/elementary/data/themes/tog_base.png create mode 100644 legacy/elementary/elementary.pc.in create mode 100644 legacy/elementary/src/.cvsignore create mode 100644 legacy/elementary/src/Makefile.am create mode 100644 legacy/elementary/src/bin/.cvsignore create mode 100644 legacy/elementary/src/bin/Makefile.am create mode 100644 legacy/elementary/src/bin/test.c create mode 100644 legacy/elementary/src/lib/Elementary.h create mode 100644 legacy/elementary/src/lib/Makefile.am create mode 100644 legacy/elementary/src/lib/elm_bg.c create mode 100644 legacy/elementary/src/lib/elm_box.c create mode 100644 legacy/elementary/src/lib/elm_button.c create mode 100644 legacy/elementary/src/lib/elm_callback.c create mode 100644 legacy/elementary/src/lib/elm_clock.c create mode 100644 legacy/elementary/src/lib/elm_frame.c create mode 100644 legacy/elementary/src/lib/elm_icon.c create mode 100644 legacy/elementary/src/lib/elm_label.c create mode 100644 legacy/elementary/src/lib/elm_main.c create mode 100644 legacy/elementary/src/lib/elm_obj.c create mode 100644 legacy/elementary/src/lib/elm_pad.c create mode 100644 legacy/elementary/src/lib/elm_priv.h create mode 100644 legacy/elementary/src/lib/elm_scroller.c create mode 100644 legacy/elementary/src/lib/elm_table.c create mode 100644 legacy/elementary/src/lib/elm_theme.c create mode 100644 legacy/elementary/src/lib/elm_toggle.c create mode 100644 legacy/elementary/src/lib/elm_widget.c create mode 100644 legacy/elementary/src/lib/elm_win.c create mode 100644 legacy/elementary/src/lib/els_box.c create mode 100644 legacy/elementary/src/lib/els_box.h create mode 100644 legacy/elementary/src/lib/els_icon.c create mode 100644 legacy/elementary/src/lib/els_icon.h create mode 100644 legacy/elementary/src/lib/els_pan.c create mode 100644 legacy/elementary/src/lib/els_pan.h create mode 100644 legacy/elementary/src/lib/els_scroller.c create mode 100644 legacy/elementary/src/lib/els_scroller.h create mode 100644 legacy/elementary/src/lib/els_table.c create mode 100644 legacy/elementary/src/lib/els_table.h diff --git a/legacy/elementary/AUTHORS b/legacy/elementary/AUTHORS new file mode 100644 index 0000000000..73ebbe2dfa --- /dev/null +++ b/legacy/elementary/AUTHORS @@ -0,0 +1 @@ +The Rasterman (Carsten Haitzler) diff --git a/legacy/elementary/COPYING b/legacy/elementary/COPYING new file mode 100644 index 0000000000..a0990367ef --- /dev/null +++ b/legacy/elementary/COPYING @@ -0,0 +1 @@ +TBD diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog new file mode 100644 index 0000000000..e69de29bb2 diff --git a/legacy/elementary/INSTALL b/legacy/elementary/INSTALL new file mode 100644 index 0000000000..9cdec5bf25 --- /dev/null +++ b/legacy/elementary/INSTALL @@ -0,0 +1,14 @@ +COMPILING and INSTALLING: + +If you got a official release tar archive do: + ./configure + +( otherwise if you got this from enlightenment cvs do: ./autogen.sh ) + +Then to compile: + make + +To install (run this as root, or the user who handles installs): + make install + +NOTE: You MUST make install Rage for it to run properly. diff --git a/legacy/elementary/Makefile.am b/legacy/elementary/Makefile.am new file mode 100644 index 0000000000..6f49e6a189 --- /dev/null +++ b/legacy/elementary/Makefile.am @@ -0,0 +1,14 @@ +SUBDIRS = src data + +MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \ + config.h.in config.sub configure install-sh \ + ltconfig ltmain.sh missing mkinstalldirs \ + stamp-h.in acconfig.h depcomp + +EXTRA_DIST = README AUTHORS COPYING autogen.sh eet.pc.in + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = elementary.pc + +installed_headersdir = $(prefix)/include/elementary +installed_headers_DATA = elementary_config.h diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/legacy/elementary/README b/legacy/elementary/README new file mode 100644 index 0000000000..a1a6e2fd15 --- /dev/null +++ b/legacy/elementary/README @@ -0,0 +1 @@ +Alarm Clock diff --git a/legacy/elementary/autogen.sh b/legacy/elementary/autogen.sh new file mode 100755 index 0000000000..2d15d5bea7 --- /dev/null +++ b/legacy/elementary/autogen.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +rm -rf autom4te.cache +rm -f aclocal.m4 ltmain.sh +rm -rf m4 + +mkdir m4 + +touch README + +echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS -I m4 || exit 1 +echo "Running autoheader..." ; autoheader || exit 1 +echo "Running autoconf..." ; autoconf || exit 1 +echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1 +echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1 + +if [ -z "$NOCONFIGURE" ]; then + ./configure "$@" +fi diff --git a/legacy/elementary/configure.in b/legacy/elementary/configure.in new file mode 100644 index 0000000000..35b097d78b --- /dev/null +++ b/legacy/elementary/configure.in @@ -0,0 +1,57 @@ +# get rid of that stupid cache mechanism +rm -f config.cache + +AC_INIT(elementary, 0.1.0.0, enlightenment-devel@lists.sourceforge.net) +AC_PREREQ(2.52) +AC_CONFIG_SRCDIR(configure.in) + +AM_INIT_AUTOMAKE(1.6 dist-bzip2) +AM_CONFIG_HEADER(elementary_config.h) + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_C_BIGENDIAN +AC_ISC_POSIX +AC_PROG_CC +AM_PROG_CC_STDC +AC_HEADER_STDC +AC_C_CONST + +AC_LIBTOOL_WIN32_DLL +define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl +define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl +AC_PROG_LIBTOOL + +VMAJ=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $1);}'` +VMIN=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $2);}'` +VMIC=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $3);}'` +SNAP=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $4);}'` +version_info=`expr $VMAJ + $VMIN`":$VMIC:$VMIN" +AC_SUBST(version_info) +PKG_PROG_PKG_CONFIG + +PKG_CHECK_MODULES([ELEMENTARY], [ + eet + evas + ecore + ecore-x + ecore-evas + ecore-job + ecore-txt + ecore-file + edje + edbus + ]) + +my_libs="-lm" +AC_SUBST(my_libs) + +AC_OUTPUT([ +Makefile +elementary.pc +src/Makefile +src/lib/Makefile +src/bin/Makefile +data/Makefile +data/themes/Makefile +]) diff --git a/legacy/elementary/data/.cvsignore b/legacy/elementary/data/.cvsignore new file mode 100644 index 0000000000..d880450136 --- /dev/null +++ b/legacy/elementary/data/.cvsignore @@ -0,0 +1,3 @@ +Makefile +Makefile.in +default.edj diff --git a/legacy/elementary/data/Makefile.am b/legacy/elementary/data/Makefile.am new file mode 100644 index 0000000000..b18097413e --- /dev/null +++ b/legacy/elementary/data/Makefile.am @@ -0,0 +1,3 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in +SUBDIRS = themes diff --git a/legacy/elementary/data/themes/Makefile.am b/legacy/elementary/data/themes/Makefile.am new file mode 100644 index 0000000000..0e20a41507 --- /dev/null +++ b/legacy/elementary/data/themes/Makefile.am @@ -0,0 +1,68 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +EDJE_CC = edje_cc +EDJE_FLAGS = -v -id $(top_srcdir)/data/themes -fd $(top_srcdir)/data/themes + +filesdir = $(datadir)/elementary/themes +files_DATA = default.edj + +EXTRA_DIST = \ +default.edc \ +arrow_down.png \ +arrow_up.png \ +bt_base1.png \ +bt_base2.png \ +bt_bases.png \ +bt_basew.png \ +bt_hilight.png \ +bt_hilightw.png \ +bt_shine.png \ +bt_sm_base1.png \ +bt_sm_base2.png \ +bt_sm_hilight.png \ +bt_sm_shine.png \ +dia_botshad.png \ +dia_grad.png \ +dia_topshad.png \ +frame_1.png \ +frame_2.png \ +flip_0b.png \ +flip_0t.png \ +flip_1b.png \ +flip_1t.png \ +flip_2b.png \ +flip_2t.png \ +flip_3b.png \ +flip_3t.png \ +flip_4b.png \ +flip_4t.png \ +flip_5b.png \ +flip_5t.png \ +flip_6b.png \ +flip_6t.png \ +flip_7b.png \ +flip_7t.png \ +flip_8b.png \ +flip_8t.png \ +flip_9b.png \ +flip_9t.png \ +flip_amb.png \ +flip_amt.png \ +flip_base.png \ +flip_base_shad.png \ +flip_pmb.png \ +flip_pmt.png \ +flip_shad.png \ +sb_runnerh.png \ +sb_runnerv.png \ +shelf_inset.png \ +tog_base.png + +default.edj: Makefile $(EXTRA_DIST) + $(EDJE_CC) $(EDJE_FLAGS) \ + $(top_srcdir)/data/themes/default.edc \ + $(top_builddir)/data/themes/default.edj + +clean-local: + rm -f *.edj diff --git a/legacy/elementary/data/themes/arrow_down.png b/legacy/elementary/data/themes/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..db81aac437eeca95bfac5c438346eb961ca80622 GIT binary patch literal 1577 zcmV+^2G;qBP)Px#24YJ`L;y1YGXOJ&KSTBa000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS` z4JjIQMLb0S000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000GqNkl^j2;$N28C`n05Qj(ICWSd1R;yn!z%Cp#_-GcQ6@>H%VLsecV{I=)|Y+}F}x*TpJwj3f4 z@NLtlZ(=}~j+My~ymIBr8W04^Xm4*9zJn2H1I zpmn7PgFvM$h#kj{9h=ZJ4L|rphYr!!*2bALXL$1D$+tj8fi7=pX_+1z9OT-yYdm`N z$Ww<90wDxXpFaH#_#~lI3bd0hn@1Yh0aPD7dh|D4*L@>iUtiCK3m0f@ZROdsX9peV z)2B~Q-oAaCt5>h`@ZrOCkm|i{+dO~%{0Cr3f!;LIYP%~}dTLaH?>KVg$gr;K=(?VZ zy83DB>gs53Zzmp)Gd@24{i#!@#_!y@LtkItI$$@fZQD#tOq`UkpMYgxRi;`-iL@uQ zIuQhcumTF8ok*}?-rL(h>uC6Zb-o4Av&=AAJ!(Y8;+cuVEv9hwl z>({RvBgh>ng~vnznnY4JqJN61*xBiQKQOtRxf)QBhHWVHlK^mE|0XL?WC& zf1U>q9`Nebs~li9o5eIu(&;qmbedEu#p>#6qfCWmd3AuDf;L_25l?8ZGzlw(83iKI zX!L#{5Wp}DHY!rDVzVp@(==ILUT&0-%Sz#W_DKt|(R$iFF?dD13W!u!SLeXhJof{3 zB5s-{OG`@*@X7`ewl4mx9xpB~Hu(U5 z@kj}g@6uFV+nVxIeUXY)V=D^_3r)6d|Ko*(bfO;!1aeL|&&ldvhD|#NOkr(*f++1Teo5i;6bPfC8-+aAvE(#X$Rk3lC_gfK55nS*~c{ zVxisbP~8qWk<~rEfTaM7B9GIG%IWPmIocBNc0uEFK*J`z{a=Un+EDl{y8aW#$R#Ps b|6cwEjpqg=LQVGK00000NkvXXu0mjfdNt&_ literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/arrow_down.xcf.gz b/legacy/elementary/data/themes/arrow_down.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..3d4e89c5471aed93a5432fc7cc8e99e8a954c9cb GIT binary patch literal 4262 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 Id`Kz)06R`L#{d8T literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/arrow_up.png b/legacy/elementary/data/themes/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..a90fe93521ece68bfc048a76c7bafb6b6448cb00 GIT binary patch literal 1584 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 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_base1.png b/legacy/elementary/data/themes/bt_base1.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1f1790970d21407c346f9eaa08bf3de759ee3f GIT binary patch literal 952 zcmV;p14sOcP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG$ z4=y?xWpnKS000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0009MNklY> z*e(`rcijJy468)KQYW1%+g(-PSLN!!pK*TU8u%Zu6TW_A8?O&J^Y+9YnY-TZL&nbZ znjj^>`!javefFXI032`!tj;v=e*%wysM#q!V`s>=De}0VXnMiOd^W>zBridM-xCk8VRt z1_CK1+Sn=}zT}Xq!#f2LR24Hos*su>ViNQLA=jI;LjpfjtKN^&_ZD%`$t@lmSGz}s$q+Mwo28YaX zsW7g4ecc+I_)F+6Y~C3|O5MG4ZkwgztH^v*m8+)d@@T$eIGx-9h%pjlKtw(kmCqpv zA%uTI2(JK~D{auU5bu8NYu04BC`+B6Mh}lQcA>_2-`pi;T;g_F5BJS-hQ~e zynLam&zw_KYuX*^H0>Tbs`oNk=yau;Gv`cXyWO(ceCO`&?!WbVeGPmD+Op#V;0f^j z>gwwC#l^+T)oS&$F5$V0TPU45VaLU&qHLYq$Iz+tZ}s$|3n7HIZErT4&A;pQ`VFuK zz5rXPLbC$?0-geY1CN2`6jKP;0^fie;1lpQzqOi-YDWV+%&)WME$|da1ls(!!6rLs a0KWjIB_5&9XL%9;0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG$ z4=*(5#&4?t000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0009pNklvY8ax4peke#o++G0UATh zA4NMNQ8hI~G%)PfuloTQVb}z4fVaDFoK1lQM7wJZpfm@Z1OEW;f!9DdLQo29ffeu* z_yw#D*Z|C1;4^S-gY<~6&V0N!pWhmWo~4&&xIJO?xiZnOI)TuTPJOjkd$oHu>!Pc3q+s+|QKtV*ZS=rsk zuJQY7eSPig_980fi87E)ym)=ZVZaS=;w5g))!r?@}YbP?Lf{ zN{KeMj2Q9+??43S9IAj+Ayq*{Q3O$ojaYvbdX+p)Yi|`qK#hG>H88S^wB*nW#h%}* zlsQv>AdwWL>-z4BAxH25abgU~o*X$OopsOer^e4QI~}9yP*u9Bf5(vbgeD-)A-z^; z9ps4vC5BRsE^KMffL8N|P7TXK2LCxM7n$`(RY@tcG-b#KLTIu$h#Z*3%YFKn_3TpZ7VN#^Rh>Grm%hD8p^Av$oSy*F&;*`8e@4?ZyLrY`FSC{8 zPLjfG^_->gb7P;fjr$?5Kdy7MZQJK{C?`M>i6Jz;X&OXin0963Fj!;`D}}M{^}01! z@t4?LczJe)l=8E4F4`$pgB@L0z=L!0u4!@|&F>hFr*;5hj71P03_}X`q2Xt{X>Yo& z`?m;0-UdyDc=v1HW=)nwS?c;!db(6+*0|-CQXw zy!RixcQ{w4-BUYF{R11-K~olXx>Ajq0~6V9w>&Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS^ z2PzS7B>PhU000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}00079Nkl=IVvfvclLT+WPvA+UG$PyR0GbOZd5 zH9Fp=(4hnN1gL;>V61JW-wS8JTS3;q5}0dS>-Qb#Q3vcZU;@07y#Ou*9V6{w#K_hH zy#sD!_qt{WIt4BT^&EHuyald+scyiTL*NEj0S~|oxCTzelh*Vv;8>R7#6Q$^fcI$P*Qr5Itq0iVTUgVc7_@K`B)sr@t6g{SCR;8Oe1?}_#+1vPX%rQ^G| z5@eOUgS|yJ`rVo}L-hMJQ-Yz$OfC)hD6`V?yi6`KzS~t}Hew-TL+TAe4%9xG`z9XT zD0pJy2z&%S0v{%D+b5G88gQGjp$w~lWc@EX+O3Ti00000NkvXXu0mjfU#nO8 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_basew.png b/legacy/elementary/data/themes/bt_basew.png new file mode 100644 index 0000000000000000000000000000000000000000..8d787dd2b6540c9501fefd39d854313f14d97745 GIT binary patch literal 1527 zcmVPx#24YJ`L;&Id;{f7L_rh%e000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS< z0wpfr3E0#C000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000G2NklZ|G&v_G+D#U8=c{1JfKLwkw= z@p}!x4FER*ya!-gG|G*67r@qRHhVmu&tIx4mCE67-17hbE-o(K z&gb)&v)Sx1fP1F9L}S(g+&elt`bJZtYGO)>DJfNzNfVR3Rh62QNpoL*Y>xG5Ql^xc zWm#Jpx9oe#!~AAwqp}%8RURH5errap1CWWu%FX@#{V#TRcRzy&$ZV#7APCUE1*Es- zb~3=4`JG1!D5z~@9_tf01PO{vp94hsSu(;j0@&Q#+}hsWetU3ma0uXH>IUuX?0lL9 z^ubU zHGp$B==#RS#$8p~ge+X#qmt>QB9u_GRIE=LgQR*ky12Na-O;K)2fJpiQoTW+6C8f) z*2Y}`*8xnXw!-RkI$eVhbezyOSO$9xf&vID1R+x3;6^fNmYpiL^9mCHQo`7}kPNbg z`82qzwt>KOI#~m-ib%^T^`Nd*uQN=}T5 z2)eE-%M5miqs18aJH)qxgHS-ES%@W6>Y`#AE2J={2wK505{VMeFr@ex8R(Z%8XMH7 zl$9@FTaH%-Xu*sDSz@V)Hx3EcDco?2AsMi)DF8K!q`^-cejx-Y^<#sW5|mo#80JZ> zA*6bkO~6a35LgygR2YdfW{61%vYf?yTt*f{StVnd z7lEiE^-CeAP$gCjW);UnJV`D^SXHg~X2Xbu!oBut!XnapP*S7rY{-1TAyy~@X;}<) zT?bIDMyp!I99H5=8^W#Qy@F_xtwWShmVK;ck5vr?$d)JQ^F*3TqnH;`SDzCr-5>(! z&d$y*@7%ewHknRJgiKm6hF;Pmtq-DOvlf@WjfI1=T}kuqA0P*p1=TxnO% z6g2#+9Tuyi?g-88je}SW@&DarhxxB_eE;<6f!#0Y#5v*l^XEU`xbgnSw{L&AwZ68F z$?7E3T8;)&)ZQGNBH0w0;bdFlrVJQc#c#G^FF+yA~H zlW7$xq^3d{I_c?`G<=}zdX6h dzqIV4@o!J^&6x%qZa)A3002ovPDHLkV1kq_$YlTk literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_hilight.png b/legacy/elementary/data/themes/bt_hilight.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7fe5b0c3dcc30c94d789611f66be280aba571a GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)`!3HD~X4)$NDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RXE12ea~vmqn~VA;}Wgh!W@g+}zZ>5(ej@)Wnk16ovB4 zk_-iRPv3y>Mm}+%q9dLzjv*e$-(FE%cgR8D*hl-DQ?t!7Hxx4k#UJ)~V}1DY9JaHP z8%`X2puH-<*758ln@MJseIgu_mU#bKd2-Fn_%vgK^jncO=4Wzva~iI;Jpae6cOWp- zKi@I!o3zspLBXy?GuEU@uWP!PC{xWt~$(696pTgbe@y literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_hilightw.png b/legacy/elementary/data/themes/bt_hilightw.png new file mode 100644 index 0000000000000000000000000000000000000000..b97a4f81be4d2a8a8733682cf2be6f5a89babe0e GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)`!3HD~X4)$NDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{RXE12Q!beg?|iCNV3E=qQp5rH#aq}gu%HeHL)Z$MWH;i zBtya7(>EZzkxv|`sKwL8F~sBe+bbJ+4><_9TugUi&TEvCiT?6%PRk4}naL9_x4Y_Y zNpP^R5MnyL>&BgVw@8bS81#_jZDizuGb=syL zP-QD|nx1j#-40#l>ksB?1PC*)`sgXLqHpSlnS{i*DjxPiXNtU=qlsM<- z=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`(c#^?15ChD02GJKd14RY8FD>FtQ${D%%& z$V}g~Q6PEk$r}L@TuJJy^Sw45zb{N8 zdb;K>UWYZJJ_j;9GFYCyzPWzI&AG)Vy8_;QUBRi^T%5C#Q#W6D(~N*1r)k2MCI>qS sT?(iOcY2z>-h9V?-djnn0{0)Xa4q`ZWSglI0dyCGr>mdKI;Vst09X5J-2eap literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_sm_base1.png b/legacy/elementary/data/themes/bt_sm_base1.png new file mode 100644 index 0000000000000000000000000000000000000000..c37e182ed27b9b54dfb24bdeb3d94c585e10f16f GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp@KrF$*1|$_fl!pK*#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPShY%-+*@x^Snm{4R64!_l=ltB< z)VvY~=c3falGGH1^30M91$R&1fbd2>aiCQeo-U3d7N^%vKI?VFK%{lQiuqhIN6CY8 zqvfxZOT-^-m5x7nbdRh1(SwtgnRU)i(dhdeys^MT^RLBoxx5GS<))T?JJ0X%Ya#E3 zS~EA(b%a>(utI?n6N!RWDRv8%x` znQb1O0!+S_mpoeH!jk>gF+;|kVNS7E5oeT3gpOFcIAcIJM`)<*?DX}vxod5?rdF^9 zHCR41;W=F6;qonQQn2fjw5ug**=vtRbzl3r!>|*@c#Gt=XNgtT2;%R z)99GGfpJ}<^aHJUv&q2~512C=%@0i7ozft+aiCSUo-U3d7N_S<@y$AHAmBFtpNue5-oldD zU2iyN?f#k(Svom)`c8*(-qxn3rygPAvQw9I&fOtjlW_X;49Q64qx~icja&tv)-}fM zVYgCX+B>OV^a4Zq0p0*+HV+5x8YcMz(+`9ku-(8C=I}3B|MhvHa7LYm<%|z5Xm>_u zynGmD)SIbU=;!^`)L=iuS?~2xVm#MRGI%k2)%1q^w4a=My7`*a(qqEQrt~Rh>mK9T zKCRe}-|{)zLW#$jmDi%uHs9PbZ_U<_(9(_bl}}ijbMa0yXDf|0m)&$t&QbEjbTg+i zGx;>HbCz?8Gis|me(lqrDKsH>reE?Iz2`Re;Yl2f$!GkQS!B-qe_rCTRf~gH=dN}2 zbBonl9C`|MllSXCUv@uld%o{w8;zxMd%ufp&)xm`-u^tZ+2RjmKm6Ypq4rujWJ$f* U-yK?pz|dy!boFyt=akR{0MI+P@&Et; literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_sm_hilight.png b/legacy/elementary/data/themes/bt_sm_hilight.png new file mode 100644 index 0000000000000000000000000000000000000000..63899caac8e015162306ef2a8088af573044dbaa GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp@K+MCz1|)ZGH@^v_7>k44ofy`glX(f`a29w(7Bet# z3xhBt!>lO88kb?lj0n31Z52?&a>Ic34L`*eZ!s;n_?V)m~ zkbtc{=aGWWM~AE5zI}J#-KX{9yB274nSQ&GaPRfb$2~TuH=UO5GL+kJc-4G&m)>BG zha8*Z3cJ})9dX&XR(jDg*2I*lYOPv2>H%||OvQxVR|l<-`Lo~YI)6sVo)6qrehZ?- a_b>!XDC}*jKQ{~LDh5wiKbLh*2~7Y831e~q literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/bt_sm_shine.png b/legacy/elementary/data/themes/bt_sm_shine.png new file mode 100644 index 0000000000000000000000000000000000000000..23bf3110e10797618b2b3ec49c3678405a8c9bd9 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp@KrF$*1|$_fl!pK*#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPShY%-^*%Wq0U7(O;iEBiObAE1a zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI8afZr;B5V#p$P$47m;{2(XyuO2wx?4PL`k zxuDKPkzYcZyZC{l0!tIOn6<&3!i+QfnPl!1Go{r8bsS)Ax##>oaP}ky{Tb|&)KU*{ zK5MYq literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/default.edc b/legacy/elementary/data/themes/default.edc new file mode 100644 index 0000000000..ed2004b9d9 --- /dev/null +++ b/legacy/elementary/data/themes/default.edc @@ -0,0 +1,2121 @@ +collections { + +/////////////////////////////////////////////////////////////////////////////// + group { name: "bg"; + images { + image: "dia_grad.png" COMP; + image: "dia_topshad.png" COMP; + image: "dia_botshad.png" COMP; + } + parts { + part { name: "base"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "dia_grad.png"; + fill { + smooth: 0; + size { + relative: 0.0 1.0; + offset: 64 0; + } + } + } + } + part { name: "elm.swallow.background"; + type: SWALLOW; + description { state: "default" 0.0; + } + } + part { name: "shadow"; + mouse_events: 0; + description { state: "default" 0.0; + rel2.relative: 1.0 0.0; + rel2.offset: -1 31; + image.normal: "dia_topshad.png"; + fill { + smooth: 0; + size { + relative: 0.0 1.0; + offset: 64 0; + } + } + } + } + part { name: "shadow2"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.relative: 0.0 1.0; + rel1.offset: 0 -4; + image.normal: "dia_botshad.png"; + fill { + smooth: 0; + size { + relative: 0.0 1.0; + offset: 64 0; + } + } + } + } + part { name: "elm.swallow.contents"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.offset: 4 4; + rel2.offset: -5 -5; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "scroller"; + images { + image: "shelf_inset.png" COMP; + image: "bt_sm_base2.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "sb_runnerh.png" COMP; + image: "sb_runnerv.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + description { state: "default" 0.0; + rel1.offset: 1 1; + rel2.offset: -2 -2; + color: 255 255 255 0; + } + } + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + } + } + part { name: "elm.swallow.content"; + clip_to: "clipper"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.offset: 1 1; + rel2.offset: -2 -2; + } + } + part { name: "conf_over"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: 0 0; + rel2.offset: -1 -1; + image { + normal: "shelf_inset.png"; + border: 7 7 7 7; + middle: 0; + } + fill.smooth : 0; + } + } + part { name: "sb_vbar_clip"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + } + description { state: "hidden" 0.0; + visible: 0; + color: 255 255 255 0; + } + } + part { name: "sb_vbar"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 17 17; + align: 1.0 0.0; + rel1 { + relative: 1.0 0.0; + offset: -2 0; + } + rel2 { + relative: 1.0 0.0; + offset: -2 -1; + to_y: "sb_hbar"; + } + } + } + part { name: "sb_vbar_runner"; + clip_to: "sb_vbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + min: 3 3; + max: 3 99999; + rel1.to: "sb_vbar"; + rel2.to: "sb_vbar"; + image { + normal: "sb_runnerv.png"; + border: 0 0 4 4; + } + fill.smooth: 0; + } + } + part { name: "elm.dragable.vbar"; + clip_to: "sb_vbar_clip"; + mouse_events: 0; + dragable { + x: 0 0 0; + y: 1 1 0; + confine: "sb_vbar"; + } + description { state: "default" 0.0; + min: 17 17; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar"; + } + image { + normal: "bt_sm_base2.png"; + border: 6 6 6 6; + } + } + } + part { name: "sb_vbar_over1"; + clip_to: "sb_vbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "elm.dragable.vbar"; + rel2.relative: 1.0 0.5; + rel2.to: "elm.dragable.vbar"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + } + part { name: "sb_vbar_over2"; + clip_to: "sb_vbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "elm.dragable.vbar"; + rel2.to: "elm.dragable.vbar"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + } + + part { name: "sb_hbar_clip"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + } + description { state: "hidden" 0.0; + visible: 0; + color: 255 255 255 0; + } + } + part { name: "sb_hbar"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 17 17; + align: 0.0 1.0; + rel1 { + relative: 0.0 1.0; + offset: 0 -2; + } + rel2 { + relative: 0.0 1.0; + offset: -1 -2; + to_x: "sb_vbar"; + } + } + } + part { name: "sb_hbar_runner"; + clip_to: "sb_hbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + min: 3 3; + max: 99999 3; + rel1.to: "sb_hbar"; + rel2.to: "sb_hbar"; + image { + normal: "sb_runnerh.png"; + border: 4 4 0 0; + } + fill.smooth: 0; + } + } + part { name: "elm.dragable.hbar"; + clip_to: "sb_hbar_clip"; + mouse_events: 0; + dragable { + x: 1 1 0; + y: 0 0 0; + confine: "sb_hbar"; + } + description { state: "default" 0.0; + min: 17 17; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar"; + } + image { + normal: "bt_sm_base2.png"; + border: 6 6 6 6; + } + } + } + part { name: "sb_hbar_over1"; + clip_to: "sb_hbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "elm.dragable.hbar"; + rel2.relative: 1.0 0.5; + rel2.to: "elm.dragable.hbar"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + } + part { name: "sb_hbar_over2"; + clip_to: "sb_hbar_clip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "elm.dragable.hbar"; + rel2.to: "elm.dragable.hbar"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + } + } + programs { + program { name: "sb_vbar_show"; + signal: "elm,action,show,vbar"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 1.0; + target: "sb_vbar_clip"; + after: "sb_vbar_hide"; + } + program { name: "sb_vbar_hide"; + signal: "elm,action,hide,vbar"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + transition: LINEAR 1.0; + target: "sb_vbar_clip"; + } + program { name: "sb_hbar_show"; + signal: "elm,action,show,hbar"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 1.0; + target: "sb_hbar_clip"; + after: "sb_hbar_hide"; + } + program { name: "sb_hbar_hide"; + signal: "elm,action,hide,hbar"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + transition: LINEAR 1.0; + target: "sb_hbar_clip"; + } + // FIXME: check if visible and only if not - do this + program { name: "scroll"; + signal: "elm,action,scroll"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 1.0; + target: "sb_vbar_clip"; + target: "sb_hbar_clip"; + after: "sb_vbar_hide"; + after: "sb_hbar_hide"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "label"; + styles + { + style { name: "textblock_style"; + base: "font=Sans font_size=10 align=left color=#000 wrap=word"; + + tag: "br" "\n"; + tag: "hilight" "+ font=Sans:style=Bold"; + tag: "b" "+ font=Sans:style=Bold"; + } + } + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + text { + style: "textblock_style"; + min: 1 1; + } + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "button"; + images { + image: "bt_base1.png" COMP; + image: "bt_base2.png" COMP; + image: "bt_hilight.png" COMP; + image: "bt_shine.png" COMP; + } + parts { + part { name: "button_image"; + mouse_events: 1; + description { state: "default" 0.0; + image { + normal: "bt_base2.png"; + border: 7 7 7 7; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: "bt_base1.png"; + } + } + part { name: "elm.swallow.contents"; + type: SWALLOW; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1.offset: 4 4; + rel2.offset: 3 -5; + rel2.relative: 0.0 1.0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel2.offset: 4 -5; + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + rel1.to_x: "elm.swallow.contents"; + rel1.relative: 1.0 0.0; + rel1.offset: 0 4; + rel2.offset: -5 -5; + color: 224 224 224 255; + color3: 0 0 0 64; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.5 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + } + } + part { name: "over1"; + mouse_events: 0; + description { state: "default" 0.0; + rel2.relative: 1.0 0.5; + image { + normal: "bt_hilight.png"; + border: 7 7 7 0; + } + } + } + part { name: "over2"; + mouse_events: 1; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { state: "default" 0.0; + image { + normal: "bt_shine.png"; + border: 7 7 7 7; + } + } + } + } + programs { + program { + name: "button_click"; + signal: "mouse,down,1"; + source: "button_image"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + } + program { + name: "button_unclick"; + signal: "mouse,up,1"; + source: "button_image"; + action: STATE_SET "default" 0.0; + target: "button_image"; + } + program { + name: "button_unclick2"; + signal: "mouse,clicked,1"; + source: "over2"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + 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.contents"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.contents"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "toggle"; + 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: -16 3; + rel2.offset: -16 -4; + align: 1.0 0.5; + min: 96 24; + max: 96 24; + 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: 24 24; + max: 24 24; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + color: 0 0 0 0; + } + } + part { name: "onrect"; + type: RECT; + scale: 1; + clip_to: "clipper"; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "button"; + rel1.relative: -3.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: 1; + description { state: "default" 0.0; + rel1.to: "button"; + rel1.relative: 1.0 0.0; + rel2.to: "button"; + rel2.relative: 4.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; + rel1.to: "offrect"; + rel2.to: "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; + mouse_events: 0; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "onrect"; + rel2.to: "onrect"; + color: 0 0 0 255; + 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; + } + 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; + } + } + } + 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.contents"; + type: SWALLOW; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1.offset: 4 4; + rel2.offset: 3 -5; + rel2.relative: 0.0 1.0; + } + description { state: "visible" 0.0; + inherit: "default" 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.contents"; + 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", 100.0, 0.0); + emit("elm,action,toggle,on", ""); + } + else + { + set_drag(PART:"button", 0.0, 0.0); + emit("elm,action,toggle,off", ""); + } + } + } + program { name: "toggle_on"; + signal: "elm,state,toggle,on"; + source: "elm"; + script { + set_drag(PART:"button", 100.0, 0.0); + } + } + program { name: "toggle_off"; + signal: "elm,state,toggle,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.contents"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.contents"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "flipdigit"; + images { + image: "flip_base.png" COMP; + image: "flip_base_shad.png" COMP; + image: "flip_shad.png" COMP; + image: "flip_0t.png" COMP; + image: "flip_0b.png" COMP; + image: "flip_1t.png" COMP; + image: "flip_1b.png" COMP; + image: "flip_2t.png" COMP; + image: "flip_2b.png" COMP; + image: "flip_3t.png" COMP; + image: "flip_3b.png" COMP; + image: "flip_4t.png" COMP; + image: "flip_4b.png" COMP; + image: "flip_5t.png" COMP; + image: "flip_5b.png" COMP; + image: "flip_6t.png" COMP; + image: "flip_6b.png" COMP; + image: "flip_7t.png" COMP; + image: "flip_7b.png" COMP; + image: "flip_8t.png" COMP; + image: "flip_8b.png" COMP; + image: "flip_9t.png" COMP; + image: "flip_9b.png" COMP; + image: "arrow_up.png" COMP; + image: "arrow_down.png" COMP; + } + script { + public v0_cur, v0_pre, v0_lock, v0_next; + + public animator2(val, Float:pos) { + new st1[11], st2[11], v; + + v = get_int(v0_cur); + snprintf(st1, 10, "%ih", v); + snprintf(st2, 10, "%i", v); + set_tween_state(PART:"bot", pos, st1, 0.0, st2, 0.0); + set_tween_state(PART:"sh", pos, "half", 0.0, "full", 0.0); + if (pos >= 1.0) { + set_state(PART:"sh", "default", 0.0); + set_int(v0_lock, 0); + v = get_int(v0_next); + if (v >= 0) { + set_int(v0_next, -1); + message(MSG_INT, 1, v); + } + } + } + public animator1(val, Float:pos) { + new st1[11], st2[11], v; + + v = get_int(v0_pre); + snprintf(st1, 10, "%i", v); + snprintf(st2, 10, "%ih", v); + set_tween_state(PART:"top", pos, st1, 0.0, st2, 0.0); + set_tween_state(PART:"sh", pos, "default", 0.0, "half", 0.0); + if (pos >= 1.0) anim(0.2, "animator2", val); + } + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT) && (id == 1)) { + new value, v, buf[11]; + + value = getarg(2); + if (get_int(v0_lock) == 1) { + set_int(v0_next, value); + return; + } + v = get_int(v0_cur); + set_int(v0_pre, v); + set_int(v0_cur, value); + set_int(v0_lock, 1); + snprintf(buf, 10, "%i", get_int(v0_pre)); + set_state(PART:"bot0", buf, 0.0); + snprintf(buf, 10, "%ih", get_int(v0_cur)); + set_state(PART:"bot", buf, 0.0); + snprintf(buf, 10, "%i", get_int(v0_cur)); + set_state(PART:"top0", buf, 0.0); + snprintf(buf, 10, "%i", get_int(v0_pre)); + set_state(PART:"top", buf, 0.0); + set_state(PART:"sh", "default", 0.0); + anim(0.2, "animator1", 1); + } + } + } + parts { + part { name: "shad"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: -4 -4; + rel1.to: "base"; + rel2.offset: 3 3; + rel2.to: "base"; + image { + normal: "flip_base_shad.png"; + border: 8 8 8 8; + } + } + } + part { name: "base"; + scale: 1; + description { state: "default" 0.0; + rel1.offset: 4 4; + rel2.offset: -5 -5; + // FIXME 48x96 should be the native pixel design, right now + // its 80x160. fix int he artwork later + min: 24 48; + max: 24 48; + image.normal: "flip_base.png"; + } + } + part { name: "b"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "base"; + rel1.relative: 0.0 0.5; + rel2.to: "base"; + color: 0 0 0 0; + } + } + part { name: "t"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + rel2.relative: 1.0 0.5; + color: 0 0 0 0; + } + } + part { name: "bot0"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "flip_0b.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + image.normal: "flip_0b.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + image.normal: "flip_1b.png"; + } + description { state: "2" 0.0; + inherit: "default" 0.0; + image.normal: "flip_2b.png"; + } + description { state: "3" 0.0; + inherit: "default" 0.0; + image.normal: "flip_3b.png"; + } + description { state: "4" 0.0; + inherit: "default" 0.0; + image.normal: "flip_4b.png"; + } + description { state: "5" 0.0; + inherit: "default" 0.0; + image.normal: "flip_5b.png"; + } + description { state: "6" 0.0; + inherit: "default" 0.0; + image.normal: "flip_6b.png"; + } + description { state: "7" 0.0; + inherit: "default" 0.0; + image.normal: "flip_7b.png"; + } + description { state: "8" 0.0; + inherit: "default" 0.0; + image.normal: "flip_8b.png"; + } + description { state: "9" 0.0; + inherit: "default" 0.0; + image.normal: "flip_9b.png"; + } + } + part { name: "sh"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "b"; + rel2.to: "b"; + rel2.relative: 1.0 0.0; + image.normal: "flip_shad.png"; + } + description { state: "half" 0.0; + inherit: "default" 0.0; + rel2.relative: 1.0 0.5; + } + description { state: "full" 0.0; + inherit: "default" 0.0; + rel2.relative: 1.0 1.0; + } + } + part { name: "bot"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "flip_0b.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_0b.png"; + } + description { state: "0h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_0b.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_1b.png"; + } + description { state: "1h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_1b.png"; + } + description { state: "2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_2b.png"; + } + description { state: "2h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_2b.png"; + } + description { state: "3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_3b.png"; + } + description { state: "3h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_3b.png"; + } + description { state: "4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_4b.png"; + } + description { state: "4h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_4b.png"; + } + description { state: "5" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_5b.png"; + } + description { state: "5h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_5b.png"; + } + description { state: "6" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_6b.png"; + } + description { state: "6h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_6b.png"; + } + description { state: "7" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_7b.png"; + } + description { state: "7h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_7b.png"; + } + description { state: "8" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_8b.png"; + } + description { state: "8h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_8b.png"; + } + description { state: "9" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_9b.png"; + } + description { state: "9h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_9b.png"; + } + } + part { name: "top0"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "flip_0t.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + image.normal: "flip_0t.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + image.normal: "flip_1t.png"; + } + description { state: "2" 0.0; + inherit: "default" 0.0; + image.normal: "flip_2t.png"; + } + description { state: "3" 0.0; + inherit: "default" 0.0; + image.normal: "flip_3t.png"; + } + description { state: "4" 0.0; + inherit: "default" 0.0; + image.normal: "flip_4t.png"; + } + description { state: "5" 0.0; + inherit: "default" 0.0; + image.normal: "flip_5t.png"; + } + description { state: "6" 0.0; + inherit: "default" 0.0; + image.normal: "flip_6t.png"; + } + description { state: "7" 0.0; + inherit: "default" 0.0; + image.normal: "flip_7t.png"; + } + description { state: "8" 0.0; + inherit: "default" 0.0; + image.normal: "flip_8t.png"; + } + description { state: "9" 0.0; + inherit: "default" 0.0; + image.normal: "flip_9t.png"; + } + } + part { name: "top"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "flip_0t.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_0t.png"; + } + description { state: "0h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_0t.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_1t.png"; + } + description { state: "1h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_1t.png"; + } + description { state: "2" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_2t.png"; + } + description { state: "2h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_2t.png"; + } + description { state: "3" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_3t.png"; + } + description { state: "3h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_3t.png"; + } + description { state: "4" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_4t.png"; + } + description { state: "4h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_4t.png"; + } + description { state: "5" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_5t.png"; + } + description { state: "5h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_5t.png"; + } + description { state: "6" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_6t.png"; + } + description { state: "6h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_6t.png"; + } + description { state: "7" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_7t.png"; + } + description { state: "7h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_7t.png"; + } + description { state: "8" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_8t.png"; + } + description { state: "8h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_8t.png"; + } + description { state: "9" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_9t.png"; + } + description { state: "9h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_9t.png"; + } + } + part { name: "atop"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 15 15; + max: 15 15; + align: 0.5 0.0; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "arrow_up.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "abot"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 15 15; + max: 15 15; + align: 0.5 1.0; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "arrow_down.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "load"; + signal: "load"; + source: ""; + script { + set_int(v0_cur, 0); + set_int(v0_pre, 0); + set_int(v0_lock, 0); + set_int(v0_next, -1); + } + } + program { name: "edit_on"; + signal: "elm,state,edit,on"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "atop"; + target: "abot"; + } + program { name: "edit_off"; + signal: "elm,state,edit,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "atop"; + target: "abot"; + } + program { name: "up"; + signal: "mouse,down,1"; + source: "t"; + action: SIGNAL_EMIT "elm,action,up" ""; + } + program { name: "down"; + signal: "mouse,down,1"; + source: "b"; + action: SIGNAL_EMIT "elm,action,down" ""; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "flipampm"; + images { + image: "flip_base.png" COMP; + image: "flip_base_shad.png" COMP; + image: "flip_shad.png" COMP; + image: "flip_amt.png" COMP; + image: "flip_amb.png" COMP; + image: "flip_pmt.png" COMP; + image: "flip_pmb.png" COMP; + image: "arrow_up.png" COMP; + image: "arrow_down.png" COMP; + } + script { + public v0_cur, v0_pre, v0_lock, v0_next; + + public animator2(val, Float:pos) { + new st1[11], st2[11], v; + + v = get_int(v0_cur); + snprintf(st1, 10, "%ih", v); + snprintf(st2, 10, "%i", v); + set_tween_state(PART:"bot", pos, st1, 0.0, st2, 0.0); + set_tween_state(PART:"sh", pos, "half", 0.0, "full", 0.0); + if (pos >= 1.0) { + set_state(PART:"sh", "default", 0.0); + set_int(v0_lock, 0); + v = get_int(v0_next); + if (v >= 0) { + set_int(v0_next, -1); + message(MSG_INT, 1, v); + } + } + } + public animator1(val, Float:pos) { + new st1[11], st2[11], v; + + v = get_int(v0_pre); + snprintf(st1, 10, "%i", v); + snprintf(st2, 10, "%ih", v); + set_tween_state(PART:"top", pos, st1, 0.0, st2, 0.0); + set_tween_state(PART:"sh", pos, "default", 0.0, "half", 0.0); + if (pos >= 1.0) anim(0.2, "animator2", val); + } + public message(Msg_Type:type, id, ...) { + if ((type == MSG_INT) && (id == 1)) { + new value, v, buf[11]; + + value = getarg(2); + if (get_int(v0_lock) == 1) { + set_int(v0_next, value); + return; + } + v = get_int(v0_cur); + set_int(v0_pre, v); + set_int(v0_cur, value); + set_int(v0_lock, 1); + snprintf(buf, 10, "%i", get_int(v0_pre)); + set_state(PART:"bot0", buf, 0.0); + snprintf(buf, 10, "%ih", get_int(v0_cur)); + set_state(PART:"bot", buf, 0.0); + snprintf(buf, 10, "%i", get_int(v0_cur)); + set_state(PART:"top0", buf, 0.0); + snprintf(buf, 10, "%i", get_int(v0_pre)); + set_state(PART:"top", buf, 0.0); + set_state(PART:"sh", "default", 0.0); + anim(0.2, "animator1", 1); + } + } + } + parts { + part { name: "shad"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: -4 -4; + rel1.to: "base"; + rel2.offset: 3 3; + rel2.to: "base"; + image { + normal: "flip_base_shad.png"; + border: 8 8 8 8; + } + } + } + part { name: "base"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.offset: 4 4; + rel2.offset: -5 -5; + // FIXME 48x96 should be the native pixel design, right now + // its 80x160. fix int he artwork later + min: 24 48; + max: 24 48; + image.normal: "flip_base.png"; + } + } + part { name: "b"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "base"; + rel1.relative: 0.0 0.5; + rel2.to: "base"; + color: 0 0 0 0; + } + } + part { name: "t"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + rel2.relative: 1.0 0.5; + color: 0 0 0 0; + } + } + part { name: "bot0"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "flip_amb.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + image.normal: "flip_amb.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + image.normal: "flip_pmb.png"; + } + } + part { name: "sh"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "b"; + rel2.to: "b"; + rel2.relative: 1.0 0.0; + image.normal: "flip_shad.png"; + } + description { state: "half" 0.0; + inherit: "default" 0.0; + rel2.relative: 1.0 0.5; + } + description { state: "full" 0.0; + inherit: "default" 0.0; + rel2.relative: 1.0 1.0; + } + } + part { name: "bot"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "flip_amb.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_amb.png"; + } + description { state: "0h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_amb.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + rel2.relative: 1.0 1.0; + image.normal: "flip_pmb.png"; + } + description { state: "1h" 0.0; + inherit: "default" 0.0; + visible: 0; + rel2.relative: 1.0 0.0; + image.normal: "flip_pmb.png"; + } + } + part { name: "top0"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "flip_amt.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + image.normal: "flip_amt.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + image.normal: "flip_pmt.png"; + } + } + part { name: "top"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 1; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "flip_amt.png"; + } + description { state: "0" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_amt.png"; + } + description { state: "0h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_amt.png"; + } + description { state: "1" 0.0; + inherit: "default" 0.0; + visible: 1; + rel1.relative: 0.0 0.0; + image.normal: "flip_pmt.png"; + } + description { state: "1h" 0.0; + inherit: "default" 0.0; + color: 128 128 128 255; + visible: 0; + rel1.relative: 0.0 1.0; + image.normal: "flip_pmt.png"; + } + } + part { name: "atop"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 15 15; + max: 15 15; + align: 0.5 0.0; + rel1.to: "t"; + rel2.to: "t"; + image.normal: "arrow_up.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "abot"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + min: 15 15; + max: 15 15; + align: 0.5 1.0; + rel1.to: "b"; + rel2.to: "b"; + image.normal: "arrow_down.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "load"; + signal: "load"; + source: ""; + script { + set_int(v0_cur, 0); + set_int(v0_pre, 0); + set_int(v0_lock, 0); + set_int(v0_next, -1); + } + } + program { name: "edit_on"; + signal: "elm,state,edit,on"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "atop"; + target: "abot"; + } +/* + program { name: "edit_off"; + signal: "elm,state,edit,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "atop"; + target: "abot"; + } + */ + program { name: "up"; + signal: "mouse,down,1"; + source: "t"; + action: SIGNAL_EMIT "elm,action,up" ""; + } + program { name: "down"; + signal: "mouse,down,1"; + source: "b"; + action: SIGNAL_EMIT "elm,action,down" ""; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "clock/all"; + parts { + part { name: "d0"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.0000000 0.0; + rel2.relative: 0.1250000 1.0; + } + } + part { name: "d1"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.1250000 0.0; + rel2.relative: 0.2500000 1.0; + } + } + part { name: "c0"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.2500000 0.0; + rel2.relative: 0.3125000 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "d2"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.3125000 0.0; + rel2.relative: 0.4375000 1.0; + } + } + part { name: "d3"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.4375000 0.0; + rel2.relative: 0.5625000 1.0; + } + } + // (if seconds) + part { name: "c1"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.5625000 0.0; + rel2.relative: 0.6250000 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + // (if seconds) + part { name: "d4"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.6250000 0.0; + rel2.relative: 0.7500000 1.0; + } + } + // (if seconds) + part { name: "d5"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.7500000 0.0; + rel2.relative: 0.8750000 1.0; + } + } + // (if am_pm) + part { name: "ampm"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.8750000 0.0; + rel2.relative: 1.0 1.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "clock/seconds"; + parts { + part { name: "d0"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.000000000 0.0; + rel2.relative: 0.142857143 1.0; + } + } + part { name: "d1"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.142857143 0.0; + rel2.relative: 0.285714286 1.0; + } + } + part { name: "c0"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.285714286 0.0; + rel2.relative: 0.357142857 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "d2"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.357142857 0.0; + rel2.relative: 0.500000000 1.0; + } + } + part { name: "d3"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.500000000 0.0; + rel2.relative: 0.642857143 1.0; + } + } + // (if seconds) + part { name: "c1"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.642857143 0.0; + rel2.relative: 0.714285714 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + // (if seconds) + part { name: "d4"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.714285714 0.0; + rel2.relative: 0.857142857 1.0; + } + } + // (if seconds) + part { name: "d5"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.857142857 0.0; + rel2.relative: 1.000000000 1.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "clock/am_pm"; + parts { + part { name: "d0"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.000000000 0.0; + rel2.relative: 0.181818182 1.0; + } + } + part { name: "d1"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.181818182 0.0; + rel2.relative: 0.363636364 1.0; + } + } + part { name: "c0"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.363636364 0.0; + rel2.relative: 0.454545455 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "d2"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.454545455 0.0; + rel2.relative: 0.636363636 1.0; + } + } + part { name: "d3"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.636363636 0.0; + rel2.relative: 0.818181818 1.0; + } + } + // (if am_pm) + part { name: "ampm"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.818181818 0.0; + rel2.relative: 1.0 1.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "clock"; + parts { + part { name: "d0"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.000000000 0.0; + rel2.relative: 0.222222222 1.0; + } + } + part { name: "d1"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.222222222 0.0; + rel2.relative: 0.444444444 1.0; + } + } + part { name: "c0"; + type: SWALLOW; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 0.444444444 0.0; + rel2.relative: 0.555555556 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + text: ":"; + size: 20; + min: 1 1; + align: 0.5 0.5; + } + } + } + part { name: "d2"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.555555556 0.0; + rel2.relative: 0.777777778 1.0; + } + } + part { name: "d3"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.relative: 0.777777778 0.0; + rel2.relative: 1.000000000 1.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "pad"; + parts { + part { name: "t"; + type: RECT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.0; + min: 4 4; + max: 4 4; + rel1.relative: 0.0 0.0; + rel2.relative: 0.0 0.0; + rel2.offset: 0 0; + } + } + part { name: "b"; + type: RECT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + align: 1.0 1.0; + min: 4 4; + max: 4 4; + rel1.relative: 1.0 1.0; + rel1.offset: -1 -1; + rel2.relative: 1.0 1.0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "t"; + rel1.relative: 1.0 1.0; + rel2.to: "b"; + rel2.relative: 0.0 0.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "frame"; + images { + image: "frame_1.png" COMP; + image: "frame_2.png" COMP; + image: "dia_grad.png" COMP; + } + parts { + part { name: "base0"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "dia_grad.png"; + rel1.to: "over"; + rel2.to: "over"; + fill { + smooth: 0; + size { + relative: 0.0 1.0; + offset: 64 0; + } + } + } + } + part { name: "base"; + mouse_events: 0; + description { state: "default" 0.0; + image { + normal: "frame_2.png"; + border: 5 5 32 26; + middle: 0; + } + fill.smooth : 0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { + to_y: "elm.text"; + relative: 0.0 1.0; + offset: 8 2; + } + rel2.offset: -9 -9; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + fixed: 0 1; + rel1 { + relative: 0.0 0.0; + offset: 6 6; + } + rel2 { + relative: 1.0 0.0; + offset: -7 6; + } + color: 0 0 0 64; + text { + font: "Sans:style=Bold,Edje-Vera-Bold"; + size: 10; + min: 1 1; + max: 1 1; + align: 0.0 0.0; + } + } + } + part { name: "over"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: 4 4; + rel2.offset: -5 -5; + image { + normal: "frame_1.png"; + border: 2 2 28 22; + middle: 0; + } + fill.smooth : 0; + } + } + } + } +} diff --git a/legacy/elementary/data/themes/dia_botshad.png b/legacy/elementary/data/themes/dia_botshad.png new file mode 100644 index 0000000000000000000000000000000000000000..89a598e0f22795e2fa37f249c6bbe00504e2fcec GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo!3HEflYZU@QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4OUhG75)w1M4khMBuiW)N}Tg^ zb5rw57@Uhz6H8K46v{J8G8EiBeFMT9`NV;WbUa-gLp+WrCrGd^PHpUXO@geCyluQy5n literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/dia_grad.png b/legacy/elementary/data/themes/dia_grad.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd7d0e1d1da0dfb9eb6d2192614e9fedc1e87a7 GIT binary patch literal 5155 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 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/dia_topshad.png b/legacy/elementary/data/themes/dia_topshad.png new file mode 100644 index 0000000000000000000000000000000000000000..1a772130a537475cefb08d825975a0e077194f88 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4aySb-B8wRq zxP?KOkzv*x37{Z*iKnkC`wdoB9u~|0U;du}3Q3l@MwB?`=jNv7l`uFLr6!i7rYMwW zmSiZnd-?{1H}Z)C6{UH)IEG~0dwbQFt3iQ*^(q+~IjCqVK3Ctx%4zfSGe=XJg o@PT{97gir8j)XKIaC^hpxmqA#&%&K6fi^ODy85}Sb4q9e07Se}*8l(j literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip.xcf.gz b/legacy/elementary/data/themes/flip.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..36aca4d2b511ec96ee3c7ad8ef947d1858e1e5f9 GIT binary patch literal 10985 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 U`$L{*3HPl7=2$CCwTXM|e+P!eLjV8( literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_0t.png b/legacy/elementary/data/themes/flip_0t.png new file mode 100644 index 0000000000000000000000000000000000000000..72506aa1b10c716c2a6d26895c4bcfd851ae1c0f GIT binary patch literal 1547 zcmV+m2K4!fP)Pa1J-Um1BDdszU*{ix%g))Sv(~(fz0cO3qZTXX82^~xnsbgZ z=KTL<0FyjDJ^iY^{mt6i`s3^0)bD>1FlzGh^75DV*WYbyY(C+C4fsQY_owzN^X~2r z-z#or2x#EI!NCDr^lR^bF_=c)A6Hjb3LFOkXJ=<@U5WtrwUPHxjXVx|T2s?V{A{Jk z2L+E0o@vZ!y0jljRae^v{h_m~m zsiv?bL#o71VB}ZNWfFuSp@J@ z6efVEf`|k}wFXMSQ)?grJhcWAKva34Bt#WNBmvq;>PxBP&FxD|OR%!C0^8f$`fG1* z4=yh+;rjYoe_^Dg_7QDyYaaC>`e zyuZH}wZW}-c6J6mJv}fwItsJ1vv6~B!)@cOf}^7&#Ky)#YHBKEXJ><_r>B%X9%Xxb z`|k&EYHA7^8yjI{WCR``A9?&_Zi~-uq@|@nad9!k$Hz14i8lN$0GF4Sp|Y|P#>dA+ z{S?wmN=kx?iVBE~j1FGZVJna1D=BDlw zuD{em3b3W61@iLp03VzE(L~EOASWjW+S=MkT_Xe7)zt-MWo4i}kWA_zr7`raw6qj@ zdwa>u8nk59D4SMbgvA`}y*%}aiFaRLA0#9sNP$E<(g1gMc63LudU#Lb>go!Ulat`@ z?=S2&0+gD<&(F_LR8;it;32V#iwh_zDUn`sqyW~|*24V!yznRZe=E++%s_p8y_6fm zQ+RiG7h+;!NXs(q8$%!?BLgxsGxZ9>%gYNNYKG(EV_02Xh5r72{YAOfVlKC^umFC3 ze%v7SHBkGq38RQZ`T6;JXQ%{sRvH=_AS5KjtVzu2aOz>FsU#~aOQ>SP+FJ3acm+3EWdp$5YYq<&!~Xt0uN(X$u&Jp@ z-zBDyxVSjLZ6{HY)qi_ktWrdFj=0W5FxYf5(9lpSa}X95256H?So_KqM6mFt65K+ z{eMcESd}0|7GVk^JW+||qTb%#EX}yuP}^KzU$=OD<{(0SK>jUm0P^tgu-IXq2CRK% zn!*PM2Rzrd*w)?M-C`Tw2GllL`^*IJZF5^8X)U8yE9E;>RW&*wz0mZPko;> xYoD0_vS#J1LyEHSf4wHPO;UiY#(qYCe*;S|O!Eakt z5%>0{p&wHqgKOYSHm|Y;+C{nR4)N|#%w4OY$WpRzFXuC#q!K+**6)vHtLF({QyHC!)GxG1+Ij9Ow2BfXQI&+OYhyd?}=~Wo@qxv&A&6}y>ibRMnW2&|3CKN z_y3=J`VIbZF_UR6k#3y7?)q!%c^hxl-0+=#`f24>rizD$^NMZc-fzGCR(syoQ-4aV zY<+g$eV1GJX@?i%ju(k$Z}#nLeXg$W{JF-?{@~32cCz)K+b(X9N_*U7&p4OKdBT<{ Shh_j{g~8L+&t;ucLK6TFnXCo? literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_1t.png b/legacy/elementary/data/themes/flip_1t.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1fba8f0e3a5682079858f86fed8e26b809325f GIT binary patch literal 666 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 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_3b.png b/legacy/elementary/data/themes/flip_3b.png new file mode 100644 index 0000000000000000000000000000000000000000..2eca7d4f24ab432324c846402e3e49c1ea0f98ba GIT binary patch literal 1408 zcmbu9`#%#30L6zH#ymE}#5^K3H$D_Ck48&lmyP5t^IWmQ$UN#c@3~{i^pVjFxi>0J z-qM(ftch;r8F`gkmphNh<>KmZxaadZ=ljb!zn)xz`#A_04h8@K5Em@QbDxACmIv)8 zQ*HI}K7jE~E?)Bcx-K712LNPkTriGaNf(#O0!$l&)cZ#A)+*>aIf@GybcRo9w<%M3?nXVABA z-)IbmqIM;R?1+|Ou~-CeZ_wc2V7TN8RNu3d!^vJMot&ien9SNXBRzE3ty@fHk?;zU*j0&sk1;YbDkv*^ zWWCrjn1zx9fj~~t(a40v#B>%57SD}J-`GfOG6*Gc>%Y&<%@I63rOV69HD#~3W(JF9 zW(-=}+bze`O=R+`L?Tf-n+^XB{T|fW(b3i2ojz_6r!phqj0_K_7Z)Fh@A?eH;c()O zOffnSS{zbcT`iU>g^|f*iwT&fzB9X|r2ilfCFt*0Xt1x4a>igR{3Y7d z)YOmmbQHZw0aD=OCQ*dfUH2^=0>oUs>N|JBmb0#>ny&zfC6RKFXeyN&nd&6da}+!n z*^j#5OKYWcfgyvMaJY!fR3QHHi-VcDxfQ-Li`&+wUH9Zk8(UdXF|4@{sH#{tHa12G z3{+w;7-H56l$g(}smU#F3r^%6dpUj=T>BB>(c9bW6cJ%ejEwRKwbT%gj%s;%d6`}y za|YhLQR97nnPO}r^)DD82=xxlJ>uZNnXvK+L;Lvn42_P;2L%OjUsRFpo^EY#mvq98 z0rE-fD=TRqJ_KU%_?-Lq4^du(M?{=G@+C~bq7G|sPmYYpp-`xsh-s=yw@_$s^r-6> zfj}@Vk*M(beA@RwUyu5RhK!t?oZy|!O|9mZmOBooPpgnfB(Y;Xm^c2sy&arl|JK;C zBs&%K^i&LFZl#exAP{dO7hnFw?oBycQ&XcU6h0us_3P~X{r#~Y>jtD7TUv6Oo2{4E z)>r^P1^o^tQyGiHh27b;p89M#G%x^ZfA-A4-29f33S>0C-jJ?lra8?=cQnnuCmYJF zT!c}pUyH@DStOV?{UKv(D}|nyH-9H#uR)k#l&>*eQDLB^rJb} zGViM^SnPSM79AbUXoUhS&9qqCR0^t~ z`pHtp7;Pw385qe0Vh^EzSZ7Uw(nXN78ylTepU}w>a>u5XKQPV(3zTN%r-V{=86mM zQ8cVO{>eQK=^WYY^FP?=e0sSoC$B)m@(f~6#%-;msUnHrw124pm$UAeIwxZKfAjN# AiU0rr literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_3t.png b/legacy/elementary/data/themes/flip_3t.png new file mode 100644 index 0000000000000000000000000000000000000000..4de9804623b7ea0e7d8304f776b87bc2a734976c GIT binary patch literal 1444 zcmV;V1zY-wP)t1f}@Ci83=YQt}## znTd)2z(kSPi1G?~6vgMuV}RuS{Px=2`_K0ee`l|K`aAAkwVm5_);@dx?%r$dwe~s3 z1ZH`BeEf@jY_+wu^|O4Zj{hg{!sPk+`Cs;Jhn<~WAO6>be;B+Gb||^My~WRp+Xn;~ zIB;@u!ZUub&!r~w$m_klyj0*c5O8&M#k2oLfd8zrQ~;Ha0?ieLWv7vV{Y@zP^6BzrWX9w-EqZIu#HQ0PXGVP*hZ;xt|{?p!u+h zWz7EmKGfFMLQ_){pskiERsqlgY-nhR+r`t8;OjMk3)ZdKM5dTNHe4Q^6>DWxgsNZ;rBY{=H>mV9D=;=T#uE;D3MM;n8Yd1pWb=-~0TUNSK;Ap{WFkw+kVZvbRwW%vVI1{f6;#i5m#mxGUwk8lG%t5{lE3ZbE) zP+VLreOhC_QdCUL?z|Z3tsSGIqflL4E!y8V^*lX2VRv^|bDcOt4CjRl3JQMONXs@UMyu z4GpBdV-w4X;d?=)HAv5jFj~mX&E>a;$PkR%agRhae#bn3VMZWkOfYF73m*Oe-QC^7 z@GL)|)O41NQSrJCjL~OjXQ8XB3ub0!q*h;9SqUX2C8Ro~q_apZV9L0r!_97XhXl{E z?Ck9Dzv>gGRnXVhM{*pmuc+V|S= zC7cKa(p$PXMcdliAS5J2cGYjzXJWVD>iQn!KjB0$JS!|LK31Us0000Eakt z5%>1a{&k9pGRHnnZ|mrAQk)nezDVF#F|$VR(?5$DHewxnq4cD7~ zcISGzj>v5v9v1A#xqCDzF)Dmx#GahHC04no{?>l-&Uu)(J^R>aj>8WH9^PH^kMrPx z=!&gTJIi+G&I?+6v0$p#(K*%A92V&Ax&JRbTR1FWdsbxme7}Q^``)a##kFDn(F5dm|1N+PDt*^fSUic_>_dVtRb<^4GiX0Q;e@8_#+aGJO-54(E-|)eY zE1)5O;n-CNMkhvzaAsBx)`S>d5e1QkLQ|*&hs29qo;_|FA3gT+^SHk8WV%a~v4F?T|$5{&)7Bcj#ZiGlU9avr|&3wIb`wl6NOjaxkaO$K;;^XC) zU%2}OZ|>OMJ-=T3e{~A$gF|~`b9UdY^HvdhU$DmGSo!W)&3Qg*_4DlaxCSxk+?rjv z`}Fn?KM(V-ul#rLt)0Z@r;Gp9&oloNcJGY-5B{~9tIQ;i*CqhdB!j1`pUXO@geCw^ CNs4+>rGG)6c2)rPqF(gd?h}Rpa`NU3VY0= zB7!1Bu9{GhMSI@n^)ePYRC)FFWl4vWqyT z(dDXe4aBsFF&3rakpQxbc+{#aOF#iKhk^oBfJ_2Rxta(ApqdB+UQViWAQPejRDetZ zOu3o}1E87+1D=|Q06Yw#Cc*@%0J#8lJIgykH4*RZek-+vnGhAA0%Q_k$lWoC^L!ASe1a%q10H}8&40yVoB>+!dSOB7$2m_+dfed&$2MWN`IZyzi zt^=76)kL@enfebcR~Htz{851zzJxeGKZpAIdbqf_5RWezGqfhs+1cp}Jn5?uN)uUJ zT!f{iCFxwngL@5lc6J604Gq4IKB*EeDk=)!j&w&yhp+IwUf6%> zLNy02EG)qC^0IV}zQzkp37?*xLSthiTwY%KnlJ_zE#a_yE{vsX1D@p73C%)!etsTS zR#qf)vlh#_y}ivmKR;W0!M|T9old)@dv$eX?LA19aA9F#@GcyS#jL`UzDj|*@Z8)S ztgfy~=VUdWV-B0h1o1EbsZ)FtgIyKYzurf5iH%-)>bed8<6sC$_;Oe&~@=KpPIOd93CFR@bEC1 zL3ejIR99D%bwLWmO$1A~rKJV%G+;`@Ij^Uuhaw40U(piA65QV2CMAb%i>`|c=X`8p z01plhU}R*3%mCMWxbDl>CIT>5x{r^KBn}l770}z;OVWg`vxtc#lS$aw*&*eIhX-Tn z78e(jbYbc&Vj}zd`!G5>O3tgjy&Z73CEpvXgkN7@UDu_4Jr4KxaG&ozG!{TC-QC?? z5{F#rW)JiyX~WprGr+yQJs2AsBj?oI-0Xh$`MtDXJm;5nykvVu00000NkvXXu0mjf DlXnSa literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_5b.png b/legacy/elementary/data/themes/flip_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9312a12836b65aec6f6eb6aad1d60b32fb70e2 GIT binary patch literal 1490 zcmbtU`#aMM9RAMCozRfm?64N`xDBH^TEhuRqTKCr+QT_WnY++(f!F{yNftbWZzJ2O z)%6)}%UeuQQ1$!N%e}#SQh(f+Gc^zh1WM)f{o;*{oS7M-wY4Js9YPIUr2B;24B6rwjq%a;^MBGc|I{G(COg@Fqj$y0?1=% z!>es=cJTG5JCC$2iiu9jm+TkR`jTcOl0*en)vL9&#(`mBXOo;Q6ZesDI9Nb3+qxhJ z0*i!#U2P<0>Le1W?#$$X@}c2^a9aGv1&f8-+iR7Tl>v>&)YMe3 ze3#j=F~2{~pD&-J>+9?DQxhOksnjPdteGjjK2;%;_C(Lz++5KZ+lM^te>yZY6vzjK zhll$%uC=xnb?1o+zdd_);v+Xuw!gpM8ig{kFAp4e3?hY1T$;Q|rD9W3I%~}mU<3>X zP*G7aU1}~_>bd59OD>PKmO1Y4dCoHe^ufF71)>bE&sgH(Gn#)y4j&cW(^};G{{77k~7Me5(G^ot~bCL$$RtJEE8S79TSh zjFFKMZm6k`yq!31`p($fw;>ObM_#@JO-)UWn%_hga=92&OG|3U;=woDO)(bNK+e?w zv8bTH{q@YwPDUUO=bx0pOx*0sEvGNP=eR^iTLipsahjD`NfPDcaxqNbbyzEyR5%giK{?sU#)zV_clEkKrrK2f->oCoBXv;nH zhZj!<pf~;-M$ zy-t3O*J6LEpwXfqWNi8!P*l(SEqu_sOSv&)Q~%F~oz-5vY_$>Y+V~MtR#S09%2M%eNdq2k-mXk6A@e^4G`bZ4 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_5t.png b/legacy/elementary/data/themes/flip_5t.png new file mode 100644 index 0000000000000000000000000000000000000000..df439296c17c5c79b2ae7517333edc2e4fce22fd GIT binary patch literal 824 zcmV-81IPS{P)8_u>ve6O{T2>~f9QV$`pe+`G@DPS(@7uG?F|6~C(&qB_xNQVe-5~3 z-uJ`dK)5Fa;_$3D;kBFBLsB0~fP1nYfW&J?!r@rRLP zBoYav{J*H(Znx0;V2D6`=9>we()TXNKG3_}y^@zOh)6&Jf&ySULj(Y1hyZw;&a!~V z=`0I~Okog_Ap!t0L;yU7hy^@71T>w6z6W$F34MJV^$ZbEks$&AGDHA8hKL0`-icU1 zWQc%>3=sg3Ap+nrL@eOF`<;lsf#q^31vXtQc23? zvQ(>8$>;Of0UxY33ouGxx7+FBv=5fN-VFux^r8G@9A2uAl=AW z&Xky1QdX>SSPqr&7_mDzNykVUy{TrRh3aP>`_Pk1&v#9B*sRm-G{@dpQ!O%_-G}{3^oA^`W(31G2H=b817K@L&x~AXO z*DLlup)~S?(NIy5NhA_eEr>ooi}NqDm z*85r1P+N=kr%)ocYGwXNOsxIQIdy)19fjHf1EcbCay8Fg z@L8P7zJ-N-qML;&_R&)z594mISggQ`$DXBQy}fCn^mrLP!gww8N3v6C z11wB#%_;*sJ`M=2jC&Ni*{h6as^0-=NROjwqL)YBbHlo0>GWy0&eqkHmHtr`nP&Qy zo#-AiFd$&=g&(AVg2;>G$V$F_(oPgU#hdVwsv3hyScduidZMIX-*=+PB$m! z1*IV2``TVWnUP(qlA8B00|QGwaK1dq#>S?eC+Dfzk2Al-^}pKHfZ4zQMI`44$nH9U z(gwXB)D)i$@=5^meFI4(qv^<|4hGnY-BM%!r1BJ%s(ezJW;kVIZ5`zpf$HOU6_wZ3 z4e`kV0eT=H@LtX~X6>hR3r{Hngl$%`*@SY0YgmE|`}E@KD#zH1m67&|E5w4sE8NiX z8ami3l6zHweSMc>PpC2462qYF;;*2~Mw%3E-h08`|2dEXRlma{ekX>4j* z?6|JjS#Ut5eK0xpV}GGzs9PW``}voK{uM=v4ct9L-e|G z!Vix=mPU*nD7DcTtZ6zyCSMePpM5wqIe7+RaNwz&VOGqE(&FN`y7P~Ys3t$-tX;|11%oU2{NZ6a^4>(O`O?yoiKAmcDev#2f7$kylUHY2 zN|u(+JYccxa#1a}rZLU5y9EWzKKfisHgOzGq$4Q~%RMmT+++f$11OI23SI6AE{>EAC_s#`+nbN~d}&vD d+78tJ37$uGMt1RxCwE>1;O^{6sKSR_`xp2r0nq>e literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_6t.png b/legacy/elementary/data/themes/flip_6t.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc4061fcee219b45f1912c207d53eeb8e0d07e7 GIT binary patch literal 1569 zcmV++2HyFJP)~BaIVPN+1a}CYo(QyRW1H&z#j$P-^#}y z2L}iEF1g)6KmkW~c6Qj~ALV2~Gn6M@L8O{U-pfDlN}Twmc2=lwB`c z;+lmbo)Vrmco$)hz|O*;h<0_U!4ilf7D{4~G;|UGI}4q zOd=crWfI|lcd064ASXl#Py*y6z^N{i2nRr!L^$BdBq9JFOvog{2~q;&1t`l|`U%P; zqMzM&O?eA*LX-d{Ku!W2>MRDzB*H;Z_5=Cg$&NHXKRFWNWhi4HCqdbb;Q%N{A{_8! zIZFUMnS}*Flu3jGqKttY@MH`W08hq10T5+BkQ1UzBAfuNIQ50AZ*FeV*w`2?E-upY z@-o{#eE2|Lzka1JU%s%<A2C^+O zGLk|=LrHleORb4(_p`ONH66f#fdOi5ZKXGF-q2k?iHV7jD zsJ6D2PESwoBL^;@j0zA5AuTP9=I7_RoV?G+UG+_P5@~O5r~LeUQl9KKCl0!N6<*FlpDrgS=eK}&NnBVAoSvSh?Ck6ZnQ3oo zoZ*Pxn`}_N} zva&+B8)jx^*tWiomuwhM49Yn4oad2$B#o@BEa4sk5L$I+W+wUh`RTTg>P~-uKlSwV z(7Si<{pzZB#-6wce5!I92+*~RyE+$u3S7CNx2n}U$aFE*C z+I}ixm<(W1Q4uvXGzdFM)bkn}8!0+ETA0o2456<0`t@sSYHA{M`t=A`3tU}YWig58 z_W#jo)a*JsI#@B(Tm%4hCy|<(8e#Cfy}hZkvy3?E8nn2*JB4O|FRX3!DG5{~fja0(6%W>uQI5={Ux zw<|(|f`WcAv$3&3FJ8PLRCiE@x=8>L+sBU|f9Vk*uExj5Q*v@LAxt z5tSUo!Dr8&83o+c<74$%b#*nx#>TRxb0S4Gz_qnCVaLU71&DVo7=9)tB~e{nov=fz z28arbC^6-nF+xR2NeK%dYGVIw=d5}pf-L!v1mOb^c|_Al1pTmwCeNQgClrQxMD;C< z38aT8$j+Fx(<`b0KGaEb+=f_Dv9q(Ii=k?Ord)`w>&!GLAv~3rmut}YZ`XeTzLtU| T`*M`o00000NkvXXu0mjfk5$>U literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_7b.png b/legacy/elementary/data/themes/flip_7b.png new file mode 100644 index 0000000000000000000000000000000000000000..9afc419821ea62281fe80f94eb40e7c19998ae9b GIT binary patch literal 1110 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 N0Nl;TmF0Yn^dDJ`AyfbW literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_8t.png b/legacy/elementary/data/themes/flip_8t.png new file mode 100644 index 0000000000000000000000000000000000000000..718e484ec3f60b16f320d9d289ebeba0619f1e48 GIT binary patch literal 1719 zcmV;o21xmdP)B3I!88r=p%Q!$H7l}5m0m(o zND-eSy!3R$mwXeX@GfGZq7RCuc0q+OZ>SuPX5_WZQpxlEhyBSprwe;7yEJCO*WTEy znKi#Xv)0U-@B1udm94F9Q2H$ z){!{lV8|aD9v?ib+as`Zuo%Lxt~FQyF~q?LESiQO0kCrr)YWQM0ve#?P|yH1KuH3U z>N0MtQ50-mX=eV`;n4NwD=Bp|7-gNOt`9YiGH=^&y29;(nmL=vP1C<{=hv&0GN zAR^9gM^jH>Nr)Pt1}I5DLY?_Q9YiDu>UE$TJiU;X=cjifvJABklq9H^F%kgvPDBEp zPG>2Ar=zd}h&qT!K-4}^0-pAP3gBrUr~sl~2TDTJK|~Uulcc_o`oh8j4Gj&^`1m+Y zPfxS!-Me?RxVT75OG||3RW>#@*o8>9Z{I$4;rWb1hYr!+9Q}KYtdj!zR5qZ{AQxM+ddHw^LtVAI;3n*rdl>=;+a- z6d4&w7cX925hVcE z*4F6y_3PB#-7RCwPuGo#ilVBjDsp#s7j7E>r54igcUP}o-E;6j?CH~|bmhtwGF+H2 zKqyK9ymRLcGi0yIvuDpJJ3Cv-eBqr4mME2#l~RrG24zfRTq432(uNP)MiAf;4Eyl# zaGIT+7&?gZQ8i5#n*vI}(g8lT1 z7caQFgb~P{OnCL`mEGVWF_4;?O6Sj?r;{g7lBcI98E+9`35KbuDeCR*Wn077uU~U@ z)Rw{%6BC5KojG&Hmf|~QoOt)BND8Qy0|yRJQBe`yym=Fk(SKDvd=xH#MbxaXuVwXqc74o z?kS8z9aSQeN-}Lg6jvoUtl|}Jfd2mK-j27ry2@+sSLIdIVOAD2M5{hB0Pe`2X_!b13o@JbocIEp0>VQ z78w;J1(2q)B{PIFwY9ZOM^!fF-o1O=@XQWb3?uMzS|J$Mu3e+Hwl*Q%Zz%-@1?}Vm zku1Q%7QZqwE|Zg!EFbvr;X@i38Bx|I4%tzsh~V9oQUKq-f6wka>F@6sY5$k&ARrjv9ZxsRVC$OV`B*^e;gaw3m)sI>M4v$hlhu$w6v537c6yt zr66C3bC=A_Ozz!|Ep{sfh=b{pk`gv$cbi}oCMG6QUS1xBgoG$F?;o3sibz_!9hk1m%Y9w1;GtXgOAt^-in9SpJ z3zf{Pd94WZm?RXrYEfM_Q?r`#SIJWx`cp&8M>F~tH#>Npo-*GJc0Z|u)s#~ar z(C1DW8C5)edb|EawK9KZ#w~RaEFT*h7DjvUK&}3Dp+Cc0**OqGFN-3RZLnCVGqtmW zb?@F$Plhj$&0tj2)=J&Id$$gKCnQ+-K;z5%7a0|g9%T(|+U4iw z$`Oe~SK;W&lQa;kp+TL)<;o5q%%jQV4_jNxI2>+XBtjsO$a$dWK3zz7_*tDFf2~8xE$p*&8wq_wu{uvk; za7s8VO9~1Ci&uCD^2^7=)s?+u*CMAdY*9K>T2^K#yHnLaIjO|s@$T$sn}E#F=oGe1 zcxq~@(>K?L{V-oVKJCYkC`xQ>Aad)u{Bjwe&!1mf>Rob-fK#HPz}3~&*7K?@8yk@! zl*}P^PmfLi>(^e~HQ8yNN~PiSq;x}XPtS<1 z#XB^+z7vCf`E*U04TB{lx$*RVqk8Lf+1hko&j2Z4u`p)e9ev-HNU%J#hbk z1?JnWD@0;SNeMi=XRO`P6pcoZF3T>*%!H#Opo=df;^WWt_VtBj@jG`7nlL1$v6-1; z$j>dFgxmuk@s|aLRdtvp*bX$rf66~^9q1k-;fG$KQ_@_@09Dl zC3Ut=F}wh9z!aX=DlQpo*3Ru6_9bjaROYsh&5D zUtt}ahSytUn%1|1O{H?yU>?_o_9{i2+cr4A7#;6jGOe|8b#dFS{y242Ln6oO#Hk>= z@@{db$}KKd`X!ei3I6%qalJg9k$1$Xhq5QZ5288*EP)4t548{ zy3nNy3knv3pa^1CBA>nDLczoWVu%tG#6m1suwd`soWU1R%=4D>@^t7gTN8+l5 zX6_0eAH2I^50IUOK{I}L<)J4K%`CLUqG$*bKz0^_zRK;6fC4CaC@6pmpd~B_S$+3ZNtb33q)AR7pgFpsEAq;Hg4do}aoBk!7gHKuLnCjFAASu0$l@sp%{N zcq$7MKvYRY0-_oNCE%$skN}<<0|_9iI#3d#N+OZ~tt9=0+;?|(VPyuH1_%gYO1zkUsG-n;=jJ3FENshlti z8%|G8Z_m%qsWcze!HzzC`UC?51JK{!4?lkVknYdg+8Tm_f*>j?3Q|*3!QI_mT9a46 z#>U3H0C#qFprxe+nwpwmWo3moKIZoLpg~wz7-VN>LwtNZv!853vjN0YvAVh%K79D_ z>vWV2meoHXAOMPris0?rx2!J0?R0?JcyoJkaUm@7(6P0(74q}*VQ+7bOjATCAt3>( zs;a=**;&M$$>+t37jys-SWZq3baizxb^a$BxwyDMU0oeSM@O5bI|N8l2QDluKtx2u zUj+||;TW8ro(}c(^=1KxqS64Trl$1q2FsDZ(Xaw2C@6s9;$pLeCk61!moJc#k^=kt z`(_D_QnaR~21-gwC?$0*;VTg=OOlh5_2T!rSb2FlG&VMpg{v3R$H&LFmzS4ZqF8w2 zz>HTC&&{xA?C$P{kdP4R(6N{oI)$;$dXDgr7#=n6-@hjtcDMmfPftTbLxc3*`#%Nn z+B+{Vk0b=HQyBMNcz8JZ(dXvo23Yvwuz-^VFJHdYH*R}-8Th}%;>*;`$h&21E{E|;D(2OadC0FFO^|^C}Ye3+uGV>`nl&D92~44MWTkj zI2TA^-@ku{;o)InDQ1A}?d`&yJajB9EW|fn2%d{4Hc)G~I4 ztHgMW=@fqT>J^Ws$+jW`_3s2{XJ^UcG74>NZEqBgSt z3=9k;ixUGJ9UYa{Lk-@IW$BbxlPQVd1SqAImX=D(QD{6C1kXYN<|Km4YjN(4%CO@9 z`0=B#9Quxrj|=;oa^zjD%QOaJhlz=aqygidxS^pTZq32LLH#bCxr}$MBs0LYv^1${ z_=g*efo5iA0A-Yc!_LA2h=IEj+7h{{xZ7ftlQL70(Y)*K0-AbW|YuPgfvP9b&$sTBfDw}3*DC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;tUMTa-J@ZAr-gY-thNUN|a&$u>SGEfS3BL zyVXAnXzkv|tEy64q0R?i zzJyq$WoL6+TU+OUd;9)<_}b9bp$ra7gBs62cU~Lzd%2yxJ-=&U+}ef9m$PruNlr*u z@K$b-$J(}Y)>i#|Y zS|yiRjEnWoojV-ae#?aqCIm!qvoIA{$Q+8=8FTFBP02H-jvZ_J&@7&7ba8JitBr+4 zz}i+P#T#$S63^ysR~F%toE4s5V<*3C*|K|k@~f((;?`fEGH+VhxdT~SyEbk#w6V88 z{N_fESxkI<_B_X`bIT`B7S_?%&;Dj(W8KGAQv@9gvM zzaM^DwDMZ4o_Jb%y66t? zFF$|c`R5<^yBh6UtEQ%AU}Ljp_00kk5I^wycXi6<$g7RT#l>w>S-q#z zHm?ZLn$K)7)obC!jEsN34WvIjeagBrtb$HZ*c zZ=S&yr)I#SqQJ;`LSRAzkm2mWBs8Ichmq3*#83oEcsR6yBp4+@5-cekq)3$Utk5{c zEZO54IE8&>h}PW6ha$X|UfTKf<;$1f4;?zhU-aVqw{PG48GcOjQ27?svra{*)0W{r z;{)!7j|CQcqIATHmjs@F{P^*DU;uNsA70IHjIrh~^S(I0Z|s+r>;Yyc22WQ%mvv4F FO#q#UmID9) literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_amt.png b/legacy/elementary/data/themes/flip_amt.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6a7154c143b96d5191c3f361cf5c5e0374710d GIT binary patch literal 1075 zcmV-31kC%1P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS` z2OcM}y;ZgV000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000AyNklf(1$G3k_$s}8|J zOEE%-f{;QGA>u^XxrP*@W-`XanOp5;_s+!poejI3)8%=e%!D7$dC&U>07L*DRaL(f z3Wcv0RaT~HnuS8)tE#GB0C)h10)Vckr>DQWy1HgxUtduwl|Yr3BuVgiJkWLhxUaA8 zvv7BJ_s8(?@L#!Hj&y2JcXv0^>GYq1VHp3szrTOt&5MhYW!URZw6hnj|LJJchMSu(u zh6pW85g-BnLVF-XgcC@B1jvIl#R=q1gcC@B6hnl2AT3OQ6ag|sIDt%IiW5kH3=!^u z6fI1E1jrDf7$USV0TLj^5MhYW!URYWAVY*9LJLy_NPrBH-y%e$MjsN7$1yuQTe0u> z_!!gE({;V0zrVj?kKgad_V#v7&s|+zMI;ib*r#cldluf^-L0x`Z*R}lX^>?ZnM|hY z{>R5h$gRt^q6-iwK26Rrd#jK@^L{)&h)1qtJD|s@_~KhiEkF z>J)}TA-ui4RqQJi3N^uYEktUyrQ0^nWHMDb;^5!_*=)A8Ht-iFh^m9YxqqCpi?*{-ZFE2NIcC1EgYiqVzsZ>HR7_`-Qc6MNzW>wFq z)`^0qX*Cgid3k})=YwGwW%nSj*9%2aFg`x+*wfkBiQC&-^z`&Jd=t?$4Kp({NF)+J z)CUFzaD9D^j*bohKt7+x*w~ouRxvd-g_Dz$itlKeg%1x8%fg$On1I*o1pthUj9_wd z(y`AljHcWIzG;1Z-B!zHv)JF?|L=1o5^)4k@ATCT@FV;E-?rcE?6!^P=H@UsIB2VX ze>ZjtkD;L<%+JsNJbB{klO$N002ovPDHLkV1kV6=qvyL literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_base.png b/legacy/elementary/data/themes/flip_base.png new file mode 100644 index 0000000000000000000000000000000000000000..607fba927270a70be28b5149dc568fe59ddc4eb9 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^0YJQfgAGW|ZhpN5NHG=%xjQkeJ16rJ$YD$Jc6VX; z4}uH!E}sk(;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^H#h~^<#bGLDPI5zNtU=qlsM<- z=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`(ej+UV)x7*cWT?R7&xX-A2+hxx~XcN7@f zdVK5*C=v*ICJ-XHlR0<74uOs(g-;J16;swfJ56xXbTyCj)h+Iy-=|O4={3xo{O3lF z+4YO|v!7Sm%|Bm1`OemBb*i3`AL`V9TKNValUQbOVqqq6rll~*SBT!~trrMdJ$M7ZYCE0yy+*Tg>!;gRQ7 zaA=q>eW61_P@P9$K~INZ;UNZAFjuF6!TzH8g^r3w2F72Cy80LF1@%EH@)roRX*9SU z;ofrS6BDD9;C%K(3erP+7+bPG%Mmca8y&>*96< z$kk|IU}O?;0Fqol>ls)DfFu(KkYr@x5Lm###KI8(Q~+c%5>$g>)Pw&F6$du#a`ydn zAhDGHX@yOl=chACp}%ic*LxNne)K4>>b<_HXVrUu&u^Y}MV0?&ZFVdQ&MBb@06tIBWdHyG literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_base_shad.png b/legacy/elementary/data/themes/flip_base_shad.png new file mode 100644 index 0000000000000000000000000000000000000000..056997776a4b3f1d7bdf20f688063576aa88856e GIT binary patch literal 826 zcmeAS@N?(olHy`uVBq!ia0vp^5kS0xgAGWguxsi9DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#2B#pqy!f0`zqbN~BuiW)N}Tg^ zb5rw57@Uhz6H8K46v{J8G8EiBeFMT9`NSC*n5KHVIEGZ*dVBp~-mL%uhl|Uq3VPOfZc5I-Oi!Qh=BH-GMooef@AC|nq%x~DDvU*V#v-n1_YmL>? zH-ZcA#|n3|d>0X}$z(R?->MH3Kba-4eZS4eNM`>7YGp;7S1OPHi#-~(L$KW7lkbeR zNsGF_oc_i)Z>N}D>zx~>=U3~n=G_zc^u=5H?{eLI{3>sO@ z8d=3|u!uz@2!m0hZvtElCJYio5=K{wYyz56WD`I(Au9#ihiodcQZg;u)%e=NY~L>a z9gb@saoFtBvYaa%!<_y=|mMKD7%3@&PA?uH+vo9@eM2qlYH_y zWg2)t@XlbAH29kML-Czh1;=jZh-;b!#s`n@D3sfwf57OS@Xuea3ufNo{b2m2@1=hI zrH#$oKmKH~VO*Uu%Q&|_Iy7+$vs~lv4b`9jWHqN6t_)5PylmZn{!!fec5k0IitC<# zi;nnq?sp-dNMQ{B-xH~GR=r;OVDZW`Z1=wJ|G)9Y-}@i9u4*?+ZmfEL6PSt_JYD@< J);T3K0RUR;Mh^f0 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/flip_pmb.png b/legacy/elementary/data/themes/flip_pmb.png new file mode 100644 index 0000000000000000000000000000000000000000..de14fa5ee5abfb3d35e82a57c00a056e7fc96259 GIT binary patch literal 709 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfvP9b(hwxwM8SAas2C9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;tUK-3Z5>GAr-gYUbD@96~J)pC z;et%NB;K*M`|(+ITCuoj?3=K0-fcvQVdttyf7b z|FibrehnKVc;@;&PuO!e&w0`khi`j6y>_n4cZ13@Nrwn?k8TKPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS` z2Ou(?rK%tR000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000AbNklBRv( zNF+@N2azBQ(#V)lCasyhZFYCs>5sAK=KD z(sfE&{{;C8$5`1trk6vfZN>FMd0 zhK7c34-XHdlY`33%W-~w{#AH-db)mjdHKZ7%e@nwPUnrF>$8!!Y0=274kv0wln~21pa3iExAokN_!~2u*||On?*t(nM$?9ASz8 z39x|9K$-|UkN^pg7io$e$d?E^kN_!~2+u%{Fac5oNE2ZP(uFB@AOX@ucm`4&VFDyT zng~S`;Rq8T0a7#(ng~aj04V~biO@ti!W01#AWh`IFcDX_$yHTVId4!=Q2|jDQCnLJ zpU;Pmjt=zn^q{1q2ojg6MM8yg$8_uJp!$KKvv+Vw~zf@m~aco*r? z(o#%LPFm({Z*S*ZH`RGJJ3E^;Kh;{MGxNi|L^?Y=E!VHFuXCt*@^`mSt1? z;^G3Eo13Qi;NW0kyhN(2t8HIc|JLZ}s413ACJ_th5lUVD2xT3cHSV}y5hb}ZLxYHISTJ2p0Eip63v ztgNj3`YcIO$_}^NeQyRZ9*<*sdfGC_@Av0bySKL&Ua!{_|NU*8$~@}o>d@EM_pt%0 zs)}$pjPCAk93355=JxmZ=e38+q@K00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS_ z1|$;E(26wx000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0008JZzzYeSPZvl2>hj02;Yy~Rog;0d&9>j^9oX6v_xy1Y2^+>E!TGR5qsdHC&{@lGv^Oy5MnxI@r0#TZ$nY-m22=}T6krJj4 zysixbU1?+>0i=Yd*9V20vb6A?hk~!t$XNo> zBHbDgQ3;~(9ga zGJfw2bjHswN?S^JhcqTvH);xS?JE?ubE#?I3{0x-Hn&tF+6VqA5OISbIsh{h=?x`Z zYTrwH2PMXpu9v<$$2RT0K`334HsHi_=eQE-gvDCq3+R2V7Q`Bf*7N{NQ5Zdd1AviI zHroW?Kp)r^M9wM^0$Bkd6X_iiX_}z~3=*CRq&+yrG0? z8%da^tVGz2sRxm1ObdAMEqw>zgs-mjfbZ5mEf3!4F~P5X3xqrwFGJ(a)Lzz&8N@e8>*39l=`~F7F( z_mAz5-WT5c?uC%Dd;oay7#)I2hgD>Gix~Oev#`Ho7RJ&&czoVHJ~LLp1i20#xPc5j sW8j#|m%B{K(no;O2c9<&7+klsPtxW(p{{dE$^ZZW07*qoM6N<$f+{zVod5s; literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/frame_1.png b/legacy/elementary/data/themes/frame_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5645e5be283efc58746c02f9f4db106e6c3bf0 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^Y(SjE0V0c6E@A;vjKx9jP7LeL$-D%~CV9KNF#HF> z1$&oI28wVNctjR6FmMZlFeAgPITAoY_7YEDSN0p6Oe}(i6V{2o0}4r&xJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu1Fhonba4#vIDU4TV_u5^kL!HrBdffRtaE>m zV(WkYaA=yL&?A=3op1AIa2aw6X)HagHfjH#{rlg#bnLdCsn2A0{f=srn(_7m6KjUH;H}u6xJYm0gc^>6Yss_IkQ(P4R)vAxe{+mhI-t5D|=J?b2O% zrHq+FafyV}iC-Mj&!;^5$lc;PM{eSE>y;(hBAznXNNd!3WC z@lJ`O@Y;C?PpADW+kWlU*1u1<%WG=?{g`NJS-d;p_G_KPA5T~Ad8>86{oV1`>;??% VQ9s!CJ^}_EgQu&X%Q~loCIGkFun7PF literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/frame_2.png b/legacy/elementary/data/themes/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0fef1e9a9b7eae8d8c4bfe166caabc6eb173dced GIT binary patch literal 676 zcmV;V0$crwP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS$ z1Qr_vR7(E<000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}00061NklB&SeV0Pq5E3o8G!0nflo1H``hJzdw#Af%WQ zz}tofuZBek35f&}*&fjdt)UP|@r~27A?23y^8lgQdoBYthE%@Jt<1uw$au0JudR>~;aOP4_Sm96w{-B6>@?SqI%t+$@D*7lv0O#?GxFcT3@q ziO47e9bL}cRfER@&_ja*;2#DU-c%0}4}b&U5dq{b4F2ARA`j)lS(hucZv3ae3(~$K}bE-@?zYpL8kWP_~&{xg)IiZ zwis9uYxL(9gWQy!9K|=3f)$)t(Dwo~88Bj_H-!_3h)67Qs<|K@23CW~se!a?jC*bD zb>YHBZegP)4YVQLMVllRlV=Bm+4h^FS)vQy#~xb%pO}*XG0H~1k4K(UOlEIb(lUNe z@sXKGVPQV7u}3GFVLqUlF}>y5W*JJWxNM(mnL=~9R(dCAE_?x~RL1#H=9&Kh0000< KMNUMnLSTXv(h@)b literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/sb_runnerh.png b/legacy/elementary/data/themes/sb_runnerh.png new file mode 100644 index 0000000000000000000000000000000000000000..a483ce8b1d6e625abe0db3c7c12f7714881c4eaf GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~n!3HE}ZR`&LQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4Gtj=CYHk!#YKQZ3Z5>GAsp9} y6BY;<7#SFx2ww1CQJI;U`SAb${~w<;Wn>WWXNkY@LufrvErX}4pUXO@geCxL7%B$< literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/themes/sb_runnerv.png b/legacy/elementary/data/themes/sb_runnerv.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2da6fc3a866b7d011c07db827d432dfef3e6e4 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!_!3HERXC3VVQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf4Gtj=Mmf=Yd)ESm)I41rLpZJ{ zCp0irvH^jc#Pk3E|MU6qcqCjX{s&}EXl!g`WLPcBUcNv>s0^rs!PC{xWt~$(69D=U BEPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RT2@nT01-PUkumAu68FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0=!8?K~!ko?V4L|#2^esiNyYQIBTIF zks`*}*Vo|CCMq8lAi_|NA7FEQKA)nM<2aa3rpM~!$Dd8{x365K?-9em&$ZV2N^7mJ zsLgSt_&ZL%(gT`SU7hyotN_V0=_q^m6H!sAUjx8b>d&>-&gNMWO|f5UkJw+);|@@J z#;vgCyp|*uj7yzX%56em@l%njO0TjP^Y_$y_A2bqc8>#?9z03k?3aY4=L@{02Z_c% zBswH`6*EKKGW7!FxU&G25Sm_?L|up)Zv(_9s$9l2e$o5h=jItxZ|S|LV>b_MJ7~HE zkB`n4TAnH&x~We$=1~bq@$ukTN1FOYQBXfr{YBLHhp031TEULoggG<=u=CijM^E(v z7|DL3FpRNnx0<2Vz5zT*oiz0!<+D`W^1;@< z#=&3?sXI3H!s_nP#Xkyu{V>S0XAXBEj}DgIM`IFC@BiRuX23BxfFBFN_|vMJA4TC! zN7Kf=zt$%5*Jv~K0qHgkMHAGQt4Se*72UKOcYh!f%fAlubZMRL>eZVo-Z&VRI?6W z8yrLkHgDwJgP!a4qc3VwoW+FA=(nQ&7R3}d&yaQ(!#{r`ul3Ov6J#ncS4!%{! + +/* This is a test app (that is also functional) to test the api and serve + * as an example + */ + +static void +on_win_resize(void *data, Elm_Win *win, Elm_Cb_Type type, void *info) +{ + /* window is resized */ + printf("resize to: %ix%i\n", win->w, win->h); +} + +static void +on_win_del_req(void *data, Elm_Win *win, Elm_Cb_Type type, void *info) +{ + /* because autodel is on - after this callback the window will be deleted */ + /* but to be explicit - exit the app when window is closed */ + elm_exit(); +} + +static void +win_bg_simple(void) +{ + Elm_Win *win; + Elm_Bg *bg; + + win = elm_win_new(); /* create a window */ + win->name_set(win, "win_simple"); /* set the window name - used by window + * manager. make it uniqie for windows + * with in this application */ + win->title_set(win, "Simple Window with default Bg"); /* set the title */ + win->autodel = 0; /* dont auto delete the window if someone closes it. + * this means the del+req handler has to delete it. by + * default it is on */ + /* add a callback that is called when the user tries to close the window */ + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + /* add a callback that gets called when the window is resized */ + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + /* our window needs a baground, so ask for one - it will be set with a + * default bg */ + bg = elm_bg_new(win); + bg->show(bg); /* show the bg */ + + win->size_req(win, NULL, 240, 320); /* request that the window is 240x240 + * no min/max size enforced */ + win->show(win); /* show the window */ +} + +static void +win_bg_image(void) +{ + Elm_Win *win; + Elm_Bg *bg; + char buf[PATH_MAX]; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with and image Bg"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + /* this is a test - shows how to have your own custom wallpaper in + * your app - don't use this unless you have a very good reason! there + * is a default and all apps look nicer sharing the default, but if + * you insist... */ + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); + bg->file_set(bg, buf, NULL); /* set the bg - the NULL is for special + * files that contain multiple images + * inside 1 file. not normally used but + * might be if you have archive files with + * multiple images in them */ + bg->show(bg); + + win->size_req(win, NULL, 240, 240); + win->show(win); +} + +static void +win_scrollable_label(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Scroller *scroller; + Elm_Label *label; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with scroller and label inside"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->show(bg); + + scroller = elm_scroller_new(win); + + label = elm_label_new(win); + label->text_set(label, + "Hello world
" + "
" + "I am a label. I come here to temonstrate how to put
" + "text into a label, with newlines, even markup to test
" + "things like bold text where markup can be custom
" + "and extensible, defined by the theme's textbloxk style
" + "for the label.
" + "
" + "Note that the markup is html-like and things like newline
" + "chars and tab chars like stdout text are not valid text
" + "markup mechanisms. Use markup tags instead.
" + "
" + "Now we shall borrow some text from another test program
" + "(Expedite) to put some more tests in here
" + "
" + "Styled " + "text " + "should " + "go here " + "as it is " + "within " + "right tags " + "to make it align to the " + "right hand " + "side of " + "the textblock." + "
" + "now we need " + "to test some CO" + "LO" + "R Bla Rai" + " Stuff." + "
" + "Round about the cauldron go; " + "In the poison'd entrails throw.
" + "Toad, that under cold stone " + "Days and nights has thirty-one
" + "Swelter'd venom sleeping got, " + "Boil thou first i' the charmed pot.
" + "Double, double toil and trouble; " + "Fire burn, and cauldron bubble.
" + "Fillet of a fenny snake, " + "In the cauldron boil and bake;
" + "Eye of newt and toe of frog, " + "Wool of bat and tongue of dog,
" + "Adder's fork and blind-worm's sting, " + "Lizard's leg and owlet's wing,
" + "For a charm of powerful trouble, " + "Like a hell-broth boil and bubble.
" + "Double, double toil and trouble; " + "Fire burn and cauldron bubble.
" + "Scale of dragon, tooth of wolf, " + "Witches' mummy, maw and gulf
" + "Of the ravin'd salt-sea shark, " + "Root of hemlock digg'd i' the dark,
" + "Liver of blaspheming Jew, " + "Gall of goat, and slips of yew
" + "Silver'd in the moon's eclipse, " + "Nose of Turk and Tartar's lips,
" + "Finger of birth-strangled babe " + "Ditch-deliver'd by a drab,
" + "Make the gruel thick and slab: " + "Add thereto a tiger's chaudron,
" + "For the ingredients of our cauldron. " + "Double, double toil and trouble;
" + "Fire burn and cauldron bubble. " + "Cool it with a baboon's blood,
" + "Then the charm is firm and good.
" + "
" + "Heizölrückstoßabdämpfung fløde pingüino kilómetros cœur déçu l'âme
" + "plutôt naïve Louÿs rêva crapaüter Íosa Úrmhac Óighe pór Éava Ádhaim
" + ); + scroller->child_add(scroller, label); + label->show(label); + scroller->show(scroller); + + win->size_req(win, NULL, 240, 480); + win->show(win); +} + +static void +win_label_determines_min_size(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Label *label; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with label setting minimum size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 0; /* allows the window to grow in the y axis because */ + bg->expand_y = 1; /* its only child can expand in y */ + bg->show(bg); + + label = elm_label_new(win); + label->text_set(label, + "Hello world
" + "
" + "I am a label. I come here to temonstrate how to put
" + "text into a label, with newlines, even markup to test
" + "things like bold text where markup can be custom
" + "and extensible, defined by the theme's textbloxk style
" + "for the label.
" + "
" + "Note that the markup is html-like and things like newline
" + "chars and tab chars like stdout text are not valid text
" + "markup mechanisms. Use markup tags instead.
" + ); + label->show(label); + label->expand_x = 0; /* allows the window to grow in the y axis because */ + label->expand_y = 1; /* its only child can expand in y */ + /* why do i change expand on both bg and label? both are children of the + * window widget and thus both affect the window sizing. if any expands + * in an axis then window expanding is allowed always */ + elm_widget_sizing_update(label); /* make sure that the lable knows about its + * sizing changes like expand above */ + win->show(win); +} + +static void +win_box_vert_of_labels(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Box *box; + Elm_Label *label; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with box + labels setting minimum size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 1; + bg->expand_y = 1; + bg->show(bg); + + box = elm_box_new(win); + box->expand_x = 1; + box->expand_y = 1; + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 0/0, Align: 0.5 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 0.5; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 0; + label->fill_y = 0; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 1/1, Fill X/Y 0/0, Align: 0.5 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 0.5; + label->expand_x = 1; + label->expand_y = 1; + label->fill_x = 0; + label->fill_y = 0; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 1/1, Fill X/Y 1/1, Align: 0.5 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 0.5; + label->expand_x = 1; + label->expand_y = 1; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 0.5; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.0 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.0; + label->align_y = 0.5; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 1.0 0.5"); + box->pack_end(box, label); + label->show(label); + label->align_x = 1.0; + label->align_y = 0.5; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 0.0"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 0.0; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 1.0"); + box->pack_end(box, label); + label->show(label); + label->align_x = 0.5; + label->align_y = 1.0; + label->expand_x = 0; + label->expand_y = 0; + label->fill_x = 1; + label->fill_y = 1; + elm_widget_sizing_update(label); + + elm_widget_sizing_update(box); + box->show(box); + + win->show(win); +} + +static void +win_scrollable_box_vert_of_labels(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Scroller *scroller; + Elm_Box *box; + Elm_Label *label; + int i; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with scroller and box + labels inside"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 1; + bg->expand_y = 1; + bg->show(bg); + + scroller = elm_scroller_new(win); + + box = elm_box_new(win); + box->expand_x = 1; + box->expand_y = 1; + + for (i = 0; i < 40; i++) + { + char buf[200]; + + snprintf(buf, sizeof(buf), "This is a Label in a box, #%i", i); + label = elm_label_new(win); + label->text_set(label, buf); + box->pack_end(box, label); + label->show(label); + label->expand_x = 0; + label->expand_y = 0; + elm_widget_sizing_update(label); + label->show(label); + } + + scroller->child_add(scroller, box); + + elm_widget_sizing_update(box); + box->show(box); + + scroller->show(scroller); + + win->size_req(win, NULL, 240, 240); + win->show(win); +} + +static void +win_table_of_labels(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Table *table; + Elm_Label *label; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with table + labels setting minimum size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 1; + bg->expand_y = 1; + bg->show(bg); + + table = elm_table_new(win); + table->expand_x = 1; + table->expand_y = 1; + + label = elm_label_new(win); + label->text_set(label, "X"); + table->pack(table, label, 0, 0, 1, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Y"); + table->pack(table, label, 1, 0, 1, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "Z"); + table->pack(table, label, 2, 0, 1, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "A"); + table->pack(table, label, 0, 1, 1, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "BB"); + table->pack(table, label, 1, 1, 2, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + label = elm_label_new(win); + label->text_set(label, "CCC"); + table->pack(table, label, 0, 2, 3, 1); + label->fill_x = 0; + label->fill_y = 0; + label->show(label); + elm_widget_sizing_update(label); + + elm_widget_sizing_update(table); + table->show(table); + + win->show(win); +} + +static void +on_button_activate(void *data, Elm_Button *bt, Elm_Cb_Type type, void *info) +{ + printf("Button %p activate\n", bt); +} + +static void +win_table_of_buttons(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Icon *icon; + Elm_Table *table; + Elm_Button *button; + char buf[PATH_MAX]; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with table + buttons setting minimum size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 1; + bg->expand_y = 1; + bg->show(bg); + + table = elm_table_new(win); + table->expand_x = 1; + table->expand_y = 1; + + button = elm_button_new(win); + button->text_set(button, "Button 1"); + table->pack(table, button, 0, 0, 1, 1); + button->fill_x = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 2"); + table->pack(table, button, 1, 0, 1, 1); + button->fill_x = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 3"); + table->pack(table, button, 2, 0, 1, 1); + button->fill_x = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 4"); + table->pack(table, button, 0, 1, 1, 1); + button->fill_x = 1; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + icon->scale_up = 0; + icon->layout_update(icon); + button->child_add(button, icon); + table->pack(table, button, 1, 1, 2, 1); + button->fill_x = 1; + button->fill_y = 1; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 6"); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + button->child_add(button, icon); + table->pack(table, button, 0, 2, 3, 1); + button->fill_x = 1; + button->fill_y = 1; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + elm_widget_sizing_update(table); + table->show(table); + + win->show(win); +} + +static void +on_toggle_changed(void *data, Elm_Toggle *tg, Elm_Cb_Type type, void *info) +{ + printf("toggle: %i\n", tg->state); +} + +static void +win_box_vert_of_toggles(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Box *box; + Elm_Toggle *toggle; + Elm_Icon *icon; + char buf[PATH_MAX]; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with box + toggles setting min size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 0; + bg->expand_y = 0; + bg->show(bg); + + box = elm_box_new(win); + box->expand_x = 0; + box->expand_y = 0; + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Label ON/OFF"); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Icon + Label ON/OFF"); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + toggle->child_add(toggle, icon); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, NULL); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + toggle->child_add(toggle, icon); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Label Yes/No"); + toggle->states_text_set(toggle, "Yes", "No"); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + elm_widget_sizing_update(box); + box->show(box); + + win->show(win); +} + +static void +win_scrollable_box_vert_of_toggles_and_buttons(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Box *box; + Elm_Scroller *scroller; + Elm_Toggle *toggle; + Elm_Icon *icon; + Elm_Button *button; + Elm_Label *label; + char buf[PATH_MAX]; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with scroller + box + toggles + buttons"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + bg->expand_x = 1; + bg->expand_y = 1; + bg->show(bg); + + scroller = elm_scroller_new(win); + + box = elm_box_new(win); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Label ON/OFF"); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Icon + Label ON/OFF"); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + toggle->child_add(toggle, icon); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, NULL); + icon = elm_icon_new(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + icon->file_set(icon, buf, NULL); + toggle->child_add(toggle, icon); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Label Yes/No"); + toggle->states_text_set(toggle, "Yes", "No"); + toggle->state = 1; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Toggle "); + toggle->states_text_set(toggle, "Up", "Down"); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Toggle "); + toggle->states_text_set(toggle, "In", "Out"); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Toggle "); + toggle->states_text_set(toggle, "Up", "Down"); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + label = elm_label_new(win); + label->text_set(label, + "Hello world
" + "
" + "I am a label. I come here to temonstrate how to put
" + "text into a label, with newlines, even markup to test
" + "things like bold text where markup can be custom
" + "and extensible, defined by the theme's textbloxk style
" + "for the label.
" + "
" + "Note that the markup is html-like and things like newline
" + "chars and tab chars like stdout text are not valid text
" + "markup mechanisms. Use markup tags instead.
" + ); + box->pack_end(box, label); + label->expand_y = 0; + label->fill_y = 0; + elm_widget_sizing_update(label); + label->show(label); + + button = elm_button_new(win); + button->text_set(button, "Button 1"); + box->pack_end(box, button); + button->expand_y = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 2"); + box->pack_end(box, button); + button->expand_y = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + button = elm_button_new(win); + button->text_set(button, "Button 3"); + box->pack_end(box, button); + button->expand_y = 0; + button->fill_y = 0; + button->show(button); + elm_widget_sizing_update(button); + button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + + scroller->child_add(scroller, box); + + elm_widget_sizing_update(box); + box->show(box); + + scroller->show(scroller); + + win->size_req(win, NULL, 400, 320); + + win->show(win); +} + +static void +on_clock_changed(void *data, Elm_Clock *cloc, Elm_Cb_Type type, void *info) +{ + printf("clock: %i:%i:%i\n", cloc->hrs, cloc->min, cloc->sec); +} + +static void +win_box_vert_of_clock_and_toggles(void) +{ + Elm_Win *win; + Elm_Bg *bg; + Elm_Box *box; + Elm_Toggle *toggle; + Elm_Clock *cloc; + Elm_Pad *pad; + Elm_Frame *frame; + char buf[PATH_MAX]; + + win = elm_win_new(); + win->name_set(win, "win_bg"); + win->title_set(win, "Simple Window with box + toggles setting min size"); + win->autodel = 0; + win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); + win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + + bg = elm_bg_new(win); + snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR); + bg->file_set(bg, buf, NULL); + bg->expand_x = 0; + bg->expand_y = 0; + bg->show(bg); + + pad = elm_pad_new(win); + pad->expand_x = 0; + pad->expand_y = 0; + pad->show(pad); + + frame = elm_frame_new(win); + pad->child_add(pad, frame); + frame->text_set(frame, "Time"); + frame->expand_x = 0; + frame->expand_y = 0; + frame->show(frame); +/* + pad = elm_pad_new(win); + frame->child_add(frame, pad); + pad->expand_x = 0; + pad->expand_y = 0; + pad->show(pad); +*/ + box = elm_box_new(win); +// pad->child_add(pad, box); + frame->child_add(frame, box); + box->expand_x = 0; + box->expand_y = 0; + + toggle = elm_toggle_new(win); + toggle->text_set(toggle, "Alarm"); + toggle->states_text_set(toggle, "ON", "OFF"); + toggle->state = 0; + toggle->layout_update(toggle); + toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); + box->pack_end(box, toggle); + toggle->show(toggle); + toggle->expand_y = 0; + toggle->fill_y = 0; + elm_widget_sizing_update(toggle); + + cloc = elm_clock_new(win); + cloc->expand_x = 0; + cloc->fill_x = 0; + cloc->edit = 1; + cloc->hrs = 6; + cloc->min = 54; + cloc->sec = 32; + cloc->time_update(cloc); + cloc->cb_add(cloc, ELM_CB_CHANGED, on_clock_changed, NULL); + box->pack_end(box, cloc); + elm_widget_sizing_update(cloc); + cloc->show(cloc); + + cloc = elm_clock_new(win); + cloc->expand_x = 0; + cloc->fill_x = 0; + box->pack_end(box, cloc); + elm_widget_sizing_update(cloc); + cloc->show(cloc); + + cloc = elm_clock_new(win); + cloc->am_pm = 0; + cloc->seconds = 1; + cloc->time_update(cloc); + cloc->expand_x = 0; + cloc->fill_x = 0; + box->pack_end(box, cloc); + elm_widget_sizing_update(cloc); + cloc->show(cloc); + + cloc = elm_clock_new(win); + cloc->am_pm = 0; + cloc->seconds = 0; + cloc->time_update(cloc); + cloc->expand_x = 0; + cloc->fill_x = 0; + box->pack_end(box, cloc); + elm_widget_sizing_update(cloc); + cloc->show(cloc); + +/* + cloc = elm_clock_new(win); + cloc->am_pm = 1; + cloc->seconds = 0; + cloc->time_update(cloc); + cloc->expand_x = 0; + cloc->fill_x = 0; + box->pack_end(box, cloc); + elm_widget_sizing_update(cloc); + cloc->show(cloc); + */ + + elm_widget_sizing_update(box); + box->show(box); + + win->show(win); +} + +int +main(int argc, char **argv) +{ + /* init Elementary (all Elementary calls begin with elm_ and all data + * types, enums and macros will be Elm_ and ELM_ etc.) */ + elm_init(argc, argv); + + /* setup some windows with test widgets in them */ + win_bg_simple(); + win_bg_image(); + win_scrollable_label(); + win_label_determines_min_size(); + win_box_vert_of_labels(); + win_scrollable_box_vert_of_labels(); + win_table_of_labels(); + win_table_of_buttons(); + win_box_vert_of_toggles(); + win_scrollable_box_vert_of_toggles_and_buttons(); + win_box_vert_of_clock_and_toggles(); + + elm_run(); /* and run the program now and handle all events etc. */ + + elm_shutdown(); /* clean up and shut down */ + return 0; +} diff --git a/legacy/elementary/src/lib/Elementary.h b/legacy/elementary/src/lib/Elementary.h new file mode 100644 index 0000000000..ae11da7493 --- /dev/null +++ b/legacy/elementary/src/lib/Elementary.h @@ -0,0 +1,553 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifndef ELEMENTARY_H +#define ELEMENTARY_H + +/* What is this? + * + * This is a VERY SIMPLE toolkit - VERY SIMPLE. It is not meant for writing + * extensive applications. Small simple ones with simple needs. It is meant + * to make the programmers work almost brainless. + * + * I'm toying with backing this with etk or ewl - or not. right now I am + * unsure as some of the widgets will be faily complex edje creations. Do + * not consider any choices permanent - but the API should stay unbroken. + * + */ + +#include "elementary_config.h" + +/* Standard headers for standard system calls etc. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_ALLOCA_H +#include +#endif + +/* EFL headers */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* allow usage from c++ */ +#ifdef __cplusplus +extern "C" { +#endif + +// FIXME: need to be able to enable/disable widgets +// FIXME: need to determine scale from dpi + /* Types here */ + typedef enum _Elm_Obj_Type + { + ELM_OBJ_OBJ, + ELM_OBJ_CB, + ELM_OBJ_WIDGET, + ELM_OBJ_WIN, + ELM_OBJ_BG, + ELM_OBJ_SCROLLER, + ELM_OBJ_LABEL, + ELM_OBJ_BOX, + ELM_OBJ_TABLE, + ELM_OBJ_BUTTON, + ELM_OBJ_ICON, + ELM_OBJ_TOGGLE, + ELM_OBJ_CLOCK, + ELM_OBJ_FRAME, + ELM_OBJ_PAD +// ELM_OBJ_CHECK, // FIXME: do +// ELM_OBJ_RADIO, // FIXME: do +// ELM_OBJ_SEP, // FIXME: do (separator horiz or vert) +// ELM_OBJ_EXPANDER // FIXME: do (like a paned but slides open/closed) +// ELM_OBJ_SPIN, // FIXME: do +// ELM_OBJ_SLIDER, // FIXME: do +// ELM_OBJ_ENTRY, // FIXME: do +// ELM_OBJ_EDITOR, // FIXME: do +// ELM_OBJ_LISTITEM, // FIXME: do +// ELM_OBJ_BUSY, // FIXME: do +// // FIXME: list more widgets to do here like: +// // CONTACT, SELECTOR, FILES, PREVIEW, SIGNALINFO, CALLINFO, +// // CELLEDIT (csv - maybe later xls or some other cell format), +// // COLORSEL, TACHO ... +// +// wrap other basic ecore things: +// ELM_OBJ_TIMER, +// ELM_OBJ_ANIMATOR, +// ELM_OBJ_JOB, + } Elm_Obj_Type; + + typedef enum _Elm_Cb_Type + { + ELM_CB_DEL, + ELM_CB_CHILD_ADD, + ELM_CB_CHILD_DEL, + ELM_CB_UNPARENT, + ELM_CB_PARENT, + ELM_CB_DEL_REQ, + ELM_CB_RESIZE, + ELM_CB_CHANGED, + ELM_CB_ACTIVATED + } Elm_Cb_Type; + + typedef enum _Elm_Win_Type + { + ELM_WIN_BASIC, + ELM_WIN_DIALOG_BASIC + } Elm_Win_Type; + + typedef struct _Elm_Obj_Class Elm_Obj_Class; + typedef struct _Elm_Obj Elm_Obj; + typedef struct _Elm_Cb_Class Elm_Cb_Class; + typedef struct _Elm_Cb Elm_Cb; + typedef struct _Elm_Win_Class Elm_Win_Class; + typedef struct _Elm_Win Elm_Win; + typedef struct _Elm_Widget_Class Elm_Widget_Class; + typedef struct _Elm_Widget Elm_Widget; + typedef struct _Elm_Bg_Class Elm_Bg_Class; + typedef struct _Elm_Bg Elm_Bg; + typedef struct _Elm_Scroller_Class Elm_Scroller_Class; + typedef struct _Elm_Scroller Elm_Scroller; + typedef struct _Elm_Label_Class Elm_Label_Class; + typedef struct _Elm_Label Elm_Label; + typedef struct _Elm_Box_Class Elm_Box_Class; + typedef struct _Elm_Box Elm_Box; + typedef struct _Elm_Table_Class Elm_Table_Class; + typedef struct _Elm_Table Elm_Table; + typedef struct _Elm_Button_Class Elm_Button_Class; + typedef struct _Elm_Button Elm_Button; + typedef struct _Elm_Icon_Class Elm_Icon_Class; + typedef struct _Elm_Icon Elm_Icon; + typedef struct _Elm_Toggle_Class Elm_Toggle_Class; + typedef struct _Elm_Toggle Elm_Toggle; + typedef struct _Elm_Clock_Class Elm_Clock_Class; + typedef struct _Elm_Clock Elm_Clock; + typedef struct _Elm_Frame_Class Elm_Frame_Class; + typedef struct _Elm_Frame Elm_Frame; + typedef struct _Elm_Pad_Class Elm_Pad_Class; + typedef struct _Elm_Pad Elm_Pad; + + typedef void (*Elm_Cb_Func) (void *data, Elm_Obj *obj, Elm_Cb_Type type, void *info); + + /* API calls here */ + +/**************************************************************************/ + /* General calls */ + EAPI void elm_init(int argc, char **argv); + EAPI void elm_shutdown(void); + EAPI void elm_run(void); + EAPI void elm_exit(void); + +/**************************************************************************/ + /* Generic Elm Object */ +#define Elm_Obj_Class_Methods \ + void (*del) (Elm_Obj *obj); \ + void (*ref) (Elm_Obj *obj); \ + void (*unref) (Elm_Obj *obj); \ + Elm_Cb *(*cb_add) (Elm_Obj *obj, Elm_Cb_Type type, Elm_Cb_Func func, void *data); \ + void (*child_add) (Elm_Obj *obj, Elm_Obj *child); \ + void (*unparent) (Elm_Obj *obj); \ + int (*hastype) (Elm_Obj *obj, Elm_Obj_Type type) +#define Elm_Obj_Class_All Elm_Obj_Class_Methods; \ + Elm_Obj_Type type; \ + void *clas; /* the obj class and parent classes */ \ + Elm_Obj *parent; \ + Evas_List *children; \ + Evas_List *cbs; \ + int refs; \ + unsigned char delete_me : 1; \ + unsigned char delete_deferred : 1 + + struct _Elm_Obj_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Obj_Class_Methods; + }; + struct _Elm_Obj + { + Elm_Obj_Class_All; + }; +#define ELM_OBJ(o) ((Elm_Obj *)o) + +/**************************************************************************/ + /* Callback Object */ +#define Elm_Cb_Class_Methods +#define Elm_Cb_Class_All Elm_Obj_Class_All; Elm_Cb_Class_Methods; \ + Elm_Cb_Class_Methods; \ + Elm_Cb_Type cb_type; \ + Elm_Cb_Func func; \ + void *data; + struct _Elm_Cb_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Cb_Class_Methods; + }; + struct _Elm_Cb + { + Elm_Cb_Class_All; + }; + +/**************************************************************************/ + /* Widget Object */ +#define Elm_Widget_Class_Methods \ + void (*geom_set) (Elm_Widget *wid, int x, int y, int w, int h); \ + void (*show) (Elm_Widget *wid); \ + void (*hide) (Elm_Widget *wid); \ + void (*size_alloc) (Elm_Widget *wid, int w, int h); \ + void (*size_req) (Elm_Widget *wid, Elm_Widget *child, int w, int h); \ + void (*above) (Elm_Widget *wid, Elm_Widget *above); \ + void (*below) (Elm_Widget *wid, Elm_Widget *below) + +#define Elm_Widget_Class_All Elm_Obj_Class_All; Elm_Widget_Class_Methods; \ + int x, y, w, h; \ + struct { int w, h; } req; \ + Evas_Object *base; \ + double align_x, align_y; \ + unsigned char expand_x : 1; \ + unsigned char expand_y : 1; \ + unsigned char fill_x : 1; \ + unsigned char fill_y : 1 + + /* Object specific ones */ + // FIXME: should this be a function or widget method call? + EAPI void elm_widget_sizing_update(Elm_Widget *wid); + struct _Elm_Widget_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Widget_Class_Methods; + }; + struct _Elm_Widget + { + Elm_Widget_Class_All; + }; + +#ifdef __cplusplus +} +#endif + +/**************************************************************************/ + /* Window Object */ +#define Elm_Win_Class_Methods \ + void (*name_set) (Elm_Win *win, const char *name); \ + void (*title_set) (Elm_Win *win, const char *title) +// FIXME: +// cover methods & state for: +// type, fullscreen, icon, activate, shaped, alpha, borderless, iconified, +// setting parent window (for dialogs) +#define Elm_Win_Class_All Elm_Widget_Class_All; Elm_Win_Class_Methods; \ + Elm_Win_Type win_type; \ + const char *name; \ + const char *title; \ + unsigned char autodel : 1 + + /* Object specific ones */ + EAPI Elm_Win *elm_win_new(void); + struct _Elm_Win_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Win_Class_Methods; + }; + struct _Elm_Win + { + Elm_Win_Class_All; + + Ecore_Evas *ee; /* private */ + Evas *evas; /* private */ + Ecore_X_Window xwin; /* private */ + Ecore_Job *deferred_resize_job; /* private */ + Ecore_Job *deferred_child_eval_job; /* private */ + unsigned char showme : 1; /* private */ + }; + +/**************************************************************************/ + /* Background Object */ +#define Elm_Bg_Class_Methods \ + void (*file_set) (Elm_Bg *bg, const char *file, const char *group); +#define Elm_Bg_Class_All Elm_Widget_Class_All; Elm_Bg_Class_Methods; \ + const char *file; \ + const char *group + + /* Object specific ones */ + EAPI Elm_Bg *elm_bg_new(Elm_Win *win); + struct _Elm_Bg_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Bg_Class_Methods; + }; + struct _Elm_Bg + { + Elm_Bg_Class_All; + + Evas_Object *custom_bg; + }; + +/**************************************************************************/ + /* Scroller (scrollframe/scrolledview) Object */ +#define Elm_Scroller_Class_Methods \ + void (*file_set) (Elm_Scroller *scroller, const char *file, const char *group); +#define Elm_Scroller_Class_All Elm_Widget_Class_All; Elm_Scroller_Class_Methods; \ + const char *file; \ + const char *group + + /* Object specific ones */ + EAPI Elm_Scroller *elm_scroller_new(Elm_Win *win); + struct _Elm_Scroller_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Scroller_Class_Methods; + }; + struct _Elm_Scroller + { + Elm_Scroller_Class_All; + + Evas_Object *scroller_pan; + }; + +/**************************************************************************/ + /* Label Object */ +#define Elm_Label_Class_Methods \ + void (*text_set) (Elm_Label *lb, const char *text) +#define Elm_Label_Class_All Elm_Widget_Class_All; Elm_Label_Class_Methods; \ + const char *text; \ + int minw, minh + + /* Object specific ones */ + EAPI Elm_Label *elm_label_new(Elm_Win *win); + struct _Elm_Label_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Label_Class_Methods; + }; + struct _Elm_Label + { + Elm_Label_Class_All; + }; + +/**************************************************************************/ + /* Box Object */ +#define Elm_Box_Class_Methods \ + void (*layout_update) (Elm_Box *bx); \ + void (*pack_start) (Elm_Box *bx, Elm_Widget *wid); \ + void (*pack_end) (Elm_Box *bx, Elm_Widget *wid); \ + void (*pack_before) (Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_before); \ + void (*pack_after) (Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_after); + +#define Elm_Box_Class_All Elm_Widget_Class_All; Elm_Box_Class_Methods; \ + unsigned char horizontal : 1; \ + unsigned char homogenous : 1 + + /* Object specific ones */ + EAPI Elm_Box *elm_box_new(Elm_Win *win); + struct _Elm_Box_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Box_Class_Methods; + }; + struct _Elm_Box + { + Elm_Box_Class_All; + }; + +/**************************************************************************/ + /* Table Object */ +#define Elm_Table_Class_Methods \ + void (*layout_update) (Elm_Table *tb); \ + void (*pack) (Elm_Table *tb, Elm_Widget *wid, int x, int y, int w, int h) +#define Elm_Table_Class_All Elm_Widget_Class_All; Elm_Table_Class_Methods; \ + unsigned char homogenous : 1 + + /* Object specific ones */ + EAPI Elm_Table *elm_table_new(Elm_Win *win); + struct _Elm_Table_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Table_Class_Methods; + }; + struct _Elm_Table + { + Elm_Table_Class_All; + }; + +/**************************************************************************/ + /* Button Object */ +#define Elm_Button_Class_Methods \ + void (*text_set) (Elm_Button *bt, const char *text) +#define Elm_Button_Class_All Elm_Widget_Class_All; Elm_Button_Class_Methods; \ + const char *text; \ + int minw, minh + + /* Object specific ones */ + EAPI Elm_Button *elm_button_new(Elm_Win *win); + struct _Elm_Button_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Button_Class_Methods; + }; + struct _Elm_Button + { + Elm_Button_Class_All; + }; + +/**************************************************************************/ + /* Icon Object */ +#define Elm_Icon_Class_Methods \ + void (*file_set) (Elm_Icon *icon, const char *file, const char *group); \ + void (*layout_update) (Elm_Icon *icon) +#define Elm_Icon_Class_All Elm_Widget_Class_All; Elm_Icon_Class_Methods; \ + unsigned char scale_up : 1; \ + unsigned char scale_down : 1; \ + unsigned char fill_outside : 1; \ + unsigned char smooth : 1; \ + unsigned char no_scale : 1; \ + const char *file; \ + const char *group + + /* Object specific ones */ + EAPI Elm_Icon *elm_icon_new(Elm_Win *win); + struct _Elm_Icon_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Icon_Class_Methods; + }; + struct _Elm_Icon + { + Elm_Icon_Class_All; + }; + +/**************************************************************************/ + /* Toggle Object */ +#define Elm_Toggle_Class_Methods \ + void (*text_set) (Elm_Toggle *tg, const char *text); \ + void (*layout_update) (Elm_Toggle *tg); \ + void (*states_text_set) (Elm_Toggle *tg, const char *ontext, const char *offtext) +#define Elm_Toggle_Class_All Elm_Widget_Class_All; Elm_Toggle_Class_Methods; \ + const char *text; \ + int minw, minh; \ + int state; \ + int *state_ptr + + /* Object specific ones */ + EAPI Elm_Toggle *elm_toggle_new(Elm_Win *win); + struct _Elm_Toggle_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Toggle_Class_Methods; + }; + struct _Elm_Toggle + { + Elm_Toggle_Class_All; + }; + +/**************************************************************************/ + /* Clock Object */ +#define Elm_Clock_Class_Methods \ + void (*time_update) (Elm_Clock *ck) +#define Elm_Clock_Class_All Elm_Widget_Class_All; Elm_Clock_Class_Methods; \ + int hrs, min, sec; \ + int minw, minh; \ + unsigned char seconds : 1; \ + unsigned char am_pm : 1; \ + unsigned char edit : 1 + + /* Object specific ones */ + EAPI Elm_Clock *elm_clock_new(Elm_Win *win); + struct _Elm_Clock_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Clock_Class_Methods; + }; + struct _Elm_Clock + { + Elm_Clock_Class_All; + + Evas_Object *digit[6]; + Evas_Object *ampm; + Ecore_Timer *ticker; + struct { + int hrs, min, sec; + char ampm; + char seconds; + char am_pm; + char edit; + } cur; + }; + +/**************************************************************************/ + /* Frame Object */ +#define Elm_Frame_Class_Methods \ + void (*text_set) (Elm_Frame *fr, const char *text) +#define Elm_Frame_Class_All Elm_Widget_Class_All; Elm_Frame_Class_Methods; \ + const char *text; \ + int minw, minh + + /* Object specific ones */ + EAPI Elm_Frame *elm_frame_new(Elm_Win *win); + struct _Elm_Frame_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Frame_Class_Methods; + }; + struct _Elm_Frame + { + Elm_Frame_Class_All; + }; + +/**************************************************************************/ + /* Pad Object */ +#define Elm_Pad_Class_Methods +#define Elm_Pad_Class_All Elm_Widget_Class_All; Elm_Pad_Class_Methods; \ + int minw, minh + + /* Object specific ones */ + EAPI Elm_Pad *elm_pad_new(Elm_Win *win); + struct _Elm_Pad_Class + { + void *parent; + Elm_Obj_Type type; + Elm_Pad_Class_Methods; + }; + struct _Elm_Pad + { + Elm_Pad_Class_All; + }; + +#endif diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am new file mode 100644 index 0000000000..a420573aee --- /dev/null +++ b/legacy/elementary/src/lib/Makefile.am @@ -0,0 +1,54 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I. \ +-I$(top_builddir) \ +-I$(top_srcdir) \ +-I$(top_srcdir)/src/lib \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@ELEMENTARY_CFLAGS@ + +lib_LTLIBRARIES = libelementary.la + +include_HEADERS = Elementary.h + +libelementary_la_SOURCES = \ +elm_priv.h \ +elm_main.c \ +elm_obj.c \ +elm_callback.c \ +elm_win.c \ +elm_theme.c \ +elm_widget.c \ +elm_bg.c \ +elm_scroller.c \ +elm_label.c \ +elm_box.c \ +elm_table.c \ +elm_button.c \ +elm_icon.c \ +elm_toggle.c \ +elm_clock.c \ +elm_frame.c \ +elm_pad.c \ +\ +els_pan.c \ +els_pan.h \ +els_scroller.c \ +els_scroller.h \ +els_box.c \ +els_box.h \ +els_table.c \ +els_table.h \ +els_icon.c \ +els_icon.h + +libelementary_la_CFLAGS = +libelementary_la_LIBADD = @my_libs@ @ELEMENTARY_LIBS@ +libelementary_la_LDFLAGS = -version-info @version_info@ +libelementary_la_DEPENDENCIES = $(top_builddir)/elementary_config.h + +clean-local: + @rm -rf *.gcno + diff --git a/legacy/elementary/src/lib/elm_bg.c b/legacy/elementary/src/lib/elm_bg.c new file mode 100644 index 0000000000..0fef5fdd66 --- /dev/null +++ b/legacy/elementary/src/lib/elm_bg.c @@ -0,0 +1,99 @@ +#include +#include "elm_priv.h" + +static void _elm_bg_file_set(Elm_Bg *bg, const char *file, const char *group); +static void _elm_bg_del(Elm_Bg *bg); + +Elm_Bg_Class _elm_bg_class = +{ + &_elm_widget_class, + ELM_OBJ_BG, + _elm_bg_file_set +}; + +static void +_elm_bg_custom_resize(void *data, Evas *a, Evas_Object *obj, void *event_info) +{ + Elm_Bg *bg = data; + int iw = 0, ih = 0; + Evas_Coord x, y, w, h, ow = 0, oh = 0; + + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + evas_object_image_size_get(obj, &iw, &ih); + + if ((iw < 1) || (ih < 1)) return; + w = ow; + h = (ih * w) / iw; + if (h < oh) + { + h = oh; + w = (iw * h) / ih; + } + x = (ow - w) / 2; + y = (oh - h) / 2; + evas_object_image_fill_set(obj, x, y, w, h); +} + +static void +_elm_bg_file_set(Elm_Bg *bg, const char *file, const char *group) +{ + const char *p; + + if (bg->custom_bg) + { + evas_object_del(bg->custom_bg); + bg->custom_bg = NULL; + } + if (!file) return; + if (bg->file) evas_stringshare_del(bg->file); + if (file) bg->file = evas_stringshare_add(file); + else bg->file = NULL; + if (bg->group) evas_stringshare_del(bg->group); + if (group) bg->group = evas_stringshare_add(group); + else bg->group = NULL; + if (((p = strrchr(file, '.'))) && (!strcasecmp(p, ".edj"))) + { + bg->custom_bg = edje_object_add(evas_object_evas_get(bg->base)); + edje_object_file_set(bg->custom_bg, file, group); + } + else + { + bg->custom_bg = evas_object_image_add(evas_object_evas_get(bg->base)); + evas_object_event_callback_add(bg->custom_bg, EVAS_CALLBACK_RESIZE, _elm_bg_custom_resize, bg); + evas_object_image_file_set(bg->custom_bg, file, group); + } + evas_object_repeat_events_set(bg->custom_bg, 1); + edje_object_part_swallow(bg->base, "elm.swallow.background", bg->custom_bg); + evas_object_show(bg->custom_bg); +} + +static void +_elm_bg_del(Elm_Bg *bg) +{ + if (bg->custom_bg) evas_object_del(bg->custom_bg); + if (bg->group) evas_stringshare_del(bg->group); + if (bg->file) evas_stringshare_del(bg->file); + ((Elm_Obj_Class *)(((Elm_Bg_Class *)(bg->clas))->parent))->del(ELM_OBJ(bg)); +} + +EAPI Elm_Bg * +elm_bg_new(Elm_Win *win) +{ + Elm_Bg *bg; + + bg = ELM_NEW(Elm_Bg); + + _elm_widget_init(bg); + bg->clas = &_elm_bg_class; + bg->type = ELM_OBJ_BG; + + bg->del = _elm_bg_del; + + bg->file_set = _elm_bg_file_set; + + bg->base = edje_object_add(win->evas); + _elm_theme_set(bg->base, "bg", "bg"); + _elm_widget_post_init(bg); + win->child_add(win, bg); + return bg; +} diff --git a/legacy/elementary/src/lib/elm_box.c b/legacy/elementary/src/lib/elm_box.c new file mode 100644 index 0000000000..0a32648802 --- /dev/null +++ b/legacy/elementary/src/lib/elm_box.c @@ -0,0 +1,131 @@ +#include +#include "elm_priv.h" + +static void _elm_box_layout_update(Elm_Box *bx); +static void _elm_box_pack_start(Elm_Box *bx, Elm_Widget *wid); +static void _elm_box_pack_end(Elm_Box *bx, Elm_Widget *wid); +static void _elm_box_pack_before(Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_before); +static void _elm_box_pack_after(Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_after); + +Elm_Box_Class _elm_box_class = +{ + &_elm_widget_class, + ELM_OBJ_SCROLLER, + _elm_box_layout_update, + _elm_box_pack_start, + _elm_box_pack_end, + _elm_box_pack_before, + _elm_box_pack_after +}; + +static void +_elm_box_layout_update(Elm_Box *bx) +{ + _els_smart_box_orientation_set(bx->base, bx->horizontal); + _els_smart_box_homogenous_set(bx->base, bx->homogenous); +} + +static void +_elm_box_pack_start(Elm_Box *bx, Elm_Widget *wid) +{ + bx->child_add(bx, wid); + _els_smart_box_pack_start(bx->base, wid->base); +} + +static void +_elm_box_pack_end(Elm_Box *bx, Elm_Widget *wid) +{ + bx->child_add(bx, wid); + _els_smart_box_pack_end(bx->base, wid->base); +} + +static void +_elm_box_pack_before(Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_before) +{ + bx->child_add(bx, wid); + _els_smart_box_pack_before(bx->base, wid->base, wid_before->base); +} + +static void +_elm_box_pack_after(Elm_Box *bx, Elm_Widget *wid, Elm_Widget *wid_after) +{ + bx->child_add(bx, wid); + _els_smart_box_pack_after(bx->base, wid->base, wid_after->base); +} + +static void +_elm_box_size_alloc(Elm_Box *bx, int w, int h) +{ + Evas_Coord mw, mh; + + _els_smart_box_min_size_get(bx->base, &mw, &mh); + if (w < mw) w = mw; + if (h < mh) h = mh; + bx->req.w = w; + bx->req.h = h; +} + +static void +_elm_box_size_req(Elm_Box *bx, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + _els_smart_box_pack_options_set(child->base, + child->fill_x, child->fill_y, + child->expand_x, child->expand_y, + child->align_x, child->align_y, + child->req.w, child->req.h, + maxx, maxy); + } + else + { + // FIXME: handle. + } + _els_smart_box_min_size_get(bx->base, &mw, &mh); + ((Elm_Widget *)(bx->parent))->size_req(bx->parent, bx, mw, mh); + bx->geom_set(bx, bx->x, bx->y, mw, mh); +} + +static void +_elm_on_child_del(void *data, Elm_Box *bx, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + _els_smart_box_unpack(((Elm_Widget *)(obj))->base); +} + +EAPI Elm_Box * +elm_box_new(Elm_Win *win) +{ + Elm_Box *bx; + + bx = ELM_NEW(Elm_Box); + _elm_widget_init(bx); + + bx->clas = &_elm_box_class; + bx->type = ELM_OBJ_BOX; + + bx->layout_update = _elm_box_layout_update; + bx->pack_start = _elm_box_pack_start; + bx->pack_end = _elm_box_pack_end; + bx->pack_before = _elm_box_pack_before; + bx->pack_after = _elm_box_pack_after; + + bx->size_alloc = _elm_box_size_alloc; + bx->size_req = _elm_box_size_req; + + bx->base = _els_smart_box_add(win->evas); + + bx->cb_add(bx, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(bx); + win->child_add(win, bx); + return bx; +} diff --git a/legacy/elementary/src/lib/elm_button.c b/legacy/elementary/src/lib/elm_button.c new file mode 100644 index 0000000000..a63f5649f7 --- /dev/null +++ b/legacy/elementary/src/lib/elm_button.c @@ -0,0 +1,170 @@ +#include +#include "elm_priv.h" + +static void _elm_button_text_set(Elm_Button *bt, const char *text); + +Elm_Button_Class _elm_button_class = +{ + &_elm_widget_class, + ELM_OBJ_BUTTON, + _elm_button_text_set +}; + +static void +_elm_button_text_set(Elm_Button *bt, const char *text) +{ + Evas_Coord mw, mh; + + if (text) + { + edje_object_signal_emit(bt->base, "elm,state,text,visible", "elm"); + edje_object_message_signal_process(bt->base); + } + else + { + edje_object_signal_emit(bt->base, "elm,state,text,hidden", "elm"); + edje_object_message_signal_process(bt->base); + } + edje_object_part_text_set(bt->base, "elm.text", text); + edje_object_size_min_calc(bt->base, &mw, &mh); + if ((bt->minw != mw) || (bt->minh != mh)) + { + bt->minw = mw; + bt->minh = mh; + ((Elm_Widget *)(bt->parent))->size_req(bt->parent, bt, bt->minw, bt->minh); + bt->geom_set(bt, bt->x, bt->y, bt->minw, bt->minh); + } +} + +static void +_elm_button_size_alloc(Elm_Button *bt, int w, int h) +{ + if (w < bt->minw) w = bt->minw; + if (h < bt->minh) h = bt->minh; + bt->req.w = w; + bt->req.h = h; +} + +static void +_elm_button_size_req(Elm_Button *bt, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + edje_extern_object_min_size_set(child->base, + child->req.w, + child->req.h); + edje_object_part_swallow(bt->base , "elm.swallow.contents", + child->base); + edje_object_size_min_calc(bt->base, &mw, &mh); + if ((bt->minw != mw) || (bt->minh != mh)) + { + bt->minw = mw; + bt->minh = mh; + ((Elm_Widget *)(bt->parent))->size_req(bt->parent, bt, mw, mh); + bt->geom_set(bt, bt->x, bt->y, mw, mh); + } + } + else + { + // FIXME: handle + } +} + +static void +_elm_on_child_add(void *data, Elm_Button *bt, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord mw, mh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + edje_object_signal_emit(bt->base, "elm,state,icon,visible", "elm"); + edje_object_message_signal_process(bt->base); + ((Elm_Widget *)(obj))->size_alloc(obj, 0, 0); + ((Elm_Widget *)(obj))->geom_set(obj, + ((Elm_Widget *)(obj))->x, + ((Elm_Widget *)(obj))->y, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_extern_object_min_size_set(((Elm_Widget *)(obj))->base, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_object_part_swallow(bt->base , "elm.swallow.contents", + ((Elm_Widget *)(obj))->base); + edje_object_size_min_calc(bt->base, &mw, &mh); + if ((bt->minw != mw) || (bt->minh != mh)) + { + bt->minw = mw; + bt->minh = mh; + ((Elm_Widget *)(bt->parent))->size_req(bt->parent, bt, mw, mh); + bt->geom_set(bt, bt->x, bt->y, mw, mh); + } +} + +static void +_elm_on_child_del(void *data, Elm_Button *bt, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + // FIXME: allow for removal of child - size down + edje_object_signal_emit(bt->base, "elm,state,icon,hidden", "elm"); + edje_object_message_signal_process(bt->base); +} + +static void +_elm_button_activate(Elm_Button *bt) +{ + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(bt), ELM_CB_ACTIVATED, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Button *bt = data; + + _elm_button_activate(bt); +} + +static void +_elm_button_del(Elm_Button *bt) +{ + if (bt->text) evas_stringshare_del(bt->text); + ((Elm_Obj_Class *)(((Elm_Button_Class *)(bt->clas))->parent))->del(ELM_OBJ(bt)); +} + +EAPI Elm_Button * +elm_button_new(Elm_Win *win) +{ + Elm_Button *bt; + + bt = ELM_NEW(Elm_Button); + + _elm_widget_init(bt); + bt->clas = &_elm_button_class; + bt->type = ELM_OBJ_BUTTON; + + bt->del = _elm_button_del; + + bt->size_alloc = _elm_button_size_alloc; + bt->size_req = _elm_button_size_req; + + bt->text_set = _elm_button_text_set; + + bt->base = edje_object_add(win->evas); + _elm_theme_set(bt->base, "button", "button"); + edje_object_signal_callback_add(bt->base, "elm,action,click", "", + _elm_signal_clicked, bt); + bt->cb_add(bt, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + bt->cb_add(bt, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(bt); + win->child_add(win, bt); + return bt; +} diff --git a/legacy/elementary/src/lib/elm_callback.c b/legacy/elementary/src/lib/elm_callback.c new file mode 100644 index 0000000000..fb0137f127 --- /dev/null +++ b/legacy/elementary/src/lib/elm_callback.c @@ -0,0 +1,58 @@ +#include +#include "elm_priv.h" + +Elm_Cb_Class _elm_cb_class = +{ + &_elm_obj_class, + ELM_OBJ_CB +}; + + + +static void +_elm_cb_del(Elm_Cb *cb) +{ + if (_elm_obj_del_defer(ELM_OBJ(cb))) return; + if (cb->parent) /* callbacks are special children */ + { + cb->parent->cbs = evas_list_remove(cb->parent->cbs, cb); + cb->parent = NULL; + } + ((Elm_Obj_Class *)(((Elm_Cb_Class *)(cb->clas))->parent))->del(ELM_OBJ(cb)); +} + +Elm_Cb * +_elm_cb_new(void) +{ + Elm_Cb *cb; + + cb = ELM_NEW(Elm_Cb); + _elm_obj_init(ELM_OBJ(cb)); + cb->clas = &_elm_cb_class; + cb->type = ELM_OBJ_CB; + + cb->del = _elm_cb_del; + + return cb; +} + +void +_elm_cb_call(Elm_Obj *obj, Elm_Cb_Type type, void *info) +{ + Evas_List *l; + + _elm_obj_nest_push(); + for (l = obj->cbs; l; l = l->next) + { + Elm_Cb *cb; + + cb = l->data; + if (cb->delete_me) continue; + if (cb->cb_type == type) + { + if (cb->func) cb->func(cb->data, obj, type, info); + if (cb->cbs) _elm_cb_call(cb, type, info); + } + } + _elm_obj_nest_pop(); +} diff --git a/legacy/elementary/src/lib/elm_clock.c b/legacy/elementary/src/lib/elm_clock.c new file mode 100644 index 0000000000..af968316bf --- /dev/null +++ b/legacy/elementary/src/lib/elm_clock.c @@ -0,0 +1,393 @@ +#include +#include "elm_priv.h" + +static void _elm_clock_time_update(Elm_Clock *ck); + +Elm_Clock_Class _elm_clock_class = +{ + &_elm_widget_class, + ELM_OBJ_CLOCK, + _elm_clock_time_update +}; + + +static void +_elm_clock_val_up(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Clock *ck = data; + + if (!ck->edit) return; + if (obj == ck->digit[0]) + { + ck->hrs = ck->hrs + 10; + if (ck->hrs >= 24) ck->hrs -= 24; + } + if (obj == ck->digit[1]) + { + ck->hrs = ck->hrs + 1; + if (ck->hrs >= 24) ck->hrs -= 24; + } + if (obj == ck->digit[2]) + { + ck->min = ck->min + 10; + if (ck->min >= 60) ck->min -= 60; + } + if (obj == ck->digit[3]) + { + ck->min = ck->min + 1; + if (ck->min >= 60) ck->min -= 60; + } + if (obj == ck->digit[4]) + { + ck->sec = ck->sec + 10; + if (ck->sec >= 60) ck->sec -= 60; + } + if (obj == ck->digit[5]) + { + ck->sec = ck->sec + 1; + if (ck->sec >= 60) ck->sec -= 60; + } + if (obj == ck->ampm) + { + ck->hrs = ck->hrs + 12; + if (ck->hrs > 23) ck->hrs -= 24; + } + ck->time_update(ck); + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(ck), ELM_CB_CHANGED, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_clock_val_down(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Clock *ck = data; + if (!ck->edit) return; + if (obj == ck->digit[0]) + { + ck->hrs = ck->hrs - 10; + if (ck->hrs < 0) ck->hrs += 24; + } + if (obj == ck->digit[1]) + { + ck->hrs = ck->hrs - 1; + if (ck->hrs < 0) ck->hrs += 24; + } + if (obj == ck->digit[2]) + { + ck->min = ck->min - 10; + if (ck->min < 0) ck->min += 60; + } + if (obj == ck->digit[3]) + { + ck->min = ck->min - 1; + if (ck->min < 0) ck->min += 60; + } + if (obj == ck->digit[4]) + { + ck->sec = ck->sec - 10; + if (ck->sec < 0) ck->sec += 60; + } + if (obj == ck->digit[5]) + { + ck->sec = ck->sec - 1; + if (ck->sec < 0) ck->sec += 60; + } + if (obj == ck->ampm) + { + ck->hrs = ck->hrs - 12; + if (ck->hrs < 0) ck->hrs += 24; + } + ck->time_update(ck); + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(ck), ELM_CB_CHANGED, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_clock_time_update(Elm_Clock *ck) +{ + Edje_Message_Int msg; + int ampm = 0; + + if ((ck->cur.seconds != ck->seconds) || (ck->cur.am_pm != ck->am_pm) || + (ck->cur.edit != ck->edit)) + { + int i; + Evas_Coord mw, mh; + + for (i = 0; i < 6; i++) + { + if (ck->digit[i]) + { + evas_object_del(ck->digit[i]); + ck->digit[i] = NULL; + } + } + if (ck->ampm) + { + evas_object_del(ck->ampm); + ck->ampm = NULL; + } + + if ((ck->seconds) && (ck->am_pm)) + _elm_theme_set(ck->base, "clock", "clock/all"); + else if (ck->seconds) + _elm_theme_set(ck->base, "clock", "clock/seconds"); + else if (ck->am_pm) + _elm_theme_set(ck->base, "clock", "clock/am_pm"); + else + _elm_theme_set(ck->base, "clock", "clock"); + + for (i = 0; i < 6; i++) + { + char buf[16]; + + if ((!ck->seconds) && (i >= 4)) break; + ck->digit[i] = edje_object_add(evas_object_evas_get(ck->base)); + _elm_theme_set(ck->digit[i], "clock", "flipdigit"); + if (ck->edit) + edje_object_signal_emit(ck->digit[i], "elm,state,edit,on", "elm"); + edje_object_signal_callback_add(ck->digit[i], "elm,action,up", "", + _elm_clock_val_up, ck); + edje_object_signal_callback_add(ck->digit[i], "elm,action,down", "", + _elm_clock_val_down, ck); + edje_object_size_min_calc(ck->digit[i], &mw, &mh); + edje_extern_object_min_size_set(ck->digit[i], mw, mh); + snprintf(buf, sizeof(buf), "d%i", i); + edje_object_part_swallow(ck->base , buf, ck->digit[i]); + evas_object_show(ck->digit[i]); + } + if (ck->am_pm) + { + ck->ampm = edje_object_add(evas_object_evas_get(ck->base)); + _elm_theme_set(ck->ampm, "clock", "flipampm"); + if (ck->edit) + edje_object_signal_emit(ck->ampm, "elm,state,edit,on", "elm"); + edje_object_signal_callback_add(ck->ampm, "elm,action,up", "", + _elm_clock_val_up, ck); + edje_object_signal_callback_add(ck->ampm, "elm,action,down", "", + _elm_clock_val_down, ck); + edje_object_size_min_calc(ck->ampm, &mw, &mh); + edje_extern_object_min_size_set(ck->ampm, mw, mh); + edje_object_part_swallow(ck->base , "ampm", ck->ampm); + evas_object_show(ck->ampm); + } + + edje_object_size_min_calc(ck->base, &mw, &mh); + ck->minw = mw; + ck->minh = mh; + + ck->cur.hrs = 0; + ck->cur.min = 0; + ck->cur.sec = 0; + ck->cur.ampm = -1; + ck->cur.seconds = ck->seconds; + ck->cur.am_pm = ck->am_pm; + ck->cur.edit = ck->edit; + } + if (ck->hrs != ck->cur.hrs) + { + int hrs; + int d1, d2, dc1, dc2; + + hrs = ck->hrs; + if (ck->am_pm) + { + if (hrs >= 12) + { + if (hrs > 12) hrs -= 12; + ampm = 1; + } + else if (hrs == 0) hrs = 12; + } + d1 = hrs / 10; + d2 = hrs % 10; + dc1 = ck->cur.hrs / 10; + dc2 = ck->cur.hrs % 10; + if (d1 != dc1) + { + msg.val = d1; + edje_object_message_send(ck->digit[0], EDJE_MESSAGE_INT, 1, &msg); + } + if (d2 != dc2) + { + msg.val = d2; + edje_object_message_send(ck->digit[1], EDJE_MESSAGE_INT, 1, &msg); + } + ck->cur.hrs = hrs; + } + if (ck->min != ck->cur.min) + { + int d1, d2, dc1, dc2; + + d1 = ck->min / 10; + d2 = ck->min % 10; + dc1 = ck->cur.min / 10; + dc2 = ck->cur.min % 10; + if (d1 != dc1) + { + msg.val = d1; + edje_object_message_send(ck->digit[2], EDJE_MESSAGE_INT, 1, &msg); + } + if (d2 != dc2) + { + msg.val = d2; + edje_object_message_send(ck->digit[3], EDJE_MESSAGE_INT, 1, &msg); + } + ck->cur.min = ck->min; + } + if (ck->seconds) + { + if (ck->sec != ck->cur.sec) + { + int d1, d2, dc1, dc2; + + d1 = ck->sec / 10; + d2 = ck->sec % 10; + dc1 = ck->cur.sec / 10; + dc2 = ck->cur.sec % 10; + if (d1 != dc1) + { + msg.val = d1; + edje_object_message_send(ck->digit[4], EDJE_MESSAGE_INT, 1, &msg); + } + if (d2 != dc2) + { + msg.val = d2; + edje_object_message_send(ck->digit[5], EDJE_MESSAGE_INT, 1, &msg); + } + ck->cur.sec = ck->sec; + } + } + else + ck->cur.sec = -1; + + if (ck->am_pm) + { + if (ck->hrs >= 12) ampm = 1; + if (ampm != ck->cur.ampm) + { + int d1, d2, dc1, dc2; + + if (ck->cur.ampm != ampm) + { + msg.val = ampm; + edje_object_message_send(ck->ampm, EDJE_MESSAGE_INT, 1, &msg); + } + ck->cur.ampm = ampm; + } + } + else + ck->cur.ampm = -1; +} + +static void +_elm_clock_size_alloc(Elm_Clock *ck, int w, int h) +{ + Evas_Coord mw, mh; + + if (w < ck->minw) w = ck->minw; + if (h < ck->minh) h = ck->minh; + ck->req.w = w; + ck->req.h = h; +} + +static void +_elm_clock_size_req(Elm_Clock *ck, Elm_Widget *child, int w, int h) +{ + if (child) + { + } + else + { + // FIXME: handle + } +} + +static void +_elm_clock_activate(Elm_Clock *ck) +{ + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(ck), ELM_CB_ACTIVATED, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_clock_del(Elm_Clock *ck) +{ + int i; + + for (i = 0; i < 6; i++) + { + if (ck->digit[i]) evas_object_del(ck->digit[i]); + } + if (ck->ampm) evas_object_del(ck->ampm); + if (ck->ticker) ecore_timer_del(ck->ticker); + ((Elm_Obj_Class *)(((Elm_Clock_Class *)(ck->clas))->parent))->del(ELM_OBJ(ck)); +} + +static int +_elm_clock_ticker(Elm_Clock *ck) +{ + double t; + struct timeval timev; + struct tm *tm; + time_t tt; + + gettimeofday(&timev, NULL); + t = ((double)(1000000 - timev.tv_usec)) / 1000000.0; + ck->ticker = ecore_timer_add(t, _elm_clock_ticker, ck); + if (!ck->edit) + { + tt = (time_t)(timev.tv_sec); + tzset(); + tm = localtime(&tt); + if (tm) + { + ck->hrs = tm->tm_hour; + ck->min = tm->tm_min; + ck->sec = tm->tm_sec; + ck->time_update(ck); + } + } + return 0; +} + +EAPI Elm_Clock * +elm_clock_new(Elm_Win *win) +{ + Elm_Clock *ck; + + ck = ELM_NEW(Elm_Clock); + + _elm_widget_init(ck); + ck->clas = &_elm_clock_class; + ck->type = ELM_OBJ_CLOCK; + + ck->del = _elm_clock_del; + + ck->size_alloc = _elm_clock_size_alloc; + ck->size_req = _elm_clock_size_req; + + ck->time_update = _elm_clock_time_update; + + ck->seconds = 1; + ck->am_pm = 1; + + ck->cur.hrs = 0; + ck->cur.min = 0; + ck->cur.sec = 0; + ck->cur.ampm = -1; + ck->cur.seconds = -1; + ck->cur.am_pm = -1; + ck->cur.edit = -1; + + ck->base = edje_object_add(win->evas); + + _elm_clock_ticker(ck); + + _elm_widget_post_init(ck); + win->child_add(win, ck); + return ck; +} diff --git a/legacy/elementary/src/lib/elm_frame.c b/legacy/elementary/src/lib/elm_frame.c new file mode 100644 index 0000000000..458573d36f --- /dev/null +++ b/legacy/elementary/src/lib/elm_frame.c @@ -0,0 +1,138 @@ +#include +#include "elm_priv.h" + +static void _elm_frame_text_set(Elm_Frame *fr, const char *text); + +Elm_Frame_Class _elm_frame_class = +{ + &_elm_widget_class, + ELM_OBJ_FRAME, + _elm_frame_text_set +}; + +static void +_elm_frame_text_set(Elm_Frame *fr, const char *text) +{ + Evas_Coord mw, mh; + + edje_object_part_text_set(fr->base, "elm.text", text); + edje_object_size_min_calc(fr->base, &mw, &mh); + if ((fr->minw != mw) || (fr->minh != mh)) + { + fr->minw = mw; + fr->minh = mh; + ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, fr->minw, fr->minh); + fr->geom_set(fr, fr->x, fr->y, fr->minw, fr->minh); + } +} + +static void +_elm_frame_size_alloc(Elm_Frame *fr, int w, int h) +{ + if (w < fr->minw) w = fr->minw; + if (h < fr->minh) h = fr->minh; + fr->req.w = w; + fr->req.h = h; +} + +static void +_elm_frame_size_req(Elm_Frame *fr, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + edje_extern_object_min_size_set(child->base, + child->req.w, + child->req.h); + edje_object_part_swallow(fr->base , "elm.swallow.content", + child->base); + edje_object_size_min_calc(fr->base, &mw, &mh); + if ((fr->minw != mw) || (fr->minh != mh)) + { + fr->minw = mw; + fr->minh = mh; + ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, mw, mh); + fr->geom_set(fr, fr->x, fr->y, mw, mh); + } + } + else + { + // FIXME: handle + } +} + +static void +_elm_on_child_add(void *data, Elm_Frame *fr, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord mw, mh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + ((Elm_Widget *)(obj))->size_alloc(obj, 0, 0); + ((Elm_Widget *)(obj))->geom_set(obj, + ((Elm_Widget *)(obj))->x, + ((Elm_Widget *)(obj))->y, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_extern_object_min_size_set(((Elm_Widget *)(obj))->base, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_object_part_swallow(fr->base , "elm.swallow.content", + ((Elm_Widget *)(obj))->base); + edje_object_size_min_calc(fr->base, &mw, &mh); + if ((fr->minw != mw) || (fr->minh != mh)) + { + fr->minw = mw; + fr->minh = mh; + ((Elm_Widget *)(fr->parent))->size_req(fr->parent, fr, mw, mh); + fr->geom_set(fr, fr->x, fr->y, mw, mh); + } +} + +static void +_elm_on_child_del(void *data, Elm_Frame *fr, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + // FIXME: allow for removal of child - size down +} + +static void +_elm_frame_del(Elm_Frame *fr) +{ + if (fr->text) evas_stringshare_del(fr->text); + ((Elm_Obj_Class *)(((Elm_Frame_Class *)(fr->clas))->parent))->del(ELM_OBJ(fr)); +} + +EAPI Elm_Frame * +elm_frame_new(Elm_Win *win) +{ + Elm_Frame *fr; + + fr = ELM_NEW(Elm_Frame); + + _elm_widget_init(fr); + fr->clas = &_elm_frame_class; + fr->type = ELM_OBJ_FRAME; + + fr->del = _elm_frame_del; + + fr->size_alloc = _elm_frame_size_alloc; + fr->size_req = _elm_frame_size_req; + + fr->text_set = _elm_frame_text_set; + + fr->base = edje_object_add(win->evas); + _elm_theme_set(fr->base, "frame", "frame"); + fr->cb_add(fr, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + fr->cb_add(fr, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(fr); + win->child_add(win, fr); + return fr; +} diff --git a/legacy/elementary/src/lib/elm_icon.c b/legacy/elementary/src/lib/elm_icon.c new file mode 100644 index 0000000000..37c5ea11e2 --- /dev/null +++ b/legacy/elementary/src/lib/elm_icon.c @@ -0,0 +1,103 @@ +#include +#include "elm_priv.h" + +static void _elm_icon_file_set(Elm_Icon *icon, const char *file, const char *group); +static void _elm_icon_layout_update(Elm_Icon *icon); + +Elm_Icon_Class _elm_icon_class = +{ + &_elm_widget_class, + ELM_OBJ_ICON, + _elm_icon_file_set, + _elm_icon_layout_update +}; + +static void +_elm_icon_file_set(Elm_Icon *icon, const char *file, const char *group) +{ + const char *p; + + if (!file) return; + if (icon->file) evas_stringshare_del(icon->file); + if (file) icon->file = evas_stringshare_add(file); + else icon->file = NULL; + if (icon->group) evas_stringshare_del(icon->group); + if (group) icon->group = evas_stringshare_add(group); + else icon->group = NULL; + if (((p = strrchr(file, '.'))) && (!strcasecmp(p, ".edj"))) + _els_smart_icon_file_edje_set(icon->base, file, group); + else + _els_smart_icon_file_key_set(icon->base, file, group); + icon->layout_update(icon); +} + +static void +_elm_icon_layout_update(Elm_Icon *icon) +{ + _els_smart_icon_scale_up_set(icon->base, icon->scale_up); + _els_smart_icon_scale_down_set(icon->base, icon->scale_down); + _els_smart_icon_smooth_scale_set(icon->base, icon->smooth); + _els_smart_icon_fill_inside_set(icon->base, !(icon->fill_outside)); + if (icon->no_scale) _els_smart_icon_scale_set(icon->base, 1.0); + else _els_smart_icon_scale_set(icon->base, _elm_config->scale); + if ((!icon->scale_down) || (!icon->scale_up)) + ((Elm_Widget *)(icon->parent))->size_req(icon->parent, icon, 0, 0); +} + +static void +_elm_icon_size_alloc(Elm_Icon *icon, int w, int h) +{ + int tw, th; + + _els_smart_icon_size_get(icon->base, &tw, &th); + if (!icon->scale_down) + { + if (w < tw) w = tw; + if (h < th) h = th; + } + if (!icon->scale_up) + { + if (w > tw) w = tw; + if (h > th) h = th; + } + icon->req.w = w; + icon->req.h = h; +} + +static void +_elm_icon_del(Elm_Icon *icon) +{ + if (icon->group) evas_stringshare_del(icon->group); + if (icon->file) evas_stringshare_del(icon->file); + ((Elm_Obj_Class *)(((Elm_Icon_Class *)(icon->clas))->parent))->del(ELM_OBJ(icon)); +} + +EAPI Elm_Icon * +elm_icon_new(Elm_Win *win) +{ + Elm_Icon *icon; + + icon = ELM_NEW(Elm_Icon); + + _elm_widget_init(icon); + icon->clas = &_elm_icon_class; + icon->type = ELM_OBJ_ICON; + + icon->del = _elm_icon_del; + + icon->size_alloc = _elm_icon_size_alloc; + + icon->file_set = _elm_icon_file_set; + icon->layout_update = _elm_icon_layout_update; + + icon->smooth = 1; + icon->scale_up = 1; + icon->scale_down = 1; + + icon->base = _els_smart_icon_add(win->evas); + evas_object_repeat_events_set(icon->base, 1); + + _elm_widget_post_init(icon); + win->child_add(win, icon); + return icon; +} diff --git a/legacy/elementary/src/lib/elm_label.c b/legacy/elementary/src/lib/elm_label.c new file mode 100644 index 0000000000..67bd641345 --- /dev/null +++ b/legacy/elementary/src/lib/elm_label.c @@ -0,0 +1,68 @@ +#include +#include "elm_priv.h" + +static void _elm_label_text_set(Elm_Label *lb, const char *text); + +Elm_Label_Class _elm_label_class = +{ + &_elm_widget_class, + ELM_OBJ_LABEL, + _elm_label_text_set +}; + +static void +_elm_label_text_set(Elm_Label *lb, const char *text) +{ + Evas_Coord mw, mh; + + if (lb->text) evas_stringshare_del(lb->text); + if (text) lb->text = evas_stringshare_add(text); + else lb->text = NULL; + edje_object_part_text_set(lb->base, "elm.text", text); + edje_object_size_min_calc(lb->base, &mw, &mh); + if ((lb->minw != mw) || (lb->minh != mh)) + { + lb->minw = mw; + lb->minh = mh; + ((Elm_Widget *)(lb->parent))->size_req(lb->parent, lb, lb->minw, lb->minh); + lb->geom_set(lb, lb->x, lb->y, lb->minw, lb->minh); + } +} + +static void +_elm_label_size_alloc(Elm_Label *lb, int w, int h) +{ + lb->req.w = lb->minw; + lb->req.h = lb->minh; +} + +static void +_elm_label_del(Elm_Label *lb) +{ + if (lb->text) evas_stringshare_del(lb->text); + ((Elm_Obj_Class *)(((Elm_Label_Class *)(lb->clas))->parent))->del(ELM_OBJ(lb)); +} + +EAPI Elm_Label * +elm_label_new(Elm_Win *win) +{ + Elm_Label *lb; + + lb = ELM_NEW(Elm_Label); + + _elm_widget_init(lb); + lb->clas = &_elm_label_class; + lb->type = ELM_OBJ_LABEL; + + lb->del = _elm_label_del; + + lb->size_alloc = _elm_label_size_alloc; + + lb->text_set = _elm_label_text_set; + + lb->base = edje_object_add(win->evas); + _elm_theme_set(lb->base, "label", "label"); + _elm_widget_post_init(lb); + win->child_add(win, lb); + return lb; +} diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c new file mode 100644 index 0000000000..f919f2ad40 --- /dev/null +++ b/legacy/elementary/src/lib/elm_main.c @@ -0,0 +1,79 @@ +#include +#include "elm_priv.h" + +char *_elm_appname = NULL; +Elm_Config *_elm_config = NULL; + +static int +_elm_signal_exit(void *data, int ev_type, void *ev) +{ + elm_exit(); + return 1; +} + +EAPI void +elm_init(int argc, char **argv) +{ + int i; + + eet_init(); + ecore_init(); + ecore_app_args_set(argc, (const char **)argv); + ecore_file_init(); + evas_init(); + edje_init(); + ecore_evas_init(); // FIXME: check errors + + ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL); + + _elm_appname = strdup(ecore_file_file_get(argv[0])); + + // FIXME: actually load config + _elm_config = ELM_NEW(Elm_Config); + _elm_config->engine = ELM_SOFTWARE_X11; + _elm_config->thumbscroll_enable = 1; + _elm_config->thumbscroll_threshhold = 24; + _elm_config->thumbscroll_momentum_threshhold = 100.0; + _elm_config->thumbscroll_friction = 1.0; + _elm_config->scale = 1.0; + + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { + int val; + + ecore_x_init(NULL); + if (ecore_x_window_prop_card32_get(ecore_x_window_root_first_get(), + ecore_x_atom_get("ENLIGHTENMENT_SCALE"), + &val, 1)) + _elm_config->scale = (double)val / 1000.0; + } + +} + +EAPI void +elm_shutdown(void) +{ + free(_elm_config); + free(_elm_appname); + ecore_evas_shutdown(); + edje_shutdown(); + evas_shutdown(); + ecore_file_shutdown(); + ecore_shutdown(); + eet_shutdown(); +} + +EAPI void +elm_run(void) +{ + ecore_main_loop_begin(); +} + +EAPI void +elm_exit(void) +{ + ecore_main_loop_quit(); +} diff --git a/legacy/elementary/src/lib/elm_obj.c b/legacy/elementary/src/lib/elm_obj.c new file mode 100644 index 0000000000..37639a2aed --- /dev/null +++ b/legacy/elementary/src/lib/elm_obj.c @@ -0,0 +1,177 @@ +#include +#include "elm_priv.h" + +static void _elm_obj_del(Elm_Obj *obj); +static void _elm_obj_ref(Elm_Obj *obj); +static void _elm_obj_unref(Elm_Obj *obj); +static Elm_Cb *_elm_obj_cb_add(Elm_Obj *obj, Elm_Cb_Type type, Elm_Cb_Func func, void *data); +static void _elm_obj_child_add(Elm_Obj *obj, Elm_Obj *child); +static int _elm_obj_hastype(Elm_Obj *obj, Elm_Obj_Type type); + +Elm_Obj_Class _elm_obj_class = +{ + NULL, /* parent */ + ELM_OBJ_OBJ, + _elm_obj_del, + _elm_obj_ref, + _elm_obj_unref, + _elm_obj_cb_add, + _elm_obj_child_add, + +}; + +static int deferred_nest = 0; +static Evas_List *deferred_deletions = NULL; + +static void +_elm_obj_del(Elm_Obj *obj) +{ + if (_elm_obj_del_defer(obj)) return; + _elm_obj_unref(obj); +} + +static void +_elm_obj_ref(Elm_Obj *obj) +{ + obj->ref++; +} + +static void +_elm_obj_unref(Elm_Obj *obj) +{ + obj->ref--; + if (obj->ref > 0) return; + if (!obj->delete_me) + { + obj->del(obj); + return; + } + if (obj->parent) + obj->parent->children = evas_list_remove(obj->parent->children, obj); + while (obj->cbs) + { + ((Elm_Obj *)obj->cbs->data)->parent = NULL; + ((Elm_Obj *)obj->cbs->data)->del(obj->cbs->data); + obj->cbs = evas_list_remove_list(obj->cbs, obj->cbs); + } + while (obj->children) + { + _elm_cb_call(obj, ELM_CB_CHILD_DEL, obj->children->data); + ((Elm_Obj *)obj->children->data)->parent = NULL; + ((Elm_Obj *)obj->children->data)->del(obj->children->data); + obj->children = evas_list_remove_list(obj->children, obj->children); + } + free(obj); +} + +static Elm_Cb * +_elm_obj_cb_add(Elm_Obj *obj, Elm_Cb_Type type, Elm_Cb_Func func, void *data) +{ + Elm_Cb *cb; + + cb = _elm_cb_new(); + cb->cb_type = type; + cb->func = func; + cb->data = data; + cb->parent = obj; + obj->cbs = evas_list_append(obj->cbs, cb); +} + +static void +_elm_obj_child_add(Elm_Obj *obj, Elm_Obj *child) +{ + if (child->parent) child->unparent(child); + obj->children = evas_list_prepend(obj->children, child); + child->parent = obj; + _elm_obj_nest_push(); + _elm_cb_call(obj, ELM_CB_CHILD_ADD, child); + _elm_cb_call(child, ELM_CB_PARENT, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_obj_unparent(Elm_Obj *obj) +{ + Elm_Obj *parent; + + parent = obj->parent; + obj->parent = NULL; + // FIXME: what if we are walking the children when we unparent? + parent->children = evas_list_remove(parent->children, obj); + _elm_obj_nest_push(); + _elm_cb_call(parent, ELM_CB_CHILD_DEL, obj); + _elm_cb_call(obj, ELM_CB_UNPARENT, NULL); + _elm_obj_nest_pop(); +} + +static int +_elm_obj_class_hastype(Elm_Obj_Class *clas, Elm_Obj_Type type) +{ + if (clas->type == type) return 1; + if (!clas->parent) return 0; + return _elm_obj_class_hastype(clas->parent, type); +} + +static int +_elm_obj_hastype(Elm_Obj *obj, Elm_Obj_Type type) +{ + if (obj->type == type) return 1; + if (obj->clas) return _elm_obj_class_hastype(obj->clas, type); + return 0; +} + +void +_elm_obj_init(Elm_Obj *obj) +{ + obj->del = _elm_obj_del; + obj->ref = _elm_obj_ref; + obj->unref = _elm_obj_unref; + obj->cb_add = _elm_obj_cb_add; + obj->child_add = _elm_obj_child_add; + obj->unparent = _elm_obj_unparent; + obj->hastype = _elm_obj_hastype; + obj->type = ELM_OBJ_OBJ; + obj->clas = &_elm_obj_class; + obj->refs = 1; +} + +void +_elm_obj_nest_push(void) +{ + deferred_nest++; +} + +void +_elm_obj_nest_pop(void) +{ + deferred_nest--; + if (deferred_nest > 0) return; + while (deferred_deletions) + { + ((Elm_Obj *)(deferred_deletions->data))->delete_deferred = 0; + ((Elm_Obj *)(deferred_deletions->data))->del(ELM_OBJ(deferred_deletions->data)); + deferred_deletions = evas_list_remove_list(deferred_deletions, deferred_deletions); + } +} + +int +_elm_obj_del_defer(Elm_Obj *obj) +{ + if (obj->delete_deferred) return 1; + if (!obj->delete_me) + { + /* will never be called during a deferred delete */ + obj->delete_me = 1; + _elm_obj_nest_push(); + _elm_cb_call(obj, ELM_CB_DEL, NULL); + _elm_obj_nest_pop(); + } + if (deferred_nest > 0) + { + /* mark to be deleted later */ + obj->delete_deferred = 1; + deferred_deletions = evas_list_append(deferred_deletions, obj); + return 1; + } + return 0; +} diff --git a/legacy/elementary/src/lib/elm_pad.c b/legacy/elementary/src/lib/elm_pad.c new file mode 100644 index 0000000000..0513f4df5e --- /dev/null +++ b/legacy/elementary/src/lib/elm_pad.c @@ -0,0 +1,116 @@ +#include +#include "elm_priv.h" + +Elm_Pad_Class _elm_pad_class = +{ + &_elm_widget_class, + ELM_OBJ_PAD +}; + +static void +_elm_pad_size_alloc(Elm_Pad *pd, int w, int h) +{ + if (w < pd->minw) w = pd->minw; + if (h < pd->minh) h = pd->minh; + pd->req.w = w; + pd->req.h = h; +} + +static void +_elm_pad_size_req(Elm_Pad *pd, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + edje_extern_object_min_size_set(child->base, + child->req.w, + child->req.h); + edje_object_part_swallow(pd->base , "elm.swallow.contents", + child->base); + edje_object_size_min_calc(pd->base, &mw, &mh); + if ((pd->minw != mw) || (pd->minh != mh)) + { + pd->minw = mw; + pd->minh = mh; + ((Elm_Widget *)(pd->parent))->size_req(pd->parent, pd, mw, mh); + pd->geom_set(pd, pd->x, pd->y, mw, mh); + } + } + else + { + // FIXME: handle + } +} + +static void +_elm_on_child_add(void *data, Elm_Pad *pd, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord mw, mh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + ((Elm_Widget *)(obj))->size_alloc(obj, 0, 0); + ((Elm_Widget *)(obj))->geom_set(obj, + ((Elm_Widget *)(obj))->x, + ((Elm_Widget *)(obj))->y, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_extern_object_min_size_set(((Elm_Widget *)(obj))->base, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_object_part_swallow(pd->base , "elm.swallow.content", + ((Elm_Widget *)(obj))->base); + edje_object_size_min_calc(pd->base, &mw, &mh); + if ((pd->minw != mw) || (pd->minh != mh)) + { + pd->minw = mw; + pd->minh = mh; + ((Elm_Widget *)(pd->parent))->size_req(pd->parent, pd, mw, mh); + pd->geom_set(pd, pd->x, pd->y, mw, mh); + } +} + +static void +_elm_on_child_del(void *data, Elm_Pad *pd, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + // FIXME: allow for removal of child - size down +} + +static void +_elm_pad_del(Elm_Pad *pd) +{ + ((Elm_Obj_Class *)(((Elm_Pad_Class *)(pd->clas))->parent))->del(ELM_OBJ(pd)); +} + +EAPI Elm_Pad * +elm_pad_new(Elm_Win *win) +{ + Elm_Pad *pd; + + pd = ELM_NEW(Elm_Pad); + + _elm_widget_init(pd); + pd->clas = &_elm_pad_class; + pd->type = ELM_OBJ_PAD; + + pd->del = _elm_pad_del; + + pd->size_alloc = _elm_pad_size_alloc; + pd->size_req = _elm_pad_size_req; + + pd->base = edje_object_add(win->evas); + _elm_theme_set(pd->base, "pad", "pad"); + pd->cb_add(pd, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + pd->cb_add(pd, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(pd); + win->child_add(win, pd); + return pd; +} diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h new file mode 100644 index 0000000000..377847d164 --- /dev/null +++ b/legacy/elementary/src/lib/elm_priv.h @@ -0,0 +1,64 @@ +#ifndef ELM_PRIV_H +#define ELM_PRIV_H + +#include "els_pan.h" +#include "els_scroller.h" +#include "els_box.h" +#include "els_table.h" +#include "els_icon.h" + +// FIXME: totally disorganised. clean this up! + +typedef enum _Elm_Engine +{ + ELM_SOFTWARE_X11, + ELM_SOFTWARE_FB, + ELM_SOFTWARE_16_X11, + ELM_XRENDER_X11, + ELM_OPENGL_X11 +} Elm_Engine; + +typedef struct _Elm_Config Elm_Config; + +struct _Elm_Config +{ + int engine; + int thumbscroll_enable; + int thumbscroll_threshhold; + double thumbscroll_momentum_threshhold; + double thumbscroll_friction; + double scale; +}; + +#define ELM_NEW(t) calloc(1, sizeof(t)) + +void _elm_obj_init(Elm_Obj *obj); +void _elm_obj_nest_push(void); +void _elm_obj_nest_pop(void); +int _elm_obj_del_defer(Elm_Obj *obj); +Elm_Cb *_elm_cb_new(void); +void _elm_cb_call(Elm_Obj *obj, Elm_Cb_Type, void *info); +int _elm_theme_set(Evas_Object *o, const char *clas, const char *group); +void _elm_widget_init(Elm_Widget *wid); +void _elm_widget_post_init(Elm_Widget *wid); + +extern char *_elm_appname; + +extern Elm_Config *_elm_config; + +extern Elm_Obj_Class _elm_obj_class; +extern Elm_Win_Class _elm_win_class; +extern Elm_Widget_Class _elm_widget_class; +extern Elm_Bg_Class _elm_bg_class; +extern Elm_Scroller_Class _elm_scroller_class; +extern Elm_Label_Class _elm_label_class; +extern Elm_Box_Class _elm_box_class; +extern Elm_Table_Class _elm_table_class; +extern Elm_Button_Class _elm_button_class; +extern Elm_Icon_Class _elm_icon_class; +extern Elm_Toggle_Class _elm_toggle_class; +extern Elm_Clock_Class _elm_clock_class; +extern Elm_Frame_Class _elm_frame_class; +extern Elm_Pad_Class _elm_pad_class; + +#endif diff --git a/legacy/elementary/src/lib/elm_scroller.c b/legacy/elementary/src/lib/elm_scroller.c new file mode 100644 index 0000000000..ce1c567ab0 --- /dev/null +++ b/legacy/elementary/src/lib/elm_scroller.c @@ -0,0 +1,99 @@ +#include +#include "elm_priv.h" + +static void _elm_scroller_del(Elm_Scroller *sc); + +Elm_Scroller_Class _elm_scroller_class = +{ + &_elm_widget_class, + ELM_OBJ_SCROLLER +}; + +static void +_elm_scroller_del(Elm_Scroller *sc) +{ + evas_object_del(sc->scroller_pan); + ((Elm_Obj_Class *)(((Elm_Scroller_Class *)(sc->clas))->parent))->del(ELM_OBJ(sc)); +} + +static void +_elm_scroller_geom_set(Elm_Scroller *sc, int x, int y, int w, int h) +{ + Evas_Coord vw, vh; + + if ((sc->w != w) || (sc->h != h) || (sc->x != x) || (sc->y != y)) + { + Evas_List *l; + int tries = 0; + + ((Elm_Widget_Class *)(((Elm_Scroller_Class *)(sc->clas))->parent))->geom_set(sc, x, y, w, h); + again: + tries++; + elm_smart_scroller_child_viewport_size_get(sc->base, &vw, &vh); + for (l = sc->children; l; l = l->next) + { + if (((Elm_Obj *)(l->data))->hastype(l->data, ELM_OBJ_WIDGET)) + { + ((Elm_Widget *)(l->data))->size_alloc(l->data, vw, vh); + ((Elm_Widget *)(l->data))->geom_set(l->data, + ((Elm_Widget *)(l->data))->x, + ((Elm_Widget *)(l->data))->y, + ((Elm_Widget *)(l->data))->req.w, + ((Elm_Widget *)(l->data))->req.h); +// FIXME: if scrollbars affect viewport size then we get an on/off effect of +// resizing child up and down. we need to find a way to avoid this. this tries +// this is a hack - but works. + if ((tries == 1) && + (((vw == ((Elm_Widget *)(l->data))->req.w) || + (vh == ((Elm_Widget *)(l->data))->req.h)))) goto again; + } + } + } +} + +static void +_elm_on_child_add(void *data, Elm_Scroller *sc, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord vw, vh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + elm_smart_scroller_child_set(sc->base, ((Elm_Widget *)(obj))->base); + elm_smart_scroller_child_viewport_size_get(sc->base, &vw, &vh); + ((Elm_Widget *)(obj))->size_alloc(obj, vw, vh); + ((Elm_Widget *)(obj))->geom_set(obj, + ((Elm_Widget *)(obj))->x, + ((Elm_Widget *)(obj))->y, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); +} + +static void +_elm_on_child_del(void *data, Elm_Scroller *sc, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + elm_smart_scroller_child_set(sc->base, NULL); +} + +EAPI Elm_Scroller * +elm_scroller_new(Elm_Win *win) +{ + Elm_Scroller *sc; + + sc = ELM_NEW(Elm_Scroller); + _elm_widget_init(sc); + + sc->clas = &_elm_scroller_class; + sc->type = ELM_OBJ_SCROLLER; + + sc->del = _elm_scroller_del; + + sc->geom_set = _elm_scroller_geom_set; + + sc->base = elm_smart_scroller_add(win->evas); + + sc->cb_add(sc, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + sc->cb_add(sc, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(sc); + win->child_add(win, sc); + return sc; +} diff --git a/legacy/elementary/src/lib/elm_table.c b/legacy/elementary/src/lib/elm_table.c new file mode 100644 index 0000000000..5478b5bb6f --- /dev/null +++ b/legacy/elementary/src/lib/elm_table.c @@ -0,0 +1,104 @@ +#include +#include "elm_priv.h" + +static void _elm_table_layout_update(Elm_Table *tb); +static void _elm_table_pack(Elm_Table *tb, Elm_Widget *wid, int x, int y, int w, int h); + +Elm_Table_Class _elm_table_class = +{ + &_elm_widget_class, + ELM_OBJ_TABLE, + _elm_table_layout_update, + _elm_table_pack, +}; + +static void +_elm_table_layout_update(Elm_Table *tb) +{ + _els_smart_table_homogenous_set(tb->base, tb->homogenous); +} + +static void +_elm_table_pack(Elm_Table *tb, Elm_Widget *wid, int x, int y, int w, int h) +{ + tb->child_add(tb, wid); + _els_smart_table_pack(tb->base, wid->base, x, y, w, h); +} + +static void +_elm_table_size_alloc(Elm_Table *tb, int w, int h) +{ + Evas_Coord mw, mh; + + _els_smart_table_min_size_get(tb->base, &mw, &mh); + if (w < mw) w = mw; + if (h < mh) h = mh; + tb->req.w = w; + tb->req.h = h; +} + +static void +_elm_table_size_req(Elm_Table *tb, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + _els_smart_table_pack_options_set(child->base, + child->fill_x, child->fill_y, + child->expand_x, child->expand_y, + child->align_x, child->align_y, + child->req.w, child->req.h, + maxx, maxy); + } + else + { + // FIXME: handle. + } + _els_smart_table_min_size_get(tb->base, &mw, &mh); + ((Elm_Widget *)(tb->parent))->size_req(tb->parent, tb, mw, mh); + tb->geom_set(tb, tb->x, tb->y, mw, mh); +} + +static void +_elm_on_child_del(void *data, Elm_Table *tb, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord mw, mh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + _els_smart_table_unpack(((Elm_Widget *)(obj))->base); + ((Elm_Widget *)(tb->parent))->size_req(tb->parent, tb, mw, mh); + tb->geom_set(tb, tb->x, tb->y, mw, mh); +} + +EAPI Elm_Table * +elm_table_new(Elm_Win *win) +{ + Elm_Table *tb; + + tb = ELM_NEW(Elm_Table); + + _elm_widget_init(tb); + tb->clas = &_elm_table_class; + tb->type = ELM_OBJ_TABLE; + + tb->layout_update = _elm_table_layout_update; + tb->pack = _elm_table_pack; + + tb->size_alloc = _elm_table_size_alloc; + tb->size_req = _elm_table_size_req; + + tb->base = _els_smart_table_add(win->evas); + + tb->cb_add(tb, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(tb); + win->child_add(win, tb); + return tb; +} diff --git a/legacy/elementary/src/lib/elm_theme.c b/legacy/elementary/src/lib/elm_theme.c new file mode 100644 index 0000000000..c9b77a5ca5 --- /dev/null +++ b/legacy/elementary/src/lib/elm_theme.c @@ -0,0 +1,13 @@ +#include +#include "elm_priv.h" + +int +_elm_theme_set(Evas_Object *o, const char *clas, const char *group) +{ + char buf[PATH_MAX]; + + // FIXME: actually handle themes for real + snprintf(buf, sizeof(buf), "%s/themes/%s.edj", PACKAGE_DATA_DIR, + "default"); + return edje_object_file_set(o, buf, group); +} diff --git a/legacy/elementary/src/lib/elm_toggle.c b/legacy/elementary/src/lib/elm_toggle.c new file mode 100644 index 0000000000..1e73d20c07 --- /dev/null +++ b/legacy/elementary/src/lib/elm_toggle.c @@ -0,0 +1,210 @@ +#include +#include "elm_priv.h" + +static void _elm_toggle_text_set(Elm_Toggle *tg, const char *text); +static void _elm_toggle_layout_update(Elm_Toggle *tg); +static void _elm_toggle_states_text_set(Elm_Toggle *tg, const char *ontext, const char *offtext); + +Elm_Toggle_Class _elm_toggle_class = +{ + &_elm_widget_class, + ELM_OBJ_TOGGLE, + _elm_toggle_text_set, + _elm_toggle_layout_update, + _elm_toggle_states_text_set +}; + +static void +_elm_toggle_text_set(Elm_Toggle *tg, const char *text) +{ + Evas_Coord mw, mh; + + if (text) + { + edje_object_signal_emit(tg->base, "elm,state,text,visible", "elm"); + edje_object_message_signal_process(tg->base); + } + else + { + edje_object_signal_emit(tg->base, "elm,state,text,hidden", "elm"); + edje_object_message_signal_process(tg->base); + } + edje_object_part_text_set(tg->base, "elm.text", text); + edje_object_size_min_calc(tg->base, &mw, &mh); + if ((tg->minw != mw) || (tg->minh != mh)) + { + tg->minw = mw; + tg->minh = mh; + ((Elm_Widget *)(tg->parent))->size_req(tg->parent, tg, tg->minw, tg->minh); + tg->geom_set(tg, tg->x, tg->y, tg->minw, tg->minh); + } +} + +static void +_elm_toggle_states_text_set(Elm_Toggle *tg, const char *ontext, const char *offtext) +{ + edje_object_part_text_set(tg->base, "elm.ontext", ontext); + edje_object_part_text_set(tg->base, "elm.offtext", offtext); +} + +static void +_elm_toggle_layout_update(Elm_Toggle *tg) +{ + if (tg->state_ptr) tg->state = *(tg->state_ptr); + if (tg->state) + edje_object_signal_emit(tg->base, "elm,state,toggle,on", "elm"); + else + edje_object_signal_emit(tg->base, "elm,state,toggle,off", "elm"); +} + +static void +_elm_toggle_size_alloc(Elm_Toggle *tg, int w, int h) +{ + if (w < tg->minw) w = tg->minw; + if (h < tg->minh) h = tg->minh; + tg->req.w = w; + tg->req.h = h; +} + +static void +_elm_toggle_size_req(Elm_Toggle *tg, Elm_Widget *child, int w, int h) +{ + Evas_Coord mw, mh; + + if (child) + { + Evas_Coord maxx, maxy; + + child->size_alloc(child, 0, 0); + maxx = child->req.w; + maxy = child->req.h; + if (child->expand_x) maxx = 32767; + if (child->expand_y) maxy = 32767; + edje_extern_object_min_size_set(child->base, + child->req.w, + child->req.h); + edje_object_part_swallow(tg->base , "elm.swallow.contents", + child->base); + edje_object_size_min_calc(tg->base, &mw, &mh); + if ((tg->minw != mw) || (tg->minh != mh)) + { + tg->minw = mw; + tg->minh = mh; + ((Elm_Widget *)(tg->parent))->size_req(tg->parent, tg, mw, mh); + tg->geom_set(tg, tg->x, tg->y, mw, mh); + } + } + else + { + // FIXME: handle + } +} + +static void +_elm_on_child_add(void *data, Elm_Toggle *tg, Elm_Cb_Type type, Elm_Obj *obj) +{ + Evas_Coord mw, mh; + + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + edje_object_signal_emit(tg->base, "elm,state,icon,visible", "elm"); + edje_object_message_signal_process(tg->base); + ((Elm_Widget *)(obj))->size_alloc(obj, 0, 0); + ((Elm_Widget *)(obj))->geom_set(obj, + ((Elm_Widget *)(obj))->x, + ((Elm_Widget *)(obj))->y, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_extern_object_min_size_set(((Elm_Widget *)(obj))->base, + ((Elm_Widget *)(obj))->req.w, + ((Elm_Widget *)(obj))->req.h); + edje_object_part_swallow(tg->base , "elm.swallow.contents", + ((Elm_Widget *)(obj))->base); + edje_object_size_min_calc(tg->base, &mw, &mh); + if ((tg->minw != mw) || (tg->minh != mh)) + { + tg->minw = mw; + tg->minh = mh; + ((Elm_Widget *)(tg->parent))->size_req(tg->parent, tg, mw, mh); + tg->geom_set(tg, tg->x, tg->y, mw, mh); + } +} + +static void +_elm_on_child_del(void *data, Elm_Toggle *tg, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + // FIXME: allow for removal of child - size down + edje_object_signal_emit(tg->base, "elm,state,icon,hidden", "elm"); + edje_object_message_signal_process(tg->base); +} + +static void +_elm_toggle_activate(Elm_Toggle *tg) +{ + if (tg->state_ptr) *(tg->state_ptr) = tg->state; + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(tg), ELM_CB_CHANGED, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_signal_toggle_on(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Toggle *tg = data; + + if (tg->state) return; + tg->state = 1; + _elm_toggle_activate(tg); +} + +static void +_elm_signal_toggle_off(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Toggle *tg = data; + + if (!tg->state) return; + tg->state = 0; + _elm_toggle_activate(tg); +} + +static void +_elm_toggle_del(Elm_Toggle *tg) +{ + if (tg->text) evas_stringshare_del(tg->text); + ((Elm_Obj_Class *)(((Elm_Toggle_Class *)(tg->clas))->parent))->del(ELM_OBJ(tg)); +} + +EAPI Elm_Toggle * +elm_toggle_new(Elm_Win *win) +{ + Elm_Toggle *tg; + + tg = ELM_NEW(Elm_Toggle); + + _elm_widget_init(tg); + tg->clas = &_elm_toggle_class; + tg->type = ELM_OBJ_TOGGLE; + + tg->del = _elm_toggle_del; + + tg->size_alloc = _elm_toggle_size_alloc; + tg->size_req = _elm_toggle_size_req; + + tg->text_set = _elm_toggle_text_set; + tg->layout_update = _elm_toggle_layout_update; + tg->states_text_set = _elm_toggle_states_text_set; + + tg->base = edje_object_add(win->evas); + _elm_theme_set(tg->base, "toggle", "toggle"); + edje_object_part_text_set(tg->base, "elm.ontext", "ON"); + edje_object_part_text_set(tg->base, "elm.offtext", "OFF"); + edje_object_signal_callback_add(tg->base, "elm,action,toggle,on", "", + _elm_signal_toggle_on, tg); + edje_object_signal_callback_add(tg->base, "elm,action,toggle,off", "", + _elm_signal_toggle_off, tg); + tg->cb_add(tg, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + tg->cb_add(tg, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + _elm_widget_post_init(tg); + win->child_add(win, tg); + return tg; +} diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c new file mode 100644 index 0000000000..2fddfa8b0f --- /dev/null +++ b/legacy/elementary/src/lib/elm_widget.c @@ -0,0 +1,137 @@ +#include +#include "elm_priv.h" + +static void _elm_widget_geom_set(Elm_Widget *wid, int x, int y, int w, int h); +static void _elm_widget_show(Elm_Widget *wid); +static void _elm_widget_hide(Elm_Widget *wid); +static void _elm_widget_size_alloc(Elm_Widget *wid, int w, int h); +static void _elm_widget_size_req(Elm_Widget *wid, Elm_Widget *child, int w, int h); +static void _elm_widget_del(Elm_Widget *wid); +static void _elm_widget_above(Elm_Widget *wid, Elm_Widget *above); +static void _elm_widget_below(Elm_Widget *wid, Elm_Widget *below); + +Elm_Widget_Class _elm_widget_class = +{ + &_elm_obj_class, /* parent */ + ELM_OBJ_WIDGET, + _elm_widget_geom_set, + _elm_widget_show, + _elm_widget_hide, + _elm_widget_size_alloc, + _elm_widget_size_req, + _elm_widget_above, + _elm_widget_below +}; + +static void +_elm_widget_geom_set(Elm_Widget *wid, int x, int y, int w, int h) +{ + if ((wid->x != x) || (wid->y != y)) + { + wid->x = x; + wid->y = y; + evas_object_move(wid->base, wid->x, wid->y); + } + if ((wid->w != w) || (wid->h != h)) + { + wid->w = w; + wid->h = h; + evas_object_resize(wid->base, wid->w, wid->h); + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(wid), ELM_CB_RESIZE, NULL); + _elm_obj_nest_pop(); + } +} + +static void +_elm_widget_show(Elm_Widget *wid) +{ + evas_object_show(wid->base); +} + +static void +_elm_widget_hide(Elm_Widget *wid) +{ + evas_object_hide(wid->base); +} + +static void +_elm_widget_size_alloc(Elm_Widget *wid, int w, int h) +{ + // FIXME: widget gets to implement min/max etc. size here (indicating + // given the input w, h - what size it is willing to accept, then the + // parent checks and geometry_set()'s the child + wid->req.w = w; + wid->req.h = h; +} + +static void +_elm_widget_size_req(Elm_Widget *wid, Elm_Widget *child, int w, int h) +{ + // FIXME: a child will ask its parent for a requested size if something + // with its sizing setup. this is the call in the parent that will be + // called +} + +static void +_elm_widget_above(Elm_Widget *wid, Elm_Widget *above) +{ + if (above) evas_object_stack_above(wid->base, above->base); + else evas_object_raise(wid->base); +} + +static void +_elm_widget_below(Elm_Widget *wid, Elm_Widget *below) +{ + if (below) evas_object_stack_below(wid->base, below->base); + else evas_object_lower(wid->base); +} + +static void +_elm_widget_del(Elm_Widget *wid) +{ + if (_elm_obj_del_defer(ELM_OBJ(wid))) return; + + evas_object_del(wid->base); + + ((Elm_Obj_Class *)(((Elm_Widget_Class *)(wid->clas))->parent))->del(ELM_OBJ(wid)); +} + +void +_elm_widget_init(Elm_Widget *wid) +{ + _elm_obj_init(ELM_OBJ(wid)); + wid->clas = &_elm_widget_class; + wid->type = ELM_OBJ_WIDGET; + + wid->del = _elm_widget_del; + + wid->geom_set = _elm_widget_geom_set; + wid->show = _elm_widget_show; + wid->hide = _elm_widget_hide; + wid->size_alloc = _elm_widget_size_alloc; + wid->size_req = _elm_widget_size_req; + wid->above = _elm_widget_above; + wid->below = _elm_widget_below; + + wid->align_x = 0.5; + wid->align_y = 0.5; + wid->expand_x = 1; + wid->expand_y = 1; + wid->fill_x = 1; + wid->fill_y = 1; +} + +void +_elm_widget_post_init(Elm_Widget *wid) +{ + if (wid->base) evas_object_data_set(wid->base, "__Elm", wid); +} + +EAPI void +elm_widget_sizing_update(Elm_Widget *wid) +{ + wid->size_alloc(wid, 0, 0); + if (!wid->parent) return; + ((Elm_Widget *)(wid->parent))->size_req(wid->parent, wid, wid->w, wid->h); +} diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c new file mode 100644 index 0000000000..a0c7d185e9 --- /dev/null +++ b/legacy/elementary/src/lib/elm_win.c @@ -0,0 +1,307 @@ +#include +#include "elm_priv.h" + +static void _elm_win_name_set(Elm_Win *win, const char *name); +static void _elm_win_title_set(Elm_Win *win, const char *title); +static void _elm_win_show(Elm_Win *win); +static void _elm_win_hide(Elm_Win *win); +static void _elm_win_del(Elm_Win *win); + +Elm_Win_Class _elm_win_class = +{ + &_elm_obj_class, /* parent */ + ELM_OBJ_WIN, + _elm_win_name_set, + _elm_win_title_set +}; + +static void +_elm_child_eval_job(Elm_Win *win) +{ + Evas_List *l; + int w, h; + int expand_x, expand_y; + + win->deferred_child_eval_job = NULL; + _elm_obj_nest_push(); + w = h = 0; + expand_x = expand_y = 0; + for (l = win->children; l; l = l->next) + { + if (((Elm_Obj *)(l->data))->hastype(l->data, ELM_OBJ_WIDGET)) + { + if (((Elm_Widget *)(l->data))->w > w) w = ((Elm_Widget *)(l->data))->w; + if (((Elm_Widget *)(l->data))->h > h) h = ((Elm_Widget *)(l->data))->h; + if (((Elm_Widget *)(l->data))->expand_x) expand_x = 1; + if (((Elm_Widget *)(l->data))->expand_y) expand_y = 1; + } + } + ecore_evas_size_min_set(win->ee, w, h); + if ((!expand_x) && (!expand_y)) ecore_evas_size_max_set(win->ee, w, h); + else if (!expand_x) ecore_evas_size_max_set(win->ee, w, 32727); + else if (!expand_y) ecore_evas_size_max_set(win->ee, 32767, h); + else ecore_evas_size_max_set(win->ee, 0, 0); + if (w < win->w) w = win->w; + if (h < win->h) h = win->h; + if ((w > win->w) || (h > win->h)) ecore_evas_resize(win->ee, w, h); + if (win->showme) + { + win->showme = 0; + ecore_evas_show(win->ee); + } + _elm_obj_nest_pop(); +} + +static void +_elm_on_child_add(void *data, Elm_Win *win, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job); + win->deferred_child_eval_job = ecore_job_add(_elm_child_eval_job, win); +} + +static void +_elm_on_child_del(void *data, Elm_Win *win, Elm_Cb_Type type, Elm_Obj *obj) +{ + if (!(obj->hastype(obj, ELM_OBJ_WIDGET))) return; + if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job); + win->deferred_child_eval_job = ecore_job_add(_elm_child_eval_job, win); +} + +static void +_elm_win_name_set(Elm_Win *win, const char *name) +{ + if (win->name) evas_stringshare_del(win->name); + win->name = evas_stringshare_add(name); + if (win->ee) ecore_evas_name_class_set(win->ee, win->name, _elm_appname); +} + +static void +_elm_win_title_set(Elm_Win *win, const char *title) +{ + if (win->title) evas_stringshare_del(win->title); + win->title = evas_stringshare_add(title); + if (win->ee) ecore_evas_title_set(win->ee, win->title); +} + +static void +_elm_win_show(Elm_Win *win) +{ + if (win->deferred_child_eval_job) + win->showme = 1; + else + ecore_evas_show(win->ee); +} + +static void +_elm_win_hide(Elm_Win *win) +{ + win->showme = 0; + ecore_evas_hide(win->ee); +} + +static void +_elm_win_type_set(Elm_Win *win, Elm_Win_Type type) +{ + if (win->win_type == type) return; + win->win_type = type; + switch (win->win_type) + { + case ELM_WIN_BASIC: + if (win->xwin) ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_NORMAL); + // FIXME: if child object is a scroll region, then put its child back + break; + case ELM_WIN_DIALOG_BASIC: + if (win->xwin) ecore_x_netwm_window_type_set(win->xwin, ECORE_X_WINDOW_TYPE_DIALOG); + // FIXME: if child object is a scroll region, then put its child back + break; + default: + break; + } +} + +static void +_elm_win_geom_set(Elm_Win *win, int x, int y, int w, int h) +{ + if ((win->w != w) || (win->h != h) || (win->x != x) || (win->y != y)) + { + win->x = x; + win->y = y; + win->w = w; + win->h = h; + ecore_evas_move_resize(win->ee, win->x, win->y, win->w, win->h); + } +} + +static void +_elm_win_size_alloc(Elm_Win *win, int w, int h) +{ + /* this should never be called */ +} + +static void +_elm_win_size_req(Elm_Win *win, Elm_Widget *child, int w, int h) +{ + if (child) + { + if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job); + win->deferred_child_eval_job = ecore_job_add(_elm_child_eval_job, win); + } + else + { + if ((w == win->w) && (h == win->h)) return; + ecore_evas_resize(win->ee, w, h); + } +} + +static void +_elm_win_above(Elm_Win *win, Elm_Widget *above) +{ +} + +static void +_elm_win_below(Elm_Win *win, Elm_Widget *below) +{ +} + +static void +_elm_win_del(Elm_Win *win) +{ + if (_elm_obj_del_defer(ELM_OBJ(win))) return; + if (win->ee) + { + ecore_evas_free(win->ee); + evas_stringshare_del(win->title); + evas_stringshare_del(win->name); + } + if (win->deferred_resize_job) + ecore_job_del(win->deferred_resize_job); + if (win->deferred_child_eval_job) + ecore_job_del(win->deferred_child_eval_job); + ((Elm_Obj_Class *)(((Elm_Win_Class *)(win->clas))->parent))->del(ELM_OBJ(win)); +} + + + +static void +_elm_win_delete_request(Ecore_Evas *ee) +{ + Elm_Win *win = ecore_evas_data_get(ee, "__Elm"); + if (!win) return; + _elm_obj_nest_push(); + _elm_cb_call(ELM_OBJ(win), ELM_CB_DEL_REQ, NULL); + if (win->autodel) win->del(ELM_OBJ(win)); + _elm_obj_nest_pop(); +} + +static void +_elm_win_resize_job(Elm_Win *win) +{ + Evas_List *l; + int w, h; + + win->deferred_resize_job = NULL; + ecore_evas_geometry_get(win->ee, NULL, NULL, &w, &h); + if ((win->w == w) && (win->h == h)) return; + win->w = w; + win->h = h; + /* resize all immediate children if they are widgets or sub-classes */ + _elm_obj_nest_push(); + for (l = win->children; l; l = l->next) + { + if (((Elm_Obj *)(l->data))->hastype(l->data, ELM_OBJ_WIDGET)) + ((Elm_Widget *)(l->data))->geom_set(l->data, 0, 0, win->w, win->h); + } + _elm_cb_call(ELM_OBJ(win), ELM_CB_RESIZE, NULL); + _elm_obj_nest_pop(); +} + +static void +_elm_win_resize(Ecore_Evas *ee) +{ + Elm_Win *win = ecore_evas_data_get(ee, "__Elm"); + if (!win) return; + if (win->deferred_resize_job) ecore_job_del(win->deferred_resize_job); + win->deferred_resize_job = ecore_job_add(_elm_win_resize_job, win); +} + +EAPI Elm_Win * +elm_win_new(void) +{ + Elm_Win *win; + + win = ELM_NEW(Elm_Win); + + _elm_obj_init(ELM_OBJ(win)); + win->clas = &_elm_win_class; + win->type = ELM_OBJ_WIN; + + win->del = _elm_win_del; + + win->geom_set = _elm_win_geom_set; + win->show = _elm_win_show; + win->hide = _elm_win_hide; + win->size_alloc = _elm_win_size_alloc; + win->size_req = _elm_win_size_req; + win->above = _elm_win_above; + win->below = _elm_win_below; + + win->name_set = _elm_win_name_set; + win->title_set = _elm_win_title_set; + + switch (_elm_config->engine) + { + case ELM_SOFTWARE_X11: + win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); + if (win->ee) win->xwin = ecore_evas_software_x11_window_get(win->ee); + break; + case ELM_SOFTWARE_FB: + win->ee = ecore_evas_fb_new(NULL, 0, 1, 1); + ecore_evas_fullscreen_set(win->ee, 1); + break; + case ELM_SOFTWARE_16_X11: + win->ee = ecore_evas_software_x11_16_new(NULL, 0, 0, 0, 1, 1); + if (win->ee) win->xwin = ecore_evas_software_x11_16_window_get(win->ee); + break; + case ELM_XRENDER_X11: + win->ee = ecore_evas_xrender_x11_new(NULL, 0, 0, 0, 1, 1); + if (win->ee) win->xwin = ecore_evas_xrender_x11_window_get(win->ee); + break; + case ELM_OPENGL_X11: + win->ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1); + if (win->ee) win->xwin = ecore_evas_gl_x11_window_get(win->ee); + break; + default: + break; + } + if (!win->ee) + { + printf("ELEMENTARY: Error. Cannot create window.\n"); + win->del(ELM_OBJ(win)); + return NULL; + } + win->type = ELM_WIN_BASIC; + win->name = evas_stringshare_add("default"); + win->title = evas_stringshare_add("Elementary Window"); + + win->evas = ecore_evas_get(win->ee); + ecore_evas_title_set(win->ee, win->title); + ecore_evas_name_class_set(win->ee, win->name, _elm_appname); + ecore_evas_data_set(win->ee, "__Elm", win); + ecore_evas_callback_delete_request_set(win->ee, _elm_win_delete_request); + ecore_evas_callback_resize_set(win->ee, _elm_win_resize); + // FIXME: use elm config for this + evas_image_cache_set(win->evas, 4096 * 1024); + evas_font_cache_set(win->evas, 512 * 1024); + evas_font_path_append(win->evas, "fonts"); +// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_NONE); +// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_AUTO); +// evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_BYTECODE); + edje_frametime_set(1.0 / 30.0); + edje_scale_set(_elm_config->scale); + + win->cb_add(win, ELM_CB_CHILD_ADD, _elm_on_child_add, NULL); + win->cb_add(win, ELM_CB_CHILD_DEL, _elm_on_child_del, NULL); + + return win; +} diff --git a/legacy/elementary/src/lib/els_box.c b/legacy/elementary/src/lib/els_box.c new file mode 100644 index 0000000000..516a7714f9 --- /dev/null +++ b/legacy/elementary/src/lib/els_box.c @@ -0,0 +1,712 @@ +#include +#include "elm_priv.h" + +typedef struct _Smart_Data Smart_Data; +typedef struct _Box_Item Box_Item; + +struct _Smart_Data +{ + Evas_Coord x, y, w, h; + Evas_Object *obj; + Evas_Object *clip; + int frozen; + unsigned char changed : 1; + unsigned char horizontal : 1; + unsigned char homogenous : 1; + Evas_List *items; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; +}; + +struct _Box_Item +{ + Smart_Data *sd; + unsigned char fill_w : 1; + unsigned char fill_h : 1; + unsigned char expand_w : 1; + unsigned char expand_h : 1; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; + Evas_Object *obj; +}; + +/* local subsystem functions */ +static Box_Item *_smart_adopt(Smart_Data *sd, Evas_Object *obj); +static void _smart_disown(Evas_Object *obj); +static void _smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_reconfigure(Smart_Data *sd); +static void _smart_extents_calculate(Smart_Data *sd); + +static void _smart_init(void); +static void _smart_add(Evas_Object *obj); +static void _smart_del(Evas_Object *obj); +static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _smart_show(Evas_Object *obj); +static void _smart_hide(Evas_Object *obj); +static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _smart_clip_set(Evas_Object *obj, Evas_Object *clip); +static void _smart_clip_unset(Evas_Object *obj); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +_els_smart_box_add(Evas *evas) +{ + _smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +int +_els_smart_box_freeze(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + sd->frozen++; + return sd->frozen; +} + +int +_els_smart_box_thaw(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + sd->frozen--; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return sd->frozen; +} + +void +_els_smart_box_orientation_set(Evas_Object *obj, int horizontal) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->horizontal == horizontal) return; + sd->horizontal = horizontal; + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +int +_els_smart_box_orientation_get(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + return sd->horizontal; +} + +void +_els_smart_box_homogenous_set(Evas_Object *obj, int homogenous) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->homogenous == homogenous) return; + sd->homogenous = homogenous; + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +int +_els_smart_box_pack_start(Evas_Object *obj, Evas_Object *child) +{ + Smart_Data *sd; + + if (!child) return 0; + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + _smart_adopt(sd, child); + sd->items = evas_list_prepend(sd->items, child); + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return 0; +} + +int +_els_smart_box_pack_end(Evas_Object *obj, Evas_Object *child) +{ + Smart_Data *sd; + + if (!child) return 0; + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + _smart_adopt(sd, child); + sd->items = evas_list_append(sd->items, child); + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return evas_list_count(sd->items) - 1; +} + +int +_els_smart_box_pack_before(Evas_Object *obj, Evas_Object *child, Evas_Object *before) +{ + Smart_Data *sd; + int i = 0; + Evas_List *l; + + if (!child) return 0; + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + _smart_adopt(sd, child); + sd->items = evas_list_prepend_relative(sd->items, child, before); + for (i = 0, l = sd->items; l; l = l->next, i++) + { + if (l->data == child) break; + } + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return i; +} + +int +_els_smart_box_pack_after(Evas_Object *obj, Evas_Object *child, Evas_Object *after) +{ + Smart_Data *sd; + int i = 0; + Evas_List *l; + + if (!child) return 0; + sd = evas_object_smart_data_get(obj); + if (!sd) return 0; + _smart_adopt(sd, child); + sd->items = evas_list_append_relative(sd->items, child, after); + for (i = 0, l = sd->items; l; l = l->next, i++) + { + if (l->data == child) break; + } + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return i; +} + + +void +_els_smart_box_pack_options_set(Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h) +{ + Box_Item *bi; + + bi = evas_object_data_get(obj, "e_box_data"); + if (!bi) return; + bi->fill_w = fill_w; + bi->fill_h = fill_h; + bi->expand_w = expand_w; + bi->expand_h = expand_h; + bi->align.x = align_x; + bi->align.y = align_y; + bi->min.w = min_w; + bi->min.h = min_h; + bi->max.w = max_w; + bi->max.h = max_h; + bi->sd->changed = 1; + if (bi->sd->frozen <= 0) _smart_reconfigure(bi->sd); +} + +void +_els_smart_box_unpack(Evas_Object *obj) +{ + Box_Item *bi; + Smart_Data *sd; + + if (!obj) return; + bi = evas_object_data_get(obj, "e_box_data"); + if (!bi) return; + sd = bi->sd; + if (!sd) return; + sd->items = evas_list_remove(sd->items, obj); + _smart_disown(obj); + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +void +_els_smart_box_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->changed) _smart_extents_calculate(sd); + if (minw) *minw = sd->min.w; + if (minh) *minh = sd->min.h; +} + +void +_els_smart_box_max_size_get(Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->changed) _smart_extents_calculate(sd); + if (maxw) *maxw = sd->max.w; + if (maxh) *maxh = sd->max.h; +} + +/* local subsystem functions */ +static Box_Item * +_smart_adopt(Smart_Data *sd, Evas_Object *obj) +{ + Box_Item *bi; + + bi = calloc(1, sizeof(Box_Item)); + if (!bi) return NULL; + bi->sd = sd; + bi->obj = obj; + /* defaults */ + bi->fill_w = 0; + bi->fill_h = 0; + bi->expand_w = 0; + bi->expand_h = 0; + bi->align.x = 0.5; + bi->align.y = 0.5; + bi->min.w = 0; + bi->min.h = 0; + bi->max.w = 0; + bi->max.h = 0; + evas_object_clip_set(obj, sd->clip); + evas_object_smart_member_add(obj, bi->sd->obj); + evas_object_data_set(obj, "e_box_data", bi); + evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, + _smart_item_del_hook, NULL); + if ((!evas_object_visible_get(sd->clip)) && + (evas_object_visible_get(sd->obj))) + evas_object_show(sd->clip); + return bi; +} + +static void +_smart_disown(Evas_Object *obj) +{ + Box_Item *bi; + + bi = evas_object_data_get(obj, "e_box_data"); + if (!bi) return; + if (!bi->sd->items) + { + if (evas_object_visible_get(bi->sd->clip)) + evas_object_hide(bi->sd->clip); + } + evas_object_event_callback_del(obj, + EVAS_CALLBACK_FREE, + _smart_item_del_hook); + evas_object_smart_member_del(obj); + evas_object_clip_unset(obj); + evas_object_data_del(obj, "e_box_data"); + free(bi); +} + +static void +_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _els_smart_box_unpack(obj); +} + +static void +_smart_reconfigure(Smart_Data *sd) +{ + Evas_Coord x, y, w, h, xx, yy; + Evas_List *l; + int minw, minh, wdif, hdif; + int count, expand; + + if (!sd->changed) return; + + x = sd->x; + y = sd->y; + w = sd->w; + h = sd->h; + + _smart_extents_calculate(sd); + minw = sd->min.w; + minh = sd->min.h; + count = evas_list_count(sd->items); + expand = 0; + if (w < minw) + { + x = x + ((w - minw) * (1.0 - sd->align.x)); + w = minw; + } + if (h < minh) + { + y = y + ((h - minh) * (1.0 - sd->align.y)); + h = minh; + } + for (l = sd->items; l; l = l->next) + { + Box_Item *bi; + Evas_Object *obj; + + obj = l->data; + bi = evas_object_data_get(obj, "e_box_data"); + if (bi) + { + if (sd->horizontal) + { + if (bi->expand_w) expand++; + } + else + { + if (bi->expand_h) expand++; + } + } + } + if (expand == 0) + { + if (sd->horizontal) + { + x += (double)(w - minw) * sd->align.x; + w = minw; + } + else + { + y += (double)(h - minh) * sd->align.y; + h = minh; + } + } + wdif = w - minw; + hdif = h - minh; + xx = x; + yy = y; + for (l = sd->items; l; l = l->next) + { + Box_Item *bi; + Evas_Object *obj; + + obj = l->data; + bi = evas_object_data_get(obj, "e_box_data"); + if (bi) + { + if (sd->horizontal) + { + if (sd->homogenous) + { + Evas_Coord ww, hh, ow, oh; + + ww = (w / (Evas_Coord)count); + hh = h; + ow = bi->min.w; + if (bi->fill_w) ow = ww; + if ((bi->max.w >= 0) && (bi->max.w < ow)) + ow = bi->max.w; + oh = bi->min.h; + if (bi->fill_h) oh = hh; + if ((bi->max.h >= 0) && (bi->max.h < oh)) + oh = bi->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * bi->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * bi->align.y)); + evas_object_resize(obj, ow, oh); + xx += ww; + } + else + { + Evas_Coord ww, hh, ow, oh; + + ww = bi->min.w; + if ((expand > 0) && (bi->expand_w)) + { + if (expand == 1) ow = wdif; + else ow = (w - minw) / expand; + wdif -= ow; + ww += ow; + } + hh = h; + ow = bi->min.w; + if (bi->fill_w) ow = ww; + if ((bi->max.w >= 0) && (bi->max.w < ow)) ow = bi->max.w; + oh = bi->min.h; + if (bi->fill_h) oh = hh; + if ((bi->max.h >= 0) && (bi->max.h < oh)) oh = bi->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * bi->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * bi->align.y)); + evas_object_resize(obj, ow, oh); + xx += ww; + } + } + else + { + if (sd->homogenous) + { + Evas_Coord ww, hh, ow, oh; + + ww = w; + hh = (h / (Evas_Coord)count); + ow = bi->min.w; + if (bi->fill_w) ow = ww; + if ((bi->max.w >= 0) && (bi->max.w < ow)) ow = bi->max.w; + oh = bi->min.h; + if (bi->fill_h) oh = hh; + if ((bi->max.h >= 0) && (bi->max.h < oh)) oh = bi->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * bi->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * bi->align.y)); + evas_object_resize(obj, ow, oh); + yy += hh; + } + else + { + Evas_Coord ww, hh, ow, oh; + + ww = w; + hh = bi->min.h; + if ((expand > 0) && (bi->expand_h)) + { + if (expand == 1) oh = hdif; + else oh = (h - minh) / expand; + hdif -= oh; + hh += oh; + } + ow = bi->min.w; + if (bi->fill_w) ow = ww; + if ((bi->max.w >= 0) && (bi->max.w < ow)) ow = bi->max.w; + oh = bi->min.h; + if (bi->fill_h) oh = hh; + if ((bi->max.h >= 0) && (bi->max.h < oh)) oh = bi->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * bi->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * bi->align.y)); + evas_object_resize(obj, ow, oh); + yy += hh; + } + } + } + } + sd->changed = 0; +} + +static void +_smart_extents_calculate(Smart_Data *sd) +{ + Evas_List *l; + int minw, minh; + + /* FIXME: need to calc max */ + sd->max.w = -1; /* max < 0 == unlimited */ + sd->max.h = -1; + + minw = 0; + minh = 0; + if (sd->homogenous) + { + for (l = sd->items; l; l = l->next) + { + Box_Item *bi; + Evas_Object *obj; + + obj = l->data; + bi = evas_object_data_get(obj, "e_box_data"); + if (bi) + { + if (minh < bi->min.h) minh = bi->min.h; + if (minw < bi->min.w) minw = bi->min.w; + } + } + if (sd->horizontal) + minw *= evas_list_count(sd->items); + else + minh *= evas_list_count(sd->items); + } + else + { + for (l = sd->items; l; l = l->next) + { + Box_Item *bi; + Evas_Object *obj; + + obj = l->data; + bi = evas_object_data_get(obj, "e_box_data"); + if (bi) + { + if (sd->horizontal) + { + if (minh < bi->min.h) minh = bi->min.h; + minw += bi->min.w; + } + else + { + if (minw < bi->min.w) minw = bi->min.w; + minh += bi->min.h; + } + } + } + } + sd->min.w = minw; + sd->min.h = minh; +} + +static void +_smart_init(void) +{ + if (_e_smart) return; + { + static const Evas_Smart_Class sc = + { + "e_box", + EVAS_SMART_CLASS_VERSION, + _smart_add, + _smart_del, + _smart_move, + _smart_resize, + _smart_show, + _smart_hide, + _smart_color_set, + _smart_clip_set, + _smart_clip_unset, + NULL, + NULL + }; + _e_smart = evas_smart_class_new(&sc); + } +} + +static void +_smart_add(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = calloc(1, sizeof(Smart_Data)); + if (!sd) return; + sd->obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + sd->align.x = 0.5; + sd->align.y = 0.5; + sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_smart_member_add(sd->clip, obj); + evas_object_move(sd->clip, -100004, -100004); + evas_object_resize(sd->clip, 200008, 200008); + evas_object_color_set(sd->clip, 255, 255, 255, 255); + evas_object_smart_data_set(obj, sd); +} + +static void +_smart_del(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + _els_smart_box_freeze(obj); + while (sd->items) + { + Evas_Object *child; + + child = sd->items->data; + _els_smart_box_unpack(child); + } + _els_smart_box_thaw(obj); + evas_object_del(sd->clip); + free(sd); +} + +static void +_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((x == sd->x) && (y == sd->y)) return; + { + Evas_List *l; + Evas_Coord dx, dy; + + dx = x - sd->x; + dy = y - sd->y; + for (l = sd->items; l; l = l->next) + { + Evas_Coord ox, oy; + + evas_object_geometry_get(l->data, &ox, &oy, NULL, NULL); + evas_object_move(l->data, ox + dx, oy + dy); + } + } + sd->x = x; + sd->y = y; +} + +static void +_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((w == sd->w) && (h == sd->h)) return; + sd->w = w; + sd->h = h; + sd->changed = 1; + _smart_reconfigure(sd); +} + +static void +_smart_show(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->items) evas_object_show(sd->clip); +} + +static void +_smart_hide(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_hide(sd->clip); +} + +static void +_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_color_set(sd->clip, r, g, b, a); +} + +static void +_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_set(sd->clip, clip); +} + +static void +_smart_clip_unset(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_unset(sd->clip); +} diff --git a/legacy/elementary/src/lib/els_box.h b/legacy/elementary/src/lib/els_box.h new file mode 100644 index 0000000000..cb185ab59d --- /dev/null +++ b/legacy/elementary/src/lib/els_box.h @@ -0,0 +1,14 @@ +Evas_Object *_els_smart_box_add (Evas *evas); +int _els_smart_box_freeze (Evas_Object *obj); +int _els_smart_box_thaw (Evas_Object *obj); +void _els_smart_box_orientation_set (Evas_Object *obj, int horizontal); +int _els_smart_box_orientation_get (Evas_Object *obj); +void _els_smart_box_homogenous_set (Evas_Object *obj, int homogenous); +int _els_smart_box_pack_start (Evas_Object *obj, Evas_Object *child); +int _els_smart_box_pack_end (Evas_Object *obj, Evas_Object *child); +int _els_smart_box_pack_before (Evas_Object *obj, Evas_Object *child, Evas_Object *before); +int _els_smart_box_pack_after (Evas_Object *obj, Evas_Object *child, Evas_Object *after); +void _els_smart_box_pack_options_set (Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h); +void _els_smart_box_unpack (Evas_Object *obj); +void _els_smart_box_min_size_get (Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); +void _els_smart_box_max_size_get (Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh); diff --git a/legacy/elementary/src/lib/els_icon.c b/legacy/elementary/src/lib/els_icon.c new file mode 100644 index 0000000000..49151b7df5 --- /dev/null +++ b/legacy/elementary/src/lib/els_icon.c @@ -0,0 +1,364 @@ +#include +#include "elm_priv.h" + +typedef struct _Smart_Data Smart_Data; + +struct _Smart_Data +{ + Evas_Coord x, y, w, h; + Evas_Object *obj; + int size; + double scale; + unsigned char fill_inside : 1; + unsigned char scale_up : 1; + unsigned char scale_down : 1; +}; + +/* local subsystem functions */ +static void _smart_reconfigure(Smart_Data *sd); +static void _smart_init(void); +static void _smart_add(Evas_Object *obj); +static void _smart_del(Evas_Object *obj); +static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _smart_show(Evas_Object *obj); +static void _smart_hide(Evas_Object *obj); +static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _smart_clip_unset(Evas_Object *obj); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +_els_smart_icon_add(Evas *evas) +{ + _smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +void +_els_smart_icon_file_key_set(Evas_Object *obj, const char *file, const char *key) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + /* smart code here */ + if (sd->size != 0) + evas_object_image_load_size_set(sd->obj, sd->size, sd->size); + evas_object_image_file_set(sd->obj, file, key); + _smart_reconfigure(sd); +} + +void +_els_smart_icon_file_edje_set(Evas_Object *obj, const char *file, const char *part) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + /* smart code here */ + if (sd->obj) evas_object_del(sd->obj); + sd->obj = edje_object_add(evas_object_evas_get(obj)); + edje_object_file_set(sd->obj, file, part); + evas_object_smart_member_add(sd->obj, obj); + _smart_reconfigure(sd); +} + +void +_els_smart_icon_smooth_scale_set(Evas_Object *obj, int smooth) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (!strcmp(evas_object_type_get(sd->obj), "edje")) + return; + evas_object_image_smooth_scale_set(sd->obj, smooth); +} + +void +_els_smart_icon_size_get(Evas_Object *obj, int *w, int *h) +{ + Smart_Data *sd; + int tw, th; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_image_size_get(sd->obj, &tw, &th); + tw = ((double)tw) * sd->scale; + th = ((double)th) * sd->scale; + if (w) *w = tw; + if (h) *h = th; +} + +void +_els_smart_icon_fill_inside_set(Evas_Object *obj, int fill_inside) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (((sd->fill_inside) && (fill_inside)) || + ((!sd->fill_inside) && (!fill_inside))) return; + sd->fill_inside = fill_inside; + _smart_reconfigure(sd); +} + +void +_els_smart_icon_scale_up_set(Evas_Object *obj, int scale_up) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (((sd->scale_up) && (scale_up)) || + ((!sd->scale_up) && (!scale_up))) return; + sd->scale_up = scale_up; + _smart_reconfigure(sd); +} + +void +_els_smart_icon_scale_down_set(Evas_Object *obj, int scale_down) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (((sd->scale_down) && (scale_down)) || + ((!sd->scale_down) && (!scale_down))) return; + sd->scale_down = scale_down; + _smart_reconfigure(sd); +} + +void +_els_smart_icon_scale_size_set(Evas_Object *obj, int size) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + sd->size = size; + if (!strcmp(evas_object_type_get(sd->obj), "edje")) + return; + evas_object_image_load_size_set(sd->obj, sd->size, sd->size); +} + +void +_els_smart_icon_scale_set(Evas_Object *obj, double scale) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + sd->scale = scale; + _smart_reconfigure(sd); +} + +/* local subsystem globals */ +static void +_smart_reconfigure(Smart_Data *sd) +{ + int iw, ih; + Evas_Coord x, y, w, h; + + if (!sd->obj) return; + if (!strcmp(evas_object_type_get(sd->obj), "edje")) + { + w = sd->w; + h = sd->h; + x = sd->x; + y = sd->y; + evas_object_move(sd->obj, x, y); + evas_object_resize(sd->obj, w, h); + } + else + { + ih = 0; + ih = 0; + evas_object_image_size_get(sd->obj, &iw, &ih); + + iw = ((double)iw) * sd->scale; + ih = ((double)ih) * sd->scale; + + if (iw < 1) iw = 1; + if (ih < 1) ih = 1; + + if (sd->fill_inside) + { + w = sd->w; + h = ((double)ih * w) / (double)iw; + if (h > sd->h) + { + h = sd->h; + w = ((double)iw * h) / (double)ih; + } + } + else + { + w = sd->w; + h = ((double)ih * w) / (double)iw; + if (h < sd->h) + { + h = sd->h; + w = ((double)iw * h) / (double)ih; + } + } + if (!sd->scale_up) + { + if ((w > iw) || (h > ih)) + { + w = iw; + h = ih; + } + } + if (!sd->scale_down) + { + if ((w < iw) || (h < ih)) + { + w = iw; + h = ih; + } + } + x = sd->x + ((sd->w - w) / 2); + y = sd->y + ((sd->h - h) / 2); + evas_object_move(sd->obj, x, y); + evas_object_image_fill_set(sd->obj, 0, 0, w, h); + evas_object_resize(sd->obj, w, h); + } +} + +static void +_smart_init(void) +{ + if (_e_smart) return; + { + static const Evas_Smart_Class sc = + { + "e_icon", + EVAS_SMART_CLASS_VERSION, + _smart_add, + _smart_del, + _smart_move, + _smart_resize, + _smart_show, + _smart_hide, + _smart_color_set, + _smart_clip_set, + _smart_clip_unset, + NULL, + NULL + }; + _e_smart = evas_smart_class_new(&sc); + } +} + +static void +_smart_add(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = calloc(1, sizeof(Smart_Data)); + if (!sd) return; + sd->obj = evas_object_image_add(evas_object_evas_get(obj)); + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + sd->fill_inside = 1; + sd->scale_up = 1; + sd->scale_down = 1; + sd->size = 64; + sd->scale = 1.0; + evas_object_smart_member_add(sd->obj, obj); + evas_object_smart_data_set(obj, sd); +} + +static void +_smart_del(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_del(sd->obj); + free(sd); +} + +static void +_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((sd->x == x) && (sd->y == y)) return; + sd->x = x; + sd->y = y; + _smart_reconfigure(sd); +} + +static void +_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((sd->w == w) && (sd->h == h)) return; + sd->w = w; + sd->h = h; + _smart_reconfigure(sd); +} + +static void +_smart_show(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_show(sd->obj); +} + +static void +_smart_hide(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_hide(sd->obj); +} + +static void +_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_color_set(sd->obj, r, g, b, a); +} + +static void +_smart_clip_set(Evas_Object *obj, Evas_Object * clip) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_set(sd->obj, clip); +} + +static void +_smart_clip_unset(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_unset(sd->obj); +} diff --git a/legacy/elementary/src/lib/els_icon.h b/legacy/elementary/src/lib/els_icon.h new file mode 100644 index 0000000000..74cdb12fe2 --- /dev/null +++ b/legacy/elementary/src/lib/els_icon.h @@ -0,0 +1,10 @@ +Evas_Object *_els_smart_icon_add (Evas *evas); +void _els_smart_icon_file_key_set (Evas_Object *obj, const char *file, const char *key); +void _els_smart_icon_file_edje_set (Evas_Object *obj, const char *file, const char *part); +void _els_smart_icon_smooth_scale_set (Evas_Object *obj, int smooth); +void _els_smart_icon_size_get (Evas_Object *obj, int *w, int *h); +void _els_smart_icon_fill_inside_set (Evas_Object *obj, int fill_inside); +void _els_smart_icon_scale_up_set (Evas_Object *obj, int scale_up); +void _els_smart_icon_scale_down_set (Evas_Object *obj, int scale_down); +void _els_smart_icon_scale_size_set (Evas_Object *obj, int size); +void _els_smart_icon_scale_set (Evas_Object *obj, double scale); diff --git a/legacy/elementary/src/lib/els_pan.c b/legacy/elementary/src/lib/els_pan.c new file mode 100644 index 0000000000..38d46de427 --- /dev/null +++ b/legacy/elementary/src/lib/els_pan.c @@ -0,0 +1,270 @@ +#include +#include "elm_priv.h" + +#define SMART_NAME "elm_pan" +#define API_ENTRY 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 Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +typedef struct _Smart_Data Smart_Data; + +struct _Smart_Data +{ + Evas_Object *smart_obj; + Evas_Object *child_obj; + Evas_Coord x, y, w, h; + Evas_Coord child_w, child_h, px, py; +}; + +/* local subsystem functions */ +static void _smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); + +static void _smart_reconfigure(Smart_Data *sd); +static void _smart_add(Evas_Object *obj); +static void _smart_del(Evas_Object *obj); +static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _smart_show(Evas_Object *obj); +static void _smart_hide(Evas_Object *obj); +static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _smart_clip_unset(Evas_Object *obj); +static void _smart_init(void); + +/* local subsystem globals */ +static Evas_Smart *_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +_elm_smart_pan_add(Evas *evas) +{ + _smart_init(); + return evas_object_smart_add(evas, _smart); +} + +void +_elm_smart_pan_child_set(Evas_Object *obj, Evas_Object *child) +{ + API_ENTRY return; + if (child == sd->child_obj) return; + if (sd->child_obj) + { + evas_object_clip_unset(sd->child_obj); + evas_object_smart_member_del(sd->child_obj); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, _smart_child_del_hook); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_RESIZE, _smart_child_resize_hook); + sd->child_obj = NULL; + } + if (child) + { + Evas_Coord w, h; + int r, g, b, a; + + sd->child_obj = child; + evas_object_smart_member_add(sd->child_obj, sd->smart_obj); + evas_object_geometry_get(sd->child_obj, NULL, NULL, &w, &h); + sd->child_w = w; + sd->child_h = h; + evas_object_event_callback_add(child, EVAS_CALLBACK_FREE, _smart_child_del_hook, sd); + evas_object_event_callback_add(child, EVAS_CALLBACK_RESIZE, _smart_child_resize_hook, sd); + evas_object_color_get(sd->smart_obj, &r, &g, &b, &a); + evas_object_color_set(sd->child_obj, r, g, b, a); + evas_object_clip_set(sd->child_obj, evas_object_clip_get(sd->smart_obj)); + if (evas_object_visible_get(sd->smart_obj)) evas_object_show(sd->child_obj); + else evas_object_hide(sd->child_obj); + _smart_reconfigure(sd); + } + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +Evas_Object * +_elm_smart_pan_child_get(Evas_Object *obj) +{ + API_ENTRY return NULL; + return sd->child_obj; +} + +void +_elm_smart_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + API_ENTRY return; + 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; + _smart_reconfigure(sd); + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +void +_elm_smart_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + API_ENTRY return; + if (x) *x = sd->px; + if (y) *y = sd->py; +} + +void +_elm_smart_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->child_w - sd->w; + else *x = 0; + } + if (y) + { + if (sd->h < sd->child_h) *y = sd->child_h - sd->h; + else *y = 0; + } +} + +void +_elm_smart_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +{ + API_ENTRY return; + if (w) *w = sd->child_w; + if (h) *h = sd->child_h; +} + +/* local subsystem functions */ +static void +_smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Smart_Data *sd; + + sd = data; + sd->child_obj = NULL; + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_smart_child_resize_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Smart_Data *sd; + Evas_Coord w, h; + + 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; + _smart_reconfigure(sd); + } + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_smart_reconfigure(Smart_Data *sd) +{ + evas_object_move(sd->child_obj, sd->x - sd->px, sd->y - sd->py); +} + +static void +_smart_add(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = calloc(1, sizeof(Smart_Data)); + if (!sd) return; + sd->smart_obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + evas_object_smart_data_set(obj, sd); +} + +static void +_smart_del(Evas_Object *obj) +{ + INTERNAL_ENTRY; + _elm_smart_pan_child_set(obj, NULL); + free(sd); +} + +static void +_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + INTERNAL_ENTRY; + sd->x = x; + sd->y = y; + _smart_reconfigure(sd); +} + +static void +_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + INTERNAL_ENTRY; + sd->w = w; + sd->h = h; + _smart_reconfigure(sd); + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_smart_show(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_show(sd->child_obj); +} + +static void +_smart_hide(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_hide(sd->child_obj); +} + +static void +_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + INTERNAL_ENTRY; + evas_object_color_set(sd->child_obj, r, g, b, a); +} + +static void +_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +{ + INTERNAL_ENTRY; + evas_object_clip_set(sd->child_obj, clip); +} + +static void +_smart_clip_unset(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_clip_unset(sd->child_obj); +} + +/* never need to touch this */ + +static void +_smart_init(void) +{ + if (_smart) return; + { + static const Evas_Smart_Class sc = + { + SMART_NAME, + EVAS_SMART_CLASS_VERSION, + _smart_add, + _smart_del, + _smart_move, + _smart_resize, + _smart_show, + _smart_hide, + _smart_color_set, + _smart_clip_set, + _smart_clip_unset, + NULL, + NULL + }; + _smart = evas_smart_class_new(&sc); + } +} + diff --git a/legacy/elementary/src/lib/els_pan.h b/legacy/elementary/src/lib/els_pan.h new file mode 100644 index 0000000000..a2ce00c92d --- /dev/null +++ b/legacy/elementary/src/lib/els_pan.h @@ -0,0 +1,7 @@ +Evas_Object *_elm_smart_pan_add (Evas *evas); +void _elm_smart_pan_child_set (Evas_Object *obj, Evas_Object *child); +Evas_Object *_elm_smart_pan_child_get (Evas_Object *obj); +void _elm_smart_pan_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +void _elm_smart_pan_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +void _elm_smart_pan_max_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +void _elm_smart_pan_child_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); diff --git a/legacy/elementary/src/lib/els_scroller.c b/legacy/elementary/src/lib/els_scroller.c new file mode 100644 index 0000000000..7450d8be01 --- /dev/null +++ b/legacy/elementary/src/lib/els_scroller.c @@ -0,0 +1,1052 @@ +#include +#include "elm_priv.h" + +#define SMART_NAME "elm_scroller" +#define API_ENTRY 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 Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +typedef struct _Smart_Data Smart_Data; + +struct _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; + + Elm_Smart_Scroller_Policy hbar_flags, vbar_flags; + + struct { + Evas_Coord x, y; + Evas_Coord sx, sy; + Evas_Coord dx, dy; + struct { + Evas_Coord x, y; + double timestamp; + } history[20]; + double anim_start; + Ecore_Animator *momentum_animator; + Evas_Coord locked_x, locked_y; + unsigned char now : 1; + unsigned char dragged : 1; + unsigned char dir_x : 1; + unsigned char dir_y : 1; + unsigned char locked : 1; + } down; + + struct { + Evas_Coord w, h; + } child; + struct { + Evas_Coord x, y; + } step, page; + + struct { + void (*set) (Evas_Object *obj, Evas_Coord x, Evas_Coord y); + void (*get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); + void (*max_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); + void (*child_size_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); + } pan_func; + + + unsigned char hbar_visible : 1; + unsigned char vbar_visible : 1; + unsigned char extern_pan : 1; + unsigned char one_dir_at_a_time : 1; +}; + +/* local subsystem functions */ +static void _smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_pan_changed_hook(void *data, Evas_Object *obj, void *event_info); +static void _smart_pan_pan_changed_hook(void *data, Evas_Object *obj, void *event_info); +static void _smart_event_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_event_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static int _smart_momentum_animator(void *data); +static void _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _smart_edje_drag_h(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _smart_scrollbar_read(Smart_Data *sd); +static void _smart_scrollbar_reset(Smart_Data *sd); +static int _smart_scrollbar_bar_h_visibility_adjust(Smart_Data *sd); +static int _smart_scrollbar_bar_v_visibility_adjust(Smart_Data *sd); +static void _smart_scrollbar_bar_visibility_adjust(Smart_Data *sd); +static void _smart_scrollbar_size_adjust(Smart_Data *sd); +static void _smart_reconfigure(Smart_Data *sd); +static void _smart_add(Evas_Object *obj); +static void _smart_del(Evas_Object *obj); +static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _smart_show(Evas_Object *obj); +static void _smart_hide(Evas_Object *obj); +static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _smart_clip_unset(Evas_Object *obj); +static void _smart_init(void); + +/* local subsystem globals */ +static Evas_Smart *_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +elm_smart_scroller_add(Evas *evas) +{ + _smart_init(); + return evas_object_smart_add(evas, _smart); +} + +void +elm_smart_scroller_child_set(Evas_Object *obj, Evas_Object *child) +{ + Evas_Coord w, h; + Evas_Object *o; + + API_ENTRY return; + if (sd->child_obj) + { + _elm_smart_pan_child_set(sd->pan_obj, NULL); + evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, _smart_child_del_hook); + } + + sd->child_obj = child; + if (!child) return; + + if (!sd->pan_obj) + { + o = _elm_smart_pan_add(evas_object_evas_get(obj)); + sd->pan_obj = o; + evas_object_smart_callback_add(o, "changed", _smart_pan_changed_hook, sd); + evas_object_smart_callback_add(o, "pan_changed", _smart_pan_pan_changed_hook, sd); + evas_object_show(o); + edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", o); + } + + sd->pan_func.set = _elm_smart_pan_set; + sd->pan_func.get = _elm_smart_pan_get; + sd->pan_func.max_get = _elm_smart_pan_max_get; + sd->pan_func.child_size_get = _elm_smart_pan_child_size_get; + + evas_object_event_callback_add(child, EVAS_CALLBACK_FREE, _smart_child_del_hook, sd); + _elm_smart_pan_child_set(sd->pan_obj, sd->child_obj); + sd->pan_func.child_size_get(sd->pan_obj, &w, &h); + sd->child.w = w; + sd->child.h = h; + _smart_scrollbar_size_adjust(sd); + _smart_scrollbar_reset(sd); +} + +void +elm_smart_scroller_extern_pan_set(Evas_Object *obj, Evas_Object *pan, + void (*pan_set) (Evas_Object *obj, Evas_Coord x, Evas_Coord y), + void (*pan_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y), + void (*pan_max_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y), + void (*pan_child_size_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)) +{ + API_ENTRY return; + + elm_smart_scroller_child_set(obj, NULL); + if (sd->extern_pan) + { + if (sd->pan_obj) + { + edje_object_part_unswallow(sd->edje_obj, sd->pan_obj); + sd->pan_obj = NULL; + } + } + else + { + if (sd->pan_obj) + { + evas_object_del(sd->pan_obj); + sd->pan_obj = NULL; + } + } + if (!pan) + { + sd->extern_pan = 0; + return; + } + + sd->pan_obj = pan; + sd->pan_func.set = pan_set; + sd->pan_func.get = pan_get; + sd->pan_func.max_get = pan_max_get; + sd->pan_func.child_size_get = pan_child_size_get; + sd->extern_pan = 1; + evas_object_smart_callback_add(sd->pan_obj, "changed", _smart_pan_changed_hook, sd); + evas_object_smart_callback_add(sd->pan_obj, "pan_changed", _smart_pan_pan_changed_hook, sd); + edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", sd->pan_obj); + evas_object_show(sd->pan_obj); +} + +void +elm_smart_scroller_custom_edje_file_set(Evas_Object *obj, char *file, char *group) +{ + API_ENTRY return; + + edje_object_file_set(sd->edje_obj, file, group); + if (sd->pan_obj) + edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", sd->pan_obj); + sd->vbar_visible = !sd->vbar_visible; + sd->hbar_visible = !sd->hbar_visible; + _smart_scrollbar_bar_visibility_adjust(sd); +} + +void +elm_smart_scroller_child_pos_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Evas_Coord mx = 0, my = 0, px, py; + double vx, vy; + + API_ENTRY return; + sd->pan_func.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, "elm.dragable.vbar", 0.0, vy); + edje_object_part_drag_value_set(sd->edje_obj, "elm.dragable.hbar", vx, 0.0); + sd->pan_func.get(sd->pan_obj, &px, &py); + sd->pan_func.set(sd->pan_obj, x, y); + if ((px != x) || (py != y)) + edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); +} + +void +elm_smart_scroller_child_pos_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + API_ENTRY return; + sd->pan_func.get(sd->pan_obj, x, y); +} + +void +elm_smart_scroller_child_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) +{ + Evas_Coord mx = 0, my = 0, cw = 0, ch = 0, px = 0, py = 0, nx, ny; + + API_ENTRY return; + sd->pan_func.max_get(sd->pan_obj, &mx, &my); + sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch); + sd->pan_func.get(sd->pan_obj, &px, &py); + + nx = px; + if (x < px) nx = x; + else if ((x + w) > (px + (cw - mx))) + { + nx = x + w - (cw - mx); + if (nx > x) nx = x; + } + ny = py; + if (y < py) ny = y; + else if ((y + h) > (py + (ch - my))) + { + ny = y + h - (ch - my); + if (ny > y) ny = y; + } + if ((nx == px) && (ny == py)) return; + elm_smart_scroller_child_pos_set(obj, nx, ny); +} + +void +elm_smart_scroller_child_viewport_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +{ + API_ENTRY return; + edje_object_calc_force(sd->edje_obj); + evas_object_geometry_get(sd->pan_obj, NULL, NULL, w, h); +} + +void +elm_smart_scroller_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; + _smart_scrollbar_size_adjust(sd); +} + +void +elm_smart_scroller_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 +elm_smart_scroller_page_size_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + API_ENTRY return; + sd->page.x = x; + sd->page.y = y; + _smart_scrollbar_size_adjust(sd); +} + +void +elm_smart_scroller_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 +elm_smart_scroller_policy_set(Evas_Object *obj, Elm_Smart_Scroller_Policy hbar, Elm_Smart_Scroller_Policy vbar) +{ + API_ENTRY return; + if ((sd->hbar_flags == hbar) && (sd->vbar_flags == vbar)) return; + sd->hbar_flags = hbar; + sd->vbar_flags = vbar; + _smart_scrollbar_size_adjust(sd); +} + +void +elm_smart_scroller_policy_get(Evas_Object *obj, Elm_Smart_Scroller_Policy *hbar, Elm_Smart_Scroller_Policy *vbar) +{ + API_ENTRY return; + if (hbar) *hbar = sd->hbar_flags; + if (vbar) *vbar = sd->vbar_flags; +} + +Evas_Object * +elm_smart_scroller_edje_object_get(Evas_Object *obj) +{ + API_ENTRY return NULL; + return sd->edje_obj; +} + +void +elm_smart_scroller_single_dir_set(Evas_Object *obj, Evas_Bool single_dir) +{ + API_ENTRY return; + sd->one_dir_at_a_time = single_dir; +} + +Evas_Bool +elm_smart_scroller_single_dir_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->one_dir_at_a_time; +} + +/* local subsystem functions */ +static void +_smart_edje_drag_v(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Smart_Data *sd; + + sd = data; + _smart_scrollbar_read(sd); +} + +static void +_smart_edje_drag_h(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Smart_Data *sd; + + sd = data; + _smart_scrollbar_read(sd); +} + +static void +_smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Smart_Data *sd; + + sd = data; + sd->child_obj = NULL; + _smart_scrollbar_size_adjust(sd); + _smart_scrollbar_reset(sd); +} + +static void +_smart_pan_changed_hook(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Coord w, h; + Smart_Data *sd; + + sd = data; + sd->pan_func.child_size_get(sd->pan_obj, &w, &h); + if ((w != sd->child.w) || (h != sd->child.h)) + { + sd->child.w = w; + sd->child.h = h; + _smart_scrollbar_size_adjust(sd); + } +} + +static void +_smart_pan_pan_changed_hook(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Coord x, y; + Smart_Data *sd; + + sd = data; + sd->pan_func.get(sd->pan_obj, &x, &y); + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); +} + +static void +_smart_event_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Wheel *ev; + Smart_Data *sd; + Evas_Coord x = 0, y = 0; + + sd = data; + ev = event_info; + elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); + y += ev->z * sd->step.y; + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); +} + +static void +_smart_event_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev; + Smart_Data *sd; + Evas_Coord x = 0, y = 0; + + sd = data; + ev = event_info; + if (_elm_config->thumbscroll_enable) + { + if (sd->down.momentum_animator) + { + ecore_animator_del(sd->down.momentum_animator); + sd->down.momentum_animator = NULL; + } + if (ev->button == 1) + { + sd->down.now = 1; + sd->down.dragged = 0; + sd->down.dir_x = 0; + sd->down.dir_y = 0; + sd->down.x = ev->canvas.x; + sd->down.y = ev->canvas.y; + elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); + sd->down.sx = x; + sd->down.sy = y; + sd->down.locked = 0; + memset(&(sd->down.history[0]), 0, sizeof(sd->down.history[0]) * 20); + sd->down.history[0].timestamp = ecore_time_get(); + sd->down.history[0].x = ev->canvas.x; + sd->down.history[0].y = ev->canvas.y; + } + } +} + +static int +_smart_momentum_animator(void *data) +{ + Smart_Data *sd; + double t, dt, p; + Evas_Coord x, y, dx, dy; + + sd = data; + t = ecore_time_get(); + dt = t - sd->down.anim_start; + if (dt >= 0.0) + { + dt = dt / _elm_config->thumbscroll_friction; + if (dt > 1.0) dt = 1.0; + p = 1.0 - ((1.0 - dt) * (1.0 - dt) * (1.0 - dt)); + dx = (sd->down.dx * _elm_config->thumbscroll_friction * p); + dy = (sd->down.dy * _elm_config->thumbscroll_friction * p); + x = sd->down.sx - dx; + y = sd->down.sy - dy; + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); + if (dt >= 1.0) + { + sd->down.momentum_animator = NULL; + return 0; + } + } + return 1; +} + +static void +_smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev; + Smart_Data *sd; + Evas_Coord x = 0, y = 0; + + sd = data; + ev = event_info; + if (_elm_config->thumbscroll_enable) + { + if (ev->button == 1) + { + x = ev->canvas.x - sd->down.x; + y = ev->canvas.y - sd->down.y; + if (sd->down.dragged) + { + double t, at, dt; + int i; + Evas_Coord ax, ay, dx, dy, vel; + + t = ecore_time_get(); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + ax = ev->canvas.x; + ay = ev->canvas.y; + at = 0.0; + for (i = 0; i < 20; i++) + { + dt = t - sd->down.history[i].timestamp; + if (dt > 0.2) break; + at += dt; + ax += sd->down.history[i].x; + ay += sd->down.history[i].y; + } + ax /= (i + 1); + ay /= (i + 1); + at /= (i + 1); + at *= 4.0; + dx = ev->canvas.x - ax; + dy = ev->canvas.y - ay; + if (at > 0) + { + vel = sqrt((dx * dx) + (dy * dy)) / at; + if ((_elm_config->thumbscroll_friction > 0.0) && + (vel > _elm_config->thumbscroll_momentum_threshhold)) + { + if (!sd->down.momentum_animator) + sd->down.momentum_animator = ecore_animator_add(_smart_momentum_animator, sd); + sd->down.dx = ((double)dx / at); + sd->down.dy = ((double)dy / at); + sd->down.anim_start = t; + elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); + sd->down.sx = x; + sd->down.sy = y; + } + } + evas_event_feed_hold(e, 0, ev->timestamp, ev->data); + } + sd->down.dragged = 0; + sd->down.now = 0; + } + } +} + +static void +_smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev; + Smart_Data *sd; + Evas_Coord x = 0, y = 0; + + sd = data; + ev = event_info; + if (_elm_config->thumbscroll_enable) + { + if (sd->down.now) + { + memmove(&(sd->down.history[1]), &(sd->down.history[0]), + sizeof(sd->down.history[0]) * 19); + sd->down.history[0].timestamp = ecore_time_get(); + sd->down.history[0].x = ev->cur.canvas.x; + sd->down.history[0].y = ev->cur.canvas.y; + + x = ev->cur.canvas.x - sd->down.x; + if (x < 0) x = -x; + y = ev->cur.canvas.y - sd->down.y; + if (y < 0) y = -y; + if ((sd->one_dir_at_a_time) && + (!sd->down.dir_x) && (!sd->down.dir_y)) + { + if (x > y) + { + if (x > _elm_config->thumbscroll_threshhold) + { + sd->down.dir_x = 1; + sd->down.dir_y = 0; + } + } + else + { + if (y > _elm_config->thumbscroll_threshhold) + { + sd->down.dir_x = 0; + sd->down.dir_y = 1; + } + } + } + if ((sd->down.dragged) || + (((x * x) + (y * y)) > + (_elm_config->thumbscroll_threshhold * + _elm_config->thumbscroll_threshhold))) + { + if (!sd->down.dragged) + evas_event_feed_hold(e, 1, ev->timestamp, ev->data); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + sd->down.dragged = 1; + x = sd->down.sx - (ev->cur.canvas.x - sd->down.x); + y = sd->down.sy - (ev->cur.canvas.y - sd->down.y); + if ((sd->down.dir_x) || (sd->down.dir_y)) + { + if (!sd->down.locked) + { + sd->down.locked_x = x; + sd->down.locked_y = y; + sd->down.locked = 1; + } + if (sd->down.dir_x) y = sd->down.locked_y; + else x = sd->down.locked_x; + } + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); + } + } + } +} + +static void +_smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Key_Down *ev; + Smart_Data *sd; + Evas_Coord x = 0, y = 0, vw = 0, vh = 0, mx = 0, my = 0; + + sd = data; + ev = event_info; + elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); + sd->pan_func.max_get(sd->pan_obj, &mx, &my); + evas_object_geometry_get(sd->pan_obj, NULL, NULL, &vw, &vh); + if (!strcmp(ev->keyname, "Left")) + x -= sd->step.x; + else if (!strcmp(ev->keyname, "Right")) + x += sd->step.x; + else if (!strcmp(ev->keyname, "Up")) + y -= sd->step.y; + else if (!strcmp(ev->keyname, "Home")) + y = 0; + else if (!strcmp(ev->keyname, "End")) + y = my; + else if (!strcmp(ev->keyname, "Down")) + y += sd->step.y; + else if (!strcmp(ev->keyname, "Prior")) + { + if (sd->page.y < 0) + y -= -(sd->page.y * vh) / 100; + else + y -= sd->page.y; + } + else if (!strcmp(ev->keyname, "Next")) + { + if (sd->page.y < 0) + y += -(sd->page.y * vh) / 100; + else + y += sd->page.y; + } + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); +} + +static void +_smart_scrollbar_read(Smart_Data *sd) +{ + Evas_Coord x, y, mx = 0, my = 0, px, py; + double vx, vy; + + edje_object_part_drag_value_get(sd->edje_obj, "elm.dragable.vbar", NULL, &vy); + edje_object_part_drag_value_get(sd->edje_obj, "elm.dragable.hbar", &vx, NULL); + sd->pan_func.max_get(sd->pan_obj, &mx, &my); + x = vx * (double)mx; + y = vy * (double)my; + sd->pan_func.get(sd->pan_obj, &px, &py); + sd->pan_func.set(sd->pan_obj, x, y); + if ((px != x) || (py != y)) + edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); +} + +static void +_smart_scrollbar_reset(Smart_Data *sd) +{ + Evas_Coord px, py; + + edje_object_part_drag_value_set(sd->edje_obj, "elm.dragable.vbar", 0.0, 0.0); + edje_object_part_drag_value_set(sd->edje_obj, "elm.dragable.hbar", 0.0, 0.0); + if ((!sd->child_obj) && (!sd->extern_pan)) + { + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.vbar", 1.0, 1.0); + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.hbar", 1.0, 1.0); + } + sd->pan_func.get(sd->pan_obj, &px, &py); + sd->pan_func.set(sd->pan_obj, 0, 0); + if ((px != 0) || (py != 0)) + edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); +} + +static int +_smart_scrollbar_bar_v_visibility_adjust(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 == ELM_SMART_SCROLLER_POLICY_AUTO) + { + if ((sd->child_obj) || (sd->extern_pan)) + { + 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 == ELM_SMART_SCROLLER_POLICY_OFF) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 0; + } + } + else + { + if (sd->vbar_flags == ELM_SMART_SCROLLER_POLICY_AUTO) + { + if ((sd->child_obj) || (sd->extern_pan)) + { + if (h > vh) + { + scroll_v_vis_change = 1; + sd->vbar_visible = 1; + } + } + } + else if (sd->vbar_flags == ELM_SMART_SCROLLER_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, "elm,action,show,vbar", "elm"); + else + edje_object_signal_emit(sd->edje_obj, "elm,action,hide,vbar", "elm"); + edje_object_message_signal_process(sd->edje_obj); + _smart_scrollbar_size_adjust(sd); + } + return scroll_v_vis_change; +} + +static int +_smart_scrollbar_bar_h_visibility_adjust(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 == ELM_SMART_SCROLLER_POLICY_AUTO) + { + if ((sd->child_obj) || (sd->extern_pan)) + { + 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 == ELM_SMART_SCROLLER_POLICY_OFF) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 0; + } + } + else + { + if (sd->hbar_flags == ELM_SMART_SCROLLER_POLICY_AUTO) + { + if ((sd->child_obj) || (sd->extern_pan)) + { + if (w > vw) + { + scroll_h_vis_change = 1; + sd->hbar_visible = 1; + } + } + } + else if (sd->hbar_flags == ELM_SMART_SCROLLER_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, "elm,action,show,hbar", "elm"); + else + edje_object_signal_emit(sd->edje_obj, "elm,action,hide,hbar", "elm"); + edje_object_message_signal_process(sd->edje_obj); + _smart_scrollbar_size_adjust(sd); + } + return scroll_h_vis_change; +} + +static void +_smart_scrollbar_bar_visibility_adjust(Smart_Data *sd) +{ + int changed = 0; + + changed |= _smart_scrollbar_bar_h_visibility_adjust(sd); + changed |= _smart_scrollbar_bar_v_visibility_adjust(sd); + if (changed) + { + _smart_scrollbar_bar_h_visibility_adjust(sd); + _smart_scrollbar_bar_v_visibility_adjust(sd); + } +} + +static void +_smart_scrollbar_size_adjust(Smart_Data *sd) +{ + if ((sd->child_obj) || (sd->extern_pan)) + { + Evas_Coord x, y, w, h, mx = 0, my = 0, vw = 0, vh = 0, px, py; + double vx, vy, size; + + edje_object_part_geometry_get(sd->edje_obj, "elm.swallow.content", + 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, "elm.dragable.hbar", 0.0, 0.0); + } + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.hbar", 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, "elm.dragable.vbar", 0.0, 0.0); + } + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.vbar", 1.0, size); + + edje_object_part_drag_value_get(sd->edje_obj, "elm.dragable.hbar", &vx, NULL); + edje_object_part_drag_value_get(sd->edje_obj, "elm.dragable.vbar", NULL, &vy); + sd->pan_func.max_get(sd->pan_obj, &mx, &my); + x = vx * mx; + y = vy * my; + + edje_object_part_drag_step_set(sd->edje_obj, "elm.dragable.hbar", (double)sd->step.x / (double)w, 0.0); + edje_object_part_drag_step_set(sd->edje_obj, "elm.dragable.vbar", 0.0, (double)sd->step.y / (double)h); + if (sd->page.x > 0) + edje_object_part_drag_page_set(sd->edje_obj, "elm.dragable.hbar", (double)sd->page.x / (double)w, 0.0); + else + edje_object_part_drag_page_set(sd->edje_obj, "elm.dragable.hbar", -((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, "elm.dragable.vbar", 0.0, (double)sd->page.y / (double)h); + else + edje_object_part_drag_page_set(sd->edje_obj, "elm.dragable.vbar", 0.0, -((double)sd->page.y * ((double)vh / (double)h)) / 100.0); + + sd->pan_func.get(sd->pan_obj, &px, &py); + sd->pan_func.set(sd->pan_obj, x, y); + if ((px != 0) || (py != 0)) + edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); + } + else + { + Evas_Coord px, py; + + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.vbar", 1.0, 1.0); + edje_object_part_drag_size_set(sd->edje_obj, "elm.dragable.hbar", 1.0, 1.0); + sd->pan_func.get(sd->pan_obj, &px, &py); + sd->pan_func.set(sd->pan_obj, 0, 0); + if ((px != 0) || (py != 0)) + edje_object_signal_emit(sd->edje_obj, "elm,action,scroll", "elm"); + } + _smart_scrollbar_bar_visibility_adjust(sd); +} + +static void +_smart_reconfigure(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); + _smart_scrollbar_size_adjust(sd); +} + +static void +_smart_add(Evas_Object *obj) +{ + Smart_Data *sd; + Evas_Object *o; + + sd = calloc(1, sizeof(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 = ELM_SMART_SCROLLER_POLICY_AUTO; + sd->vbar_flags = ELM_SMART_SCROLLER_POLICY_AUTO; + sd->hbar_visible = 1; + sd->vbar_visible = 1; + + evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, _smart_event_key_down, sd); + evas_object_propagate_events_set(obj, 0); + + o = edje_object_add(evas_object_evas_get(obj)); + sd->edje_obj = o; + _elm_theme_set(o, "scroller", "scroller"); + edje_object_signal_callback_add(o, "drag*", "elm.dragable.vbar", _smart_edje_drag_v, sd); + edje_object_signal_callback_add(o, "drag*", "elm.dragable.hbar", _smart_edje_drag_h, sd); + evas_object_smart_member_add(o, obj); + + 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, _smart_event_wheel, sd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _smart_event_mouse_down, sd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _smart_event_mouse_up, sd); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _smart_event_mouse_move, sd); + evas_object_smart_member_add(o, obj); + evas_object_repeat_events_set(o, 1); + + sd->pan_func.set = _elm_smart_pan_set; + sd->pan_func.get = _elm_smart_pan_get; + sd->pan_func.max_get = _elm_smart_pan_max_get; + sd->pan_func.child_size_get = _elm_smart_pan_child_size_get; + + _smart_scrollbar_reset(sd); +} + +static void +_smart_del(Evas_Object *obj) +{ + INTERNAL_ENTRY; + elm_smart_scroller_child_set(obj, NULL); + if (!sd->extern_pan) evas_object_del(sd->pan_obj); + evas_object_del(sd->edje_obj); + evas_object_del(sd->event_obj); + if (sd->down.momentum_animator) ecore_animator_del(sd->down.momentum_animator); + free(sd); +} + +static void +_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + INTERNAL_ENTRY; + sd->x = x; + sd->y = y; + _smart_reconfigure(sd); +} + +static void +_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + INTERNAL_ENTRY; + sd->w = w; + sd->h = h; + _smart_reconfigure(sd); +} + +static void +_smart_show(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_show(sd->edje_obj); + evas_object_show(sd->event_obj); +} + +static void +_smart_hide(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_hide(sd->edje_obj); + evas_object_hide(sd->event_obj); +} + +static void +_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 +_smart_clip_set(Evas_Object *obj, Evas_Object * clip) +{ + INTERNAL_ENTRY; + evas_object_clip_set(sd->edje_obj, clip); + evas_object_clip_set(sd->event_obj, clip); +} + +static void +_smart_clip_unset(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_clip_unset(sd->edje_obj); + evas_object_clip_unset(sd->event_obj); +} + +/* never need to touch this */ + +static void +_smart_init(void) +{ + if (_smart) return; + { + static const Evas_Smart_Class sc = + { + SMART_NAME, + EVAS_SMART_CLASS_VERSION, + _smart_add, + _smart_del, + _smart_move, + _smart_resize, + _smart_show, + _smart_hide, + _smart_color_set, + _smart_clip_set, + _smart_clip_unset, + NULL, + NULL + }; + _smart = evas_smart_class_new(&sc); + } +} + diff --git a/legacy/elementary/src/lib/els_scroller.h b/legacy/elementary/src/lib/els_scroller.h new file mode 100644 index 0000000000..155c5dc92f --- /dev/null +++ b/legacy/elementary/src/lib/els_scroller.h @@ -0,0 +1,25 @@ +typedef enum _Elm_Smart_Scroller_Policy +{ + ELM_SMART_SCROLLER_POLICY_OFF, + ELM_SMART_SCROLLER_POLICY_ON, + ELM_SMART_SCROLLER_POLICY_AUTO +} +Elm_Smart_Scroller_Policy; + +Evas_Object *elm_smart_scroller_add (Evas *evas); +void elm_smart_scroller_child_set (Evas_Object *obj, Evas_Object *child); +void elm_smart_scroller_extern_pan_set (Evas_Object *obj, Evas_Object *pan, void (*pan_set) (Evas_Object *obj, Evas_Coord x, Evas_Coord y), void (*pan_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y), void (*pan_max_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y), void (*pan_child_size_get) (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y)); +void elm_smart_scroller_custom_edje_file_set (Evas_Object *obj, char *file, char *group); +void elm_smart_scroller_child_pos_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +void elm_smart_scroller_child_pos_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +void elm_smart_scroller_child_region_show (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); +void elm_smart_scroller_child_viewport_size_get (Evas_Object *obj, Evas_Coord *w, Evas_Coord *h); +void elm_smart_scroller_step_size_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +void elm_smart_scroller_step_size_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +void elm_smart_scroller_page_size_set (Evas_Object *obj, Evas_Coord x, Evas_Coord y); +void elm_smart_scroller_page_size_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +void elm_smart_scroller_policy_set (Evas_Object *obj, Elm_Smart_Scroller_Policy hbar, Elm_Smart_Scroller_Policy vbar); +void elm_smart_scroller_policy_get (Evas_Object *obj, Elm_Smart_Scroller_Policy *hbar, Elm_Smart_Scroller_Policy *vbar); +Evas_Object *elm_smart_scroller_edje_object_get (Evas_Object *obj); +void elm_smart_scroller_single_dir_set (Evas_Object *obj, Evas_Bool single_dir); +Evas_Bool elm_smart_scroller_single_dir_get (Evas_Object *obj); diff --git a/legacy/elementary/src/lib/els_table.c b/legacy/elementary/src/lib/els_table.c new file mode 100644 index 0000000000..17921bb4dc --- /dev/null +++ b/legacy/elementary/src/lib/els_table.c @@ -0,0 +1,953 @@ +#include +#include "elm_priv.h" + +typedef struct _Smart_Data Smart_Data; +typedef struct _Table_Item Table_Item; + +struct _Smart_Data +{ + Evas_Coord x, y, w, h; + Evas_Object *obj; + Evas_Object *clip; + int frozen; + unsigned char changed : 1; + unsigned char homogenous : 1; + Evas_List *items; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; + struct { + int cols, rows; + } size; +}; + +struct _Table_Item +{ + Smart_Data *sd; + int col, row, colspan, rowspan; + unsigned char fill_w : 1; + unsigned char fill_h : 1; + unsigned char expand_w : 1; + unsigned char expand_h : 1; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; + Evas_Object *obj; +}; + +/* local subsystem functions */ +static Table_Item *_smart_adopt(Smart_Data *sd, Evas_Object *obj); +static void _smart_disown(Evas_Object *obj); +static void _smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _smart_reconfigure(Smart_Data *sd); +static void _smart_extents_calcuate(Smart_Data *sd); + +static void _smart_init(void); +static void _smart_add(Evas_Object *obj); +static void _smart_del(Evas_Object *obj); +static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _smart_show(Evas_Object *obj); +static void _smart_hide(Evas_Object *obj); +static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _smart_clip_set(Evas_Object *obj, Evas_Object *clip); +static void _smart_clip_unset(Evas_Object *obj); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +_els_smart_table_add(Evas *evas) +{ + _smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +int +_els_smart_table_freeze(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + sd->frozen++; + return sd->frozen; +} + +int +_els_smart_table_thaw(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + sd->frozen--; + if (sd->frozen <= 0) _smart_reconfigure(sd); + return sd->frozen; +} + +void +_els_smart_table_homogenous_set(Evas_Object *obj, int homogenous) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->homogenous == homogenous) return; + sd->homogenous = homogenous; + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +void +_els_smart_table_pack(Evas_Object *obj, Evas_Object *child, int col, int row, int colspan, int rowspan) +{ + Smart_Data *sd; + Table_Item *ti; + + sd = evas_object_smart_data_get(obj); + _smart_adopt(sd, child); + sd->items = evas_list_append(sd->items, child); + ti = evas_object_data_get(child, "e_table_data"); + if (ti) + { + ti->col = col; + ti->row = row; + ti->colspan = colspan; + ti->rowspan = rowspan; + if (sd->size.cols < (col + colspan)) sd->size.cols = col + colspan; + if (sd->size.rows < (row + rowspan)) sd->size.rows = row + rowspan; + } + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +void +_els_smart_table_pack_options_set(Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h) +{ + Table_Item *ti; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + ti->fill_w = fill_w; + ti->fill_h = fill_h; + ti->expand_w = expand_w; + ti->expand_h = expand_h; + ti->align.x = align_x; + ti->align.y = align_y; + ti->min.w = min_w; + ti->min.h = min_h; + ti->max.w = max_w; + ti->max.h = max_h; + ti->sd->changed = 1; + if (ti->sd->frozen <= 0) _smart_reconfigure(ti->sd); +} + +void +_els_smart_table_unpack(Evas_Object *obj) +{ + Table_Item *ti; + Smart_Data *sd; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + sd = ti->sd; + sd->items = evas_list_remove(sd->items, obj); + _smart_disown(obj); + sd->changed = 1; + if (sd->frozen <= 0) _smart_reconfigure(sd); +} + +void +_els_smart_table_col_row_size_get(Evas_Object *obj, int *cols, int *rows) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _smart_extents_calcuate(sd); + if (cols) *cols = sd->size.cols; + if (rows) *rows = sd->size.rows; +} + +void +_els_smart_table_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _smart_extents_calcuate(sd); + if (minw) *minw = sd->min.w; + if (minh) *minh = sd->min.h; +} + +void +_els_smart_table_max_size_get(Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _smart_extents_calcuate(sd); + if (maxw) *maxw = sd->max.w; + if (maxh) *maxh = sd->max.h; +} + +/* local subsystem functions */ +static Table_Item * +_smart_adopt(Smart_Data *sd, Evas_Object *obj) +{ + Table_Item *ti; + + ti = calloc(1, sizeof(Table_Item)); + if (!ti) return NULL; + ti->sd = sd; + ti->obj = obj; + /* defaults */ + ti->col = 0; + ti->row = 0; + ti->colspan = 1; + ti->rowspan = 1; + ti->fill_w = 0; + ti->fill_h = 0; + ti->expand_w = 0; + ti->expand_h = 0; + ti->align.x = 0.5; + ti->align.y = 0.5; + ti->min.w = 0; + ti->min.h = 0; + ti->max.w = 0; + ti->max.h = 0; + evas_object_clip_set(obj, sd->clip); + evas_object_stack_above(obj, sd->obj); + evas_object_smart_member_add(obj, ti->sd->obj); + evas_object_data_set(obj, "e_table_data", ti); + evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, + _smart_item_del_hook, NULL); + evas_object_stack_below(obj, sd->obj); + if ((!evas_object_visible_get(sd->clip)) && + (evas_object_visible_get(sd->obj))) + evas_object_show(sd->clip); + return ti; +} + +static void +_smart_disown(Evas_Object *obj) +{ + Table_Item *ti; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + if (!ti->sd->items) + { + if (evas_object_visible_get(ti->sd->clip)) + evas_object_hide(ti->sd->clip); + } + evas_object_event_callback_del(obj, + EVAS_CALLBACK_FREE, + _smart_item_del_hook); + evas_object_smart_member_del(obj); + evas_object_data_del(obj, "e_table_data"); + free(ti); +} + +static void +_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _els_smart_table_unpack(obj); +} + +static void +_smart_reconfigure(Smart_Data *sd) +{ + Evas_Coord x, y, w, h, xx, yy; + Evas_List *l; + int minw, minh, expandw, expandh; + + if (!sd->changed) return; + + x = sd->x; + y = sd->y; + w = sd->w; + h = sd->h; + + _smart_extents_calcuate(sd); + + minw = sd->min.w; + minh = sd->min.h; + expandw = 0; + expandh = 0; + if (w < minw) + { + x = x + ((w - minw) * (1.0 - sd->align.x)); + w = minw; + } + if (h < minh) + { + y = y + ((h - minh) * (1.0 - sd->align.y)); + h = minh; + } + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (ti->expand_w) expandw++; + if (ti->expand_h) expandh++; + } + if (expandw == 0) + { + x += (w - minw) / 2; + w = minw; + } + if (expandh == 0) + { + y += (h - minh) / 2; + h = minh; + } + x = sd->x; + y = sd->y; + if (sd->homogenous) + { + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + Evas_Coord ww, hh, ow, oh; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + + xx = x + ((ti->col) * (w / (Evas_Coord)sd->size.cols)); + yy = y + ((ti->row) * (h / (Evas_Coord)sd->size.rows)); + ww = ((w / (Evas_Coord)sd->size.cols) * (ti->colspan)); + hh = ((h / (Evas_Coord)sd->size.rows) * (ti->rowspan)); + ow = ti->min.w; + if (ti->expand_w) ow = ww; + if ((ti->max.w >= 0) && (ti->max.w < ow)) ow = ti->max.w; + oh = ti->min.h; + if (ti->expand_h) oh = hh; + if ((ti->max.h >= 0) && (ti->max.h < oh)) oh = ti->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * ti->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * ti->align.y)); + evas_object_resize(obj, ow, oh); + } + } + else + { + int i, ex, tot, need, num, dif, left, nx; + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (sd->size.cols < (ti->col + ti->colspan)) + sd->size.cols = ti->col + ti->colspan; + if (sd->size.rows < (ti->row + ti->rowspan)) + sd->size.rows = ti->row + ti->rowspan; + } + if ((sd->size.cols > 0) && (sd->size.rows > 0)) + { + int *cols, *rows, *colsx, *rowsx; + + cols = calloc(sd->size.cols, sizeof(int)); + rows = calloc(sd->size.rows, sizeof(int)); + colsx = calloc(sd->size.cols, sizeof(int)); + rowsx = calloc(sd->size.rows, sizeof(int)); + + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + for (i = ti->col; i < (ti->col + ti->colspan); i++) + colsx[i] |= ti->expand_w; + for (i = ti->row; i < (ti->row + ti->rowspan); i++) + rowsx[i] |= ti->expand_h; + } + + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + + /* handle horizontal */ + ex = 0; + tot = 0; + num = ti->colspan; + for (i = ti->col; i < (ti->col + num); i++) + { + if (colsx[i]) ex++; + tot += cols[i]; + } + need = ti->min.w; + if (tot < need) + { + dif = need - tot; + left = dif; + if (ex == 0) + { + nx = num; + for (i = ti->col; i < (ti->col + num); i++) + { + if (nx > 1) + { + cols[i] += dif / num; + left -= dif / num; + } + else + { + cols[i] += left; + left = 0; + } + nx--; + } + } + else + { + nx = ex; + for (i = ti->col; i < (ti->col + num); i++) + { + if (colsx[i]) + { + if (nx > 1) + { + cols[i] += dif / ex; + left -= dif / ex; + } + else + { + cols[i] += left; + left = 0; + } + nx--; + } + } + } + } + + /* handle vertical */ + ex = 0; + tot = 0; + num = ti->rowspan; + for (i = ti->row; i < (ti->row + num); i++) + { + if (rowsx[i]) ex++; + tot += rows[i]; + } + need = ti->min.h; + if (tot < need) + { + dif = need - tot; + left = dif; + if (ex == 0) + { + nx = num; + for (i = ti->row; i < (ti->row + num); i++) + { + if (nx > 1) + { + rows[i] += dif / num; + left -= dif / num; + } + else + { + rows[i] += left; + left = 0; + } + nx--; + } + } + else + { + nx = ex; + for (i = ti->row; i < (ti->row + num); i++) + { + if (rowsx[i]) + { + if (nx > 1) + { + rows[i] += dif / ex; + left -= dif / ex; + } + else + { + rows[i] += left; + left = 0; + } + nx--; + } + } + } + } + } + + ex = 0; + for (i = 0; i < sd->size.cols; i++) { if (colsx[i]) ex++; } + tot = 0; + for (i = 0; i < sd->size.cols; i++) tot += cols[i]; + dif = w - tot; + if ((ex > 0) && (dif > 0)) + { + int exl; + + left = dif; + exl = ex; + for (i = 0; i < sd->size.cols; i++) + { + if (colsx[i]) + { + if (exl == 1) + { + cols[i] += left; + exl--; + left = 0; + } + else + { + cols[i] += dif / ex; + exl--; + left -= dif / ex; + } + } + } + } + + ex = 0; + for (i = 0; i < sd->size.rows; i++) { if (rowsx[i]) ex++; } + tot = 0; + for (i = 0; i < sd->size.rows; i++) tot += rows[i]; + dif = h - tot; + if ((ex > 0) && (dif > 0)) + { + int exl; + + left = dif; + exl = ex; + for (i = 0; i < sd->size.rows; i++) + { + if (rowsx[i]) + { + if (exl == 1) + { + rows[i] += left; + exl--; + left = 0; + } + else + { + rows[i] += dif / ex; + exl--; + left -= dif / ex; + } + } + } + } + + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + Evas_Coord ww, hh, ow, oh, i; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + + xx = x; + for (i = 0; i < ti->col; i++) xx += cols[i]; + ww = 0; + for (i = ti->col; i < (ti->col + ti->colspan); i++) ww += cols[i]; + yy = y; + for (i = 0; i < ti->row; i++) yy += rows[i]; + hh = 0; + for (i = ti->row; i < (ti->row + ti->rowspan); i++) hh += rows[i]; + + ow = ti->min.w; + if (ti->fill_w) ow = ww; + if ((ti->max.w >= 0) && (ti->max.w < ow)) ow = ti->max.w; + oh = ti->min.h; + if (ti->fill_h) oh = hh; + if ((ti->max.h >= 0) && (ti->max.h < oh)) oh = ti->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * ti->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * ti->align.y)); + evas_object_resize(obj, ow, oh); + } + free(rows); + free(cols); + free(rowsx); + free(colsx); + } + } + sd->changed = 0; +} + +static void +_smart_extents_calcuate(Smart_Data *sd) +{ + Evas_List *l; + int minw, minh; + + sd->max.w = -1; /* max < 0 == unlimited */ + sd->max.h = -1; + sd->size.cols = 0; + sd->size.rows = 0; + + minw = 0; + minh = 0; + if (sd->homogenous) + { + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + int mw, mh; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (sd->size.cols < (ti->col + ti->colspan)) + sd->size.cols = ti->col + ti->colspan; + if (sd->size.rows < (ti->row + ti->rowspan)) + sd->size.rows = ti->row + ti->rowspan; + mw = (ti->min.w + (ti->colspan - 1)) / ti->colspan; + mh = (ti->min.h + (ti->rowspan - 1)) / ti->rowspan; + if (minw < mw) minw = mw; + if (minh < mh) minh = mh; + } + minw *= sd->size.cols; + minh *= sd->size.rows; + } + else + { + int i, ex, tot, need, num, dif, left, nx; + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (sd->size.cols < (ti->col + ti->colspan)) + sd->size.cols = ti->col + ti->colspan; + if (sd->size.rows < (ti->row + ti->rowspan)) + sd->size.rows = ti->row + ti->rowspan; + } + if ((sd->size.cols > 0) && (sd->size.rows > 0)) + { + int *cols, *rows, *colsx, *rowsx; + + cols = calloc(sd->size.cols, sizeof(int)); + rows = calloc(sd->size.rows, sizeof(int)); + colsx = calloc(sd->size.cols, sizeof(int)); + rowsx = calloc(sd->size.rows, sizeof(int)); + + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + for (i = ti->col; i < (ti->col + ti->colspan); i++) + colsx[i] |= ti->expand_w; + for (i = ti->row; i < (ti->row + ti->rowspan); i++) + rowsx[i] |= ti->expand_h; + } + + for (l = sd->items; l; l = l->next) + { + Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + + /* handle horizontal */ + ex = 0; + tot = 0; + num = ti->colspan; + for (i = ti->col; i < (ti->col + num); i++) + { + if (colsx[i]) ex++; + tot += cols[i]; + } + need = ti->min.w; + if (tot < need) + { + dif = need - tot; + left = dif; + if (ex == 0) + { + nx = num; + for (i = ti->col; i < (ti->col + num); i++) + { + if (nx > 1) + { + cols[i] += dif / num; + left -= dif / num; + } + else + { + cols[i] += left; + left = 0; + } + nx--; + } + } + else + { + nx = ex; + for (i = ti->col; i < (ti->col + num); i++) + { + if (colsx[i]) + { + if (nx > 1) + { + cols[i] += dif / ex; + left -= dif / ex; + } + else + { + cols[i] += left; + left = 0; + } + nx--; + } + } + } + } + + /* handle vertical */ + ex = 0; + tot = 0; + num = ti->rowspan; + for (i = ti->row; i < (ti->row + num); i++) + { + if (rowsx[i]) ex++; + tot += rows[i]; + } + need = ti->min.h; + if (tot < need) + { + dif = need - tot; + left = dif; + if (ex == 0) + { + nx = num; + for (i = ti->row; i < (ti->row + num); i++) + { + if (nx > 1) + { + rows[i] += dif / num; + left -= dif / num; + } + else + { + rows[i] += left; + left = 0; + } + nx--; + } + } + else + { + nx = ex; + for (i = ti->row; i < (ti->row + num); i++) + { + if (rowsx[i]) + { + if (nx > 1) + { + rows[i] += dif / ex; + left -= dif / ex; + } + else + { + rows[i] += left; + left = 0; + } + nx--; + } + } + } + } + } + for (i = 0; i < sd->size.cols; i++) minw += cols[i]; + for (i = 0; i < sd->size.rows; i++) minh += rows[i]; + free(rows); + free(cols); + free(rowsx); + free(colsx); + } + } + sd->min.w = minw; + sd->min.h = minh; +} + +static void +_smart_init(void) +{ + if (_e_smart) return; + { + static const Evas_Smart_Class sc = + { + "e_table", + EVAS_SMART_CLASS_VERSION, + _smart_add, + _smart_del, + _smart_move, + _smart_resize, + _smart_show, + _smart_hide, + _smart_color_set, + _smart_clip_set, + _smart_clip_unset, + NULL, + NULL + }; + _e_smart = evas_smart_class_new(&sc); + } +} + +static void +_smart_add(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = calloc(1, sizeof(Smart_Data)); + if (!sd) return; + sd->obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_smart_member_add(sd->clip, obj); + evas_object_move(sd->clip, -100002, -100002); + evas_object_resize(sd->clip, 200004, 200004); + evas_object_color_set(sd->clip, 255, 255, 255, 255); + evas_object_smart_data_set(obj, sd); +} + +static void +_smart_del(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + _els_smart_table_freeze(obj); + while (sd->items) + { + Evas_Object *child; + + child = sd->items->data; + _els_smart_table_unpack(child); + } + _els_smart_table_thaw(obj); + evas_object_del(sd->clip); + free(sd); +} + +static void +_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((x == sd->x) && (y == sd->y)) return; + if ((x == sd->x) && (y == sd->y)) return; + { + Evas_List *l; + Evas_Coord dx, dy; + + dx = x - sd->x; + dy = y - sd->y; + for (l = sd->items; l; l = l->next) + { + Evas_Coord ox, oy; + + evas_object_geometry_get(l->data, &ox, &oy, NULL, NULL); + evas_object_move(l->data, ox + dx, oy + dy); + } + } + sd->x = x; + sd->y = y; +} + +static void +_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((w == sd->w) && (h == sd->h)) return; + sd->w = w; + sd->h = h; + sd->changed = 1; + _smart_reconfigure(sd); +} + +static void +_smart_show(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->items) evas_object_show(sd->clip); +} + +static void +_smart_hide(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_hide(sd->clip); +} + +static void +_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_color_set(sd->clip, r, g, b, a); +} + +static void +_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_set(sd->clip, clip); +} + +static void +_smart_clip_unset(Evas_Object *obj) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_unset(sd->clip); +} diff --git a/legacy/elementary/src/lib/els_table.h b/legacy/elementary/src/lib/els_table.h new file mode 100644 index 0000000000..c760b36fe4 --- /dev/null +++ b/legacy/elementary/src/lib/els_table.h @@ -0,0 +1,10 @@ +Evas_Object *_els_smart_table_add (Evas *evas); +int _els_smart_table_freeze (Evas_Object *obj); +int _els_smart_table_thaw (Evas_Object *obj); +void _els_smart_table_homogenous_set (Evas_Object *obj, int homogenous); +void _els_smart_table_pack (Evas_Object *obj, Evas_Object *child, int col, int row, int colspan, int rowspan); +void _els_smart_table_pack_options_set (Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h); +void _els_smart_table_unpack (Evas_Object *obj); +void _els_smart_table_col_row_size_get (Evas_Object *obj, int *cols, int *rows); +void _els_smart_table_min_size_get (Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); +void _els_smart_table_max_size_get (Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh);