Python-EFL: 5 new tests about Focus.

Also add some missed values to Elm_Object_Focus_Direction enum.
This commit is contained in:
Davide Andreoli 2013-12-16 20:51:26 +01:00
parent 6db1f9d0d6
commit 9089706286
6 changed files with 1023 additions and 0 deletions

View File

@ -145,6 +145,10 @@ cdef extern from "Elementary.h":
ctypedef enum Elm_Focus_Direction:
ELM_FOCUS_PREVIOUS
ELM_FOCUS_NEXT
ELM_FOCUS_UP
ELM_FOCUS_DOWN
ELM_FOCUS_RIGHT
ELM_FOCUS_LEFT
ctypedef enum Elm_Genlist_Item_Type:
ELM_GENLIST_ITEM_NONE

View File

@ -78,6 +78,29 @@ Focus direction
Focus next
.. data:: ELM_FOCUS_UP
Focus up
.. versionadded:: 1.8.1
.. data:: ELM_FOCUS_DOWN
Focus down
.. versionadded:: 1.8.1
.. data:: ELM_FOCUS_RIGHT
Focus right
.. versionadded:: 1.8.1
.. data:: ELM_FOCUS_LEFT
Focus left
.. versionadded:: 1.8.1
.. _Elm_Input_Event_Type:
@ -221,6 +244,10 @@ cimport enums
ELM_FOCUS_PREVIOUS = enums.ELM_FOCUS_PREVIOUS
ELM_FOCUS_NEXT = enums.ELM_FOCUS_NEXT
ELM_FOCUS_UP = enums.ELM_FOCUS_UP
ELM_FOCUS_DOWN = enums.ELM_FOCUS_DOWN
ELM_FOCUS_RIGHT = enums.ELM_FOCUS_RIGHT
ELM_FOCUS_LEFT = enums.ELM_FOCUS_LEFT
EVAS_CALLBACK_KEY_DOWN = evasenums.EVAS_CALLBACK_KEY_DOWN
EVAS_CALLBACK_KEY_UP = evasenums.EVAS_CALLBACK_KEY_UP

View File

@ -113,6 +113,13 @@ items = [
("Entry Scrolled", "test_entry", "entry_scrolled_clicked"),
("Entry Anchor", "test_entry", "entry_anchor_clicked"),
("MultiButtonEntry", "test_multibuttonentry", "multibuttonentry_clicked"),
]),
("Focus", [
("Focus", "test_focus", "focus_clicked"),
("Focus 2", "test_focus", "focus2_clicked"),
("Focus 3", "test_focus", "focus3_clicked"),
("Focus 4", "test_focus", "focus4_clicked"),
("Focus Custom", "test_focus", "focus5_clicked"),
]),
("Geographic", [
("Map", "test_map", "map_clicked"),

View File

@ -0,0 +1,596 @@
#!/usr/bin/env python
# encoding: utf-8
import os
from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
from efl import elementary
from efl import edje
from efl.elementary.window import StandardWindow
from efl.elementary.box import Box
from efl.elementary.bubble import Bubble
from efl.elementary.button import Button
from efl.elementary.label import Label
from efl.elementary.layout import Layout
from efl.elementary.list import List
from efl.elementary.frame import Frame
from efl.elementary.separator import Separator
from efl.elementary.scroller import Scroller
from efl.elementary.spinner import Spinner
from efl.elementary.check import Check
from efl.elementary.entry import Entry
from efl.elementary.table import Table
from efl.elementary.toolbar import Toolbar, ELM_TOOLBAR_SHRINK_MENU
from efl.elementary.object import ELM_FOCUS_DOWN, ELM_FOCUS_UP
from efl.elementary.configuration import Configuration
from efl.elementary.theme import theme_overlay_add
EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
EXPAND_HORIZ = EVAS_HINT_EXPAND, 0.0
FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
FILL_HORIZ = EVAS_HINT_FILL, 0.5
script_path = os.path.dirname(os.path.abspath(__file__))
edj_file = os.path.join(script_path, "test.edj")
conf = Configuration()
# Focus
def _tb_sel(tb, item):
print(item)
print(item.text)
def focus_clicked(obj, item=None):
win = StandardWindow("focus", "Focus", autodel=True, size=(800,600))
win.focus_highlight_enabled = True
tbx = Box(win, size_hint_weight=EXPAND_BOTH)
win.resize_object_add(tbx)
tbx.show()
### Toolbar
tbar = Toolbar(win, shrink_mode=ELM_TOOLBAR_SHRINK_MENU,
size_hint_align=(EVAS_HINT_FILL,0.0))
tb_it = tbar.item_append("document-print", "Hello", _tb_sel)
tb_it.disabled = True
tb_it = tbar.item_append("folder-new", "World", _tb_sel)
tb_it = tbar.item_append("object-rotate-right", "H", _tb_sel)
tb_it = tbar.item_append("mail-send", "Comes", _tb_sel)
tb_it = tbar.item_append("clock", "Elementary", _tb_sel)
tb_it = tbar.item_append("refresh", "Menu", _tb_sel)
tb_it.menu = True
tbar.menu_parent = win
menu = tb_it.menu
menu.item_add(None, "Shrink", "edit-cut", _tb_sel)
menu_it = menu.item_add(None, "Mode", "edit-copy", _tb_sel)
menu.item_add(menu_it, "is set to", "edit-paste", _tb_sel)
menu.item_add(menu_it, "or to", "edit-paste", _tb_sel)
menu.item_add(None, "Menu", "edit-delete", _tb_sel)
tbx.pack_end(tbar)
tbar.show()
mainbx = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
tbx.pack_end(mainbx)
mainbx.show()
## First Col
bx = Box(win, size_hint_weight=EXPAND_BOTH)
mainbx.pack_end(bx)
bx.show()
lb = Label(win, text="<b>Use Tab or Shift+Tab<br/>or Arrow keys</b>",
size_hint_align=FILL_BOTH)
bx.pack_end(lb)
lb.show()
tg = Check(win, style="toggle")
tg.part_text_set("on", "Yes")
tg.part_text_set("off", "No")
bx.pack_end(tg)
tg.show()
en = Entry(win, scrollable=True, single_line=True, text="This is a single line",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bx.pack_end(en)
en.show()
#
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
bx.pack_end(bx2)
bx2.show()
for i in range(2):
bt = Button(win, text="Box", size_hint_align=FILL_BOTH, disabled=(i % 2))
bx2.pack_end(bt)
bt.show()
sc = Scroller(win, bounce=(True,True), content_min_limit=(1,1),
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(sc)
sc.show()
bt = Button(win, text="Scroller", size_hint_align=FILL_BOTH)
sc.content = bt
bt.show()
#
bt = Button(win, text="Box", size_hint_align=FILL_BOTH)
bx.pack_end(bt)
bt.show()
#
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
bx.pack_end(bx2)
bx2.show()
for i in range(2):
bx3 = Box(win, size_hint_align=FILL_BOTH)
bx2.pack_end(bx3)
bx3.show()
for j in range(3):
bt = Button(win, text="Box", size_hint_align=FILL_BOTH)
bx3.pack_end(bt)
bt.show()
sc = Scroller(win, bounce=(False, True), content_min_limit=(1,0),
size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
sc.content_min_limit=(1,1)
bx2.pack_end(sc)
sc.show()
bx3 = Box(win, size_hint_align=FILL_BOTH)
sc.content = bx3
bx3.show()
for i in range(5):
bt = Button(win, text="BX Scroller", size_hint_align=FILL_BOTH)
bx3.pack_end(bt)
bt.show()
## Second Col
ly = Layout(win, size_hint_weight=EXPAND_BOTH)
ly.file = edj_file, "twolines"
mainbx.pack_end(ly)
ly.show()
bx2 = Box(win, horizontal=True, size_hint_align=FILL_BOTH)
ly.part_content_set("element1", bx2)
bx2.show()
for i in range(3):
bt = Button(win, text="Layout", size_hint_align=FILL_BOTH)
bx2.pack_end(bt)
bt.show()
bx2.focus_custom_chain_prepend(bt)
bx2 = Box(win, size_hint_align=FILL_BOTH)
ly.part_content_set("element2", bx2)
bx2.show()
bt = Button(win, text="Disable", size_hint_align=FILL_BOTH)
bt.callback_clicked_add(lambda b: b.disabled_set(True))
bx2.pack_end(bt)
bt.show()
bx2.focus_custom_chain_prepend(bt)
bt2 = Button(win, text="Enable", size_hint_align=FILL_BOTH)
bt2.callback_clicked_add(lambda b, b1: b1.disabled_set(False), bt)
bx2.pack_end(bt2)
bt2.show()
bx2.focus_custom_chain_append(bt2)
## Third Col
bx = Box(win, size_hint_weight=EXPAND_BOTH)
mainbx.pack_end(bx)
bx.show()
fr = Frame(win, text="Frame", )
bx.pack_end(fr)
fr.show()
tb = Table(win, size_hint_weight=EXPAND_BOTH)
fr.content = tb
tb.show()
for j in range(1):
for i in range(2):
bt = Button(win, text="Table", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
tb.pack(bt, i, j, 1, 1)
bt.show()
#
fr = Bubble(win, text="Bubble", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
bx.pack_end(fr)
fr.show()
tb = Table(win, size_hint_weight=EXPAND_BOTH)
fr.content = tb
tb.show()
for j in range(2):
for i in range(1):
bt = Button(win, text="Table", size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
tb.pack(bt, i, j, 1, 1)
bt.show()
win.show()
# Focus 2
def _focus_obj(bt, newfocus):
print newfocus
newfocus.focus = True
def _focus_layout_part(bt, layout):
newfocus = layout.edje.part_object_get("sky")
print newfocus
newfocus.focus = True
def focus2_clicked(obj, item=None):
win = StandardWindow("focus2", "Focus 2", autodel=True, size=(400, 400))
win.focus_highlight_enabled = True
bx = Box(win, size_hint_weight=EXPAND_BOTH)
win.resize_object_add(bx)
bx.show()
PARENT = bx
en = Entry(PARENT, scrollable=True, single_line=True,
text="Entry that should get focus",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bx.pack_end(en)
en.show()
bt = Button(PARENT, text="Give focus to entry")
bt.callback_clicked_add(_focus_obj, en)
bx.pack_end(bt)
bt.show()
ly = Layout(PARENT, size_hint_weight=EXPAND_BOTH)
ly.file = edj_file, "layout"
bx.pack_end(ly)
ly.show()
bt1 = bt = Button(ly, text="Button 1")
ly.part_content_set("element1", bt)
en1 = Entry(ly, scrollable=True, single_line=True,
text="Scrolled Entry that should get focus",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ )
ly.part_content_set("element2", en1)
bt = Button(ly, text="Button 2")
ly.part_content_set("element3", bt)
bt = Button(PARENT, text="Give focus to layout",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_focus_obj, ly)
bx.pack_end(bt)
bt.show()
bt = Button(PARENT, text="Give focus to layout part",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_focus_layout_part, ly)
bx.pack_end(bt)
bt.show()
bt = Button(PARENT, text="Give focus to layout 'Button 1'",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_focus_obj, bt1)
bx.pack_end(bt)
bt.show()
bt = Button(PARENT, text="Give focus to layout 'Entry'",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_focus_obj, en1)
bx.pack_end(bt)
bt.show()
bt.focus_next_object_set(en, ELM_FOCUS_DOWN)
en.focus_next_object_set(bt, ELM_FOCUS_UP)
win.show()
# Focus 3
focused = None
def _focused_cb(obj):
global focused
print obj
focused = obj
def _unfocused_cb(obj):
global focused
print obj
focused = None
def _add_cb(bt, win, bx):
en = Entry(win, scrollable=True, single_line=True, text="An entry",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
en.callback_focused_add(_focused_cb)
en.callback_unfocused_add(_unfocused_cb)
bx.pack_start(en)
en.show()
def _del_cb(bt, bx):
if focused:
focused.delete()
def _hide_cb(bt):
if focused:
focused.hide()
def focus3_clicked(obj, item=None):
win = StandardWindow("focus3", "Focus 3", autodel=True, size=(320, 480))
win.focus_highlight_enabled = True
bx = Box(win, size_hint_weight=EXPAND_BOTH)
win.resize_object_add(bx)
bx.show()
en = Entry(win, scrollable=True, single_line=True, text="An entry",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
en.callback_focused_add(_focused_cb)
en.callback_unfocused_add(_unfocused_cb)
bx.pack_end(en)
en.show()
bt = Button(win, text="Add", focus_allow=False,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_add_cb, win, bx)
bx.pack_end(bt)
bt.show()
bt = Button(win, text="Del", focus_allow=False,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_del_cb, bx)
bx.pack_end(bt)
bt.show()
bt = Button(win, text="hide", focus_allow=False,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
bt.callback_clicked_add(_hide_cb)
bx.pack_end(bt)
bt.show()
win.show()
# Focus 4
def _highlight_enabled_cb(chk, win):
conf.focus_highlight_enabled = chk.state
def _highlight_animate_cb(chk, win):
conf.focus_highlight_animate = chk.state
def _win_highlight_enabled_cb(chk, win):
win.focus_highlight_enabled = chk.state
def _win_highlight_animate_cb(chk, win):
win.focus_highlight_animate = chk.state
def _custom_chain_cb(chk, bx):
print chk.state
if chk.state is True:
i = 0
custom_chain = []
for child in bx.children:
print child
if i == 0:
c = child
custom_chain.append(child)
bx.focus_custom_chain_set(custom_chain)
elif i == 1:
bx.focus_custom_chain_prepend(child, c)
elif i == 2:
bx.focus_custom_chain_append(child, c)
c = child
elif i == 3:
bx.focus_custom_chain_prepend(child, c);
i += 1
else:
bx.focus_custom_chain_unset()
def focus4_clicked(obj, item=None):
win = StandardWindow("focus4", "Focus 4", autodel=True, size=(320, 320))
win.focus_highlight_enabled = True
win.focus_highlight_animate = True
fr = Frame(win, style="pad_large",
size_hint_weight=EXPAND_BOTH);
win.resize_object_add(fr)
fr.show()
# First Example - Using Focus Highlight
bx = Box(fr)
fr.content = bx
bx.show()
tg = Check(bx, text="Focus Highlight Enabled (Config)", state=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
tg.callback_changed_add(_highlight_enabled_cb, win)
bx.pack_end(tg)
tg.show()
tg = Check(bx, text="Focus Highlight Animate (Config)", state=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
tg.callback_changed_add(_highlight_animate_cb, win)
bx.pack_end(tg)
tg.show()
tg = Check(bx, text="Focus Highlight Enabled (Win)", state=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
tg.callback_changed_add(_win_highlight_enabled_cb, win)
bx.pack_end(tg)
tg.show()
tg = Check(bx, text="Focus Highlight Animate (Win)", state=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
tg.callback_changed_add(_win_highlight_animate_cb, win)
bx.pack_end(tg)
tg.show()
sp = Separator(win, horizontal=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bx.pack_end(sp)
sp.show()
# Second Example - Using Custom Chain
lb = Label(bx, text="Custom Chain: Please use tab key to check",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bx.pack_end(lb)
lb.show()
bx2 = Box(bx, horizontal=True,
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx.pack_end(bx2)
bx2.show()
bt1 = Button(bx2, text="Button 1",
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(bt1)
bt1.show()
bt2 = Button(bx2, text="Button 2",
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(bt2)
bt2.show()
bt3 = Button(bx2, text="Button 3",
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(bt3)
bt3.show()
bt4 = Button(bx2, text="Button 4",
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(bt4)
bt4.show()
bx2.focus_custom_chain = [bt2, bt1, bt4, bt3]
tg = Check(bx, text="Custom Chain", state=False,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
tg.callback_changed_add(_custom_chain_cb, bx)
bx.pack_end(tg)
tg.show()
win.show()
# Focus 5 (custom)
def _glow_effect_on_cb(btn, win, chk):
if chk.state:
win.focus_highlight_style = "glow_effect"
def _glow_effect_off_cb(btn, win, chk):
if chk.state:
win.focus_highlight_style = "glow"
def focus5_clicked(obj, item=None):
theme_overlay_add(os.path.join(script_path, "test_focus_custom.edj"))
win = StandardWindow("focus5", "Focus Custom", autodel=True, size=(320, 320))
win.focus_highlight_enabled = True
win.focus_highlight_animate = True
win.focus_highlight_style = "glow"
fr = Frame(win, style="pad_large",
size_hint_weight=EXPAND_BOTH);
win.resize_object_add(fr)
fr.show()
bx = Box(fr)
fr.content = bx
bx.show()
chk = Check(bx, text='Enable glow effect on "Glow" Button', state=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bx.pack_end(chk)
chk.show()
spinner = Spinner(bx, size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bx.pack_end(spinner)
spinner.show()
bt = Button(bx, text="Glow Button",
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bt.callback_focused_add(_glow_effect_on_cb, win, chk)
bt.callback_unfocused_add(_glow_effect_off_cb, win, chk)
bx.pack_end(bt)
bt.show()
sp = Separator(bx, horizontal=True,
size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
bx.pack_end(sp)
sp.show()
bx2 = Box(bx, horizontal=True,
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx.pack_end(bx2)
bx2.show()
for i in range (1, 5):
bt = Button(bx2, text="Button %d" % i,
size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
bx2.pack_end(bt)
bt.show()
win.show()
if __name__ == "__main__":
elementary.init()
win = StandardWindow("test", "python-elementary test application",
size=(320,520))
win.callback_delete_request_add(lambda o: elementary.exit())
box0 = Box(win, size_hint_weight=EXPAND_BOTH)
win.resize_object_add(box0)
box0.show()
lb = Label(win)
lb.text_set("Please select a test from the list below<br>"
"by clicking the test button to show the<br>"
"test window.")
lb.show()
fr = Frame(win, text="Information", content=lb)
box0.pack_end(fr)
fr.show()
items = [("Focus", focus_clicked),
("Focus 2", focus2_clicked),
("Focus 3", focus3_clicked),
("Focus 4", focus4_clicked),
("Focus Custom", focus5_clicked)]
li = List(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
box0.pack_end(li)
li.show()
for item in items:
li.item_append(item[0], callback=item[1])
li.go()
win.show()
elementary.run()
elementary.shutdown()

View File

@ -0,0 +1,389 @@
// c1 - c4
// |base|
// | |
// c3 - c2
#define OUTER_BASE_PARTS(w, h) \
part { name: "base"; type: SPACER; \
description { \
state: "default" 0.0; } } \
part { name: "c1"; type: SPACER; \
description { state: "default" 0.0; \
rel1.to: "base"; \
rel2.to: "base"; \
rel2.relative: 0 0; \
align: 1 1; \
min: w h; \
max: w h; } } \
part { name: "c3"; type: SPACER; \
description { state: "default" 0.0; \
rel1.to: "base"; \
rel2.to: "base"; \
rel1.relative: 0 1; \
rel2.relative: 0 1; \
align: 1 0; \
min: w h; \
max: w h; } } \
part { name: "c4"; type: SPACER; \
description { state: "default" 0.0; \
rel1.to: "base"; \
rel2.to: "base"; \
rel1.relative: 1 0; \
rel2.relative: 1 0; \
min: w h; \
max: w h; } } \
part { name: "c2"; type: SPACER; \
mouse_events: 0; \
description { state: "default" 0.0; \
rel1.to: "base"; \
rel1.relative: 1 1; \
rel2.to: "base"; \
rel2.relative: 1 1; \
align: 0 0; \
min: w h; \
max: w h; } }
collections {
group { name: "elm/focus_highlight/top/glow";
images {
image: "border6.png" COMP;
}
data.item: "animate" "on";
script {
public src_x, src_y, src_w, src_h;
public diffx, diffy, diffw, diffh;
public anim_highlight(val, Float:pos) {
new x, y, w, h, dx, dy, dw, dh;
dx = round(float_mul(float(get_int(diffx)), pos));
x = get_int(src_x) + dx;
dy = round(float_mul(float(get_int(diffy)), pos));
y = get_int(src_y) + dy;
dw = round(float_mul(float(get_int(diffw)), pos));
w = get_int(src_w) + dw;
dh = round(float_mul(float(get_int(diffh)), pos));
h = get_int(src_h) + dh;
update_offset(x, y, w, h);
if(pos >= 1.0) {
emit("elm,action,focus,anim,end", "");
set_state(PART:"highlight", "default", 0.0);
}
}
public update_offset(x, y, w, h) {
set_state_val(PART:"base", STATE_REL1_OFFSET, x, y);
set_state_val(PART:"base", STATE_REL2_OFFSET, x + w, y + h);
}
public message(Msg_Type:type, id, ...) {
if((type == MSG_INT_SET) && (id == 1)) {
new x1, y1, w1, h1, x2, y2, w2, h2;
x1 = getarg(2);
y1 = getarg(3);
w1 = getarg(4);
h1 = getarg(5);
x2 = getarg(6);
y2 = getarg(7);
w2 = getarg(8);
h2 = getarg(9);
set_int(src_x, x1);
set_int(src_y, y1);
set_int(src_w, w1);
set_int(src_h, h1);
set_int(diffx, x2 - x1);
set_int(diffy, y2 - y1);
set_int(diffw, w2 - w1);
set_int(diffh, h2 - h1);
custom_state(PART:"base", "default", 0.0);
set_state_val(PART:"base", STATE_REL1, 0.0, 0.0);
set_state_val(PART:"base", STATE_REL2, 0.0, 0.0);
update_offset(x1, y1, w1, h1);
set_state(PART:"base", "custom", 0.0);
anim(0.2, "anim_highlight", 0);
}
}
} //script ends
parts {
OUTER_BASE_PARTS(12, 12);
part { name: "highlight"; type: IMAGE;
mouse_events: 0;
description { state: "default" 0.0;
image.normal: "border6.png";
image.border: 20 20 20 20;
rel1.to: "c1";
rel2.to: "c2";
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
}
description { state: "invisible" 0.0;
inherit: "default" 0.0;
visible: 0;
}
}
} //parts ends
programs {
program { name: "show";
signal: "elm,action,focus,show";
source: "elm";
action: ACTION_STOP;
target: "hide";
target: "hide_start";
target: "hide_end";
after: "show_start";
}
program { name: "show_start";
action: STATE_SET "visible" 0.0;
transition: SIN 0.2;
target: "highlight";
after: "show_end";
}
program { name: "show_end";
action: SIGNAL_EMIT "elm,action,focus,show,end" "";
}
program { name: "hide";
signal: "elm,action,focus,hide";
source: "elm";
action: ACTION_STOP;
target: "show";
target: "show_start";
target: "show_end";
after: "hide_start";
}
program { name: "hide_start";
action: STATE_SET "invisible" 0.0;
transition: SIN 0.2;
target: "highlight";
after: "hide_end";
}
program { name: "hide_end";
action: SIGNAL_EMIT "elm,action,focus,hide,end" "";
}
} //programs ends
} //group ends
group { name: "elm/focus_highlight/top/glow_effect";
inherit: "elm/focus_highlight/top/glow";
images {
image: "border.png" COMP;
image: "border2.png" COMP;
image: "border3.png" COMP;
image: "border4.png" COMP;
image: "border5.png" COMP;
image: "border6.png" COMP;
}
data.item: "animate" "on";
script {
public src_x, src_y, src_w, src_h;
public diffx, diffy, diffw, diffh;
public anim_highlight(val, Float:pos) {
new x, y, w, h, dx, dy, dw, dh, Float:p;
p = 1.0 - ((1.0 - pos) * (1.0 - pos) * (1.0 - pos));
dx = round(float_mul(float(get_int(diffx)), p));
x = get_int(src_x) + dx;
dy = round(float_mul(float(get_int(diffy)), p));
y = get_int(src_y) + dy;
dw = round(float_mul(float(get_int(diffw)), p));
w = get_int(src_w) + dw;
dh = round(float_mul(float(get_int(diffh)), p));
h = get_int(src_h) + dh;
update_offset(x, y, w, h);
if(pos >= 1.0) {
emit("elm,action,focus,anim,end", "");
set_state(PART:"highlight", "default", 0.0);
emit("dim", "");
}
}
public update_offset(x, y, w, h) {
set_state_val(PART:"base", STATE_REL1_OFFSET, x, y);
set_state_val(PART:"base", STATE_REL2_OFFSET, x + w, y + h);
}
public message(Msg_Type:type, id, ...) {
if((type == MSG_INT_SET) && (id == 1)) {
new x1, y1, w1, h1, x2, y2, w2, h2;
x1 = getarg(2);
y1 = getarg(3);
w1 = getarg(4);
h1 = getarg(5);
x2 = getarg(6);
y2 = getarg(7);
w2 = getarg(8);
h2 = getarg(9);
set_int(src_x, x1);
set_int(src_y, y1);
set_int(src_w, w1);
set_int(src_h, h1);
set_int(diffx, x2 - x1);
set_int(diffy, y2 - y1);
set_int(diffw, w2 - w1);
set_int(diffh, h2 - h1);
custom_state(PART:"base", "default", 0.0);
set_state_val(PART:"base", STATE_REL1, 0.0, 0.0);
set_state_val(PART:"base", STATE_REL2, 0.0, 0.0);
update_offset(x1, y1, w1, h1);
set_state(PART:"base", "custom", 0.0);
anim(0.2, "anim_highlight", 0);
}
}
} //script ends
parts {
part { name: "highlight"; type: IMAGE;
mouse_events: 0;
description { state: "default" 0.0;
image.normal: "border6.png";
image.border: 16 16 16 16;
rel1.to: "c1";
rel2.to: "c2";
visible: 1;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
}
description { state: "visible" 0.1;
inherit: "visible" 0.0;
image.normal: "border2.png";
image.border: 18 18 18 18;
}
description { state: "visible" 0.2;
inherit: "visible" 0.0;
image.normal: "border3.png";
image.border: 19 19 19 19;
}
description { state: "visible" 0.3;
inherit: "visible" 0.0;
image.normal: "border4.png";
image.border: 20 20 20 20;
}
description { state: "visible" 0.4;
inherit: "visible" 0.0;
image.normal: "border5.png";
image.border: 21 21 21 21;
}
description { state: "visible" 0.5;
inherit: "visible" 0.0;
image.normal: "border6.png";
image.border: 25 25 25 25;
}
description { state: "invisible" 0.0;
inherit: "default" 0.0;
visible: 0;
}
}
}//parts ends
programs {
program { name: "show";
signal: "elm,action,focus,show";
source: "elm";
action: ACTION_STOP;
target: "hide";
target: "hide_start";
target: "hide_end";
after: "show_start";
}
program { name: "show_start";
action: SIGNAL_EMIT "dim" "";
after: "show_end";
}
program { name: "dim_start";
signal: "dim";
in: 2 0.4;
source: "";
action: STATE_SET "visible" 0.4;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "dim1";
}
program { name: "dim1";
action: STATE_SET "visible" 0.3;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "dim2";
}
program { name: "dim2";
action: STATE_SET "visible" 0.2;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "dim3";
}
program { name: "dim3";
action: STATE_SET "visible" 0.1;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "dim_end";
}
program { name: "dim_end";
action: SIGNAL_EMIT "glow" "";
}
program { name: "glow_start";
signal: "glow";
source: "";
in: 1 0.4;
action: STATE_SET "visible" 0.0;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow1";
}
program { name: "glow1";
action: STATE_SET "visible" 0.1;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow2";
}
program { name: "glow2";
action: STATE_SET "visible" 0.2;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow3";
}
program { name: "glow3";
action: STATE_SET "visible" 0.3;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow4";
}
program { name: "glow4";
action: STATE_SET "visible" 0.4;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow5";
}
program { name: "glow5";
action: STATE_SET "visible" 0.5;
transition: SINUSOIDAL 0.2;
target: "highlight";
after: "glow1";
}
program { name: "show_end";
action: SIGNAL_EMIT "elm,action,focus,show,end" "";
}
program { name: "hide";
signal: "elm,action,focus,hide";
source: "elm";
action: ACTION_STOP;
target: "show";
target: "show_start";
target: "show_end";
after: "hide_start";
}
program { name: "hide_start";
action: STATE_SET "invisible" 0.0;
transition: LIN 0.2;
target: "highlight";
after: "hide_end";
}
program { name: "hide_end";
action: SIGNAL_EMIT "elm,action,focus,hide,end" "";
}
} //programs ends
} //group ends
}

Binary file not shown.