tizen native development tips to save time & …...tizen native development tips to save time...

276
Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's Republic of China Carsten Haitzler <[email protected]> Master Engineer Samsung Electronics, Korea Enlightenment / EFL Founder

Upload: others

Post on 28-May-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tizen Native Development Tips to Save Time & Trouble

Tizen Developer Conference 2015深圳 , 中华人民共和国

Shenzhen, People's Republic of China

Carsten Haitzler <[email protected]>

Master Engineer Samsung Electronics, KoreaEnlightenment / EFL Founder

Page 2: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tizen Development Today

Page 3: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tizen Development Today

HTML5

HTML5

Page 4: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tizen Development Today

HTML5 HTML5 + Native HTML5 + Native

HTML5 + NativeHTML5

Page 5: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Native or HTML5?

Page 6: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5 Native

Page 7: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

Native

Page 8: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

Native

Page 9: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

Native

Page 10: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

Native

Page 11: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

Native

Page 12: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

Native

Page 13: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

Native

Page 14: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

Page 15: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

Page 16: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

Page 17: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

Page 18: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

Page 19: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

Page 20: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

+ Grow an old-school UNIX beard

Page 21: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

+ Grow an old-school UNIX beard

Page 22: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

+ Grow an old-school UNIX beard

- More prone to programmer error

Page 23: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

+ Grow an old-school UNIX beard

- More prone to programmer error

- Takes more time to develop

Page 24: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Pros & Cons

HTML5

+ Re-use Web Tech knowledge

+ Share code across platforms

+ Develop apps quickly

+ Be hip & trendy

- Slow (startup and execute)

- Use more memory

- More restricted on Tizen

Native

+ Re-use C/C++ knowledge

+ Share code with large codebases

+ Fast (startup and execute)

+ Use less memory

+ Less restricted on Tizen

+ Grow an old-school UNIX beard

- More prone to programmer error

- Takes more time to develop

- Different APIs to other platforms

Page 25: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

Page 26: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps

Page 27: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

Page 28: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

– APIs to call in Tizen are C (Can be called from C++ as well as C)

Page 29: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

– APIs to call in Tizen are C (Can be called from C++ as well as C)

● Can use Tizen SDK or GBS to build

Page 30: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

– APIs to call in Tizen are C (Can be called from C++ as well as C)

● Can use Tizen SDK or GBS to build– GBS is a Linux command-line tool to cross-compile Tizen software

Page 31: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

– APIs to call in Tizen are C (Can be called from C++ as well as C)

● Can use Tizen SDK or GBS to build– GBS is a Linux command-line tool to cross-compile Tizen software

● Entire OS is built using GBS on servers

Page 32: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native

● Used by system developers for most apps● Apps can be C or C++

– APIs to call in Tizen are C (Can be called from C++ as well as C)

● Can use Tizen SDK or GBS to build– GBS is a Linux command-line tool to cross-compile Tizen software

● Entire OS is built using GBS on servers

– SDK is Eclipse based

Page 33: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

Page 34: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL

Page 35: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL– Open Source Project – http://www.enlightenment.org

Page 36: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL– Open Source Project – http://www.enlightenment.org– Covers Main loop (UI), Rendering, OpenGL, Widgets, Comms, IPC, Threading,

Theme, etc.

Page 37: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL– Open Source Project – http://www.enlightenment.org– Covers Main loop (UI), Rendering, OpenGL, Widgets, Comms, IPC, Threading,

Theme, etc.

● Other Tizen Native APIs

Page 38: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL– Open Source Project – http://www.enlightenment.org– Covers Main loop (UI), Rendering, OpenGL, Widgets, Comms, IPC, Threading,

Theme, etc.

● Other Tizen Native APIs– Multimedia, Messaging, Sensors, Alarm, Location, Lifecycle, Network, Security,

Social, Telephony, etc.

Page 39: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Native API Content

● Majority of Native API comes from EFL– Open Source Project – http://www.enlightenment.org– Covers Main loop (UI), Rendering, OpenGL, Widgets, Comms, IPC, Threading,

Theme, etc.

● Other Tizen Native APIs– Multimedia, Messaging, Sensors, Alarm, Location, Lifecycle, Network, Security,

Social, Telephony, etc.– Other open source project APIs suported like cURL, libEXIF, libXML, Sqlite etc.

Page 40: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

Page 41: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development

Page 42: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

Page 43: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

Page 44: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen

Page 45: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen– Enlightenment is over 220,000 Lines of C code

Page 46: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen– Enlightenment is over 220,000 Lines of C code

● Have worked on Tizen since before 1.0

Page 47: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen– Enlightenment is over 220,000 Lines of C code

● Have worked on Tizen since before 1.0– 7+ years – before it was even Tizen

Page 48: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen– Enlightenment is over 220,000 Lines of C code

● Have worked on Tizen since before 1.0– 7+ years – before it was even Tizen– Full-time Engineer at Samsung for 5+ Years

Page 49: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Why Speak?

● Founded Enlightenment / EFL development● Wrote the largest part of EFL code personally

– EFL is over 1,000,000 lines of C code

● Wrote the Window Manager / Compositor for Tizen– Enlightenment is over 220,000 Lines of C code

● Have worked on Tizen since before 1.0– 7+ years – before it was even Tizen– Full-time Engineer at Samsung for 5+ Years

● So if you have Questions – Please Ask I don't bite

Page 50: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

Page 51: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…

Page 52: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes

Page 53: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes● “If it's hard, you're doing it wrong”

Page 54: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes● “If it's hard, you're doing it wrong”

– There is often an easier way

Page 55: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes● “If it's hard, you're doing it wrong”

– There is often an easier way

● Ask for help if you get stuck or think you could do something better

Page 56: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes● “If it's hard, you're doing it wrong”

– There is often an easier way

● Ask for help if you get stuck or think you could do something better– There are real humans willing to help

Page 57: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Tips to make your life easier

● Covering the EFL parts of Tizen…● Show you some pointers to avoid mistakes● “If it's hard, you're doing it wrong”

– There is often an easier way

● Ask for help if you get stuck or think you could do something better– There are real humans willing to help– Links at end of presentation

Page 58: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Start

main()

Process setup work

Page 59: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Main LoopStart

main()

ui_app_main()

Process setup work

Page 60: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Main LoopStart

Create

main()

ui_app_main()

app_create()

Create Window and Content here!

Process setup work

Page 61: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Main LoopStart

Create

Main Loop

main()

ui_app_main()

ui_app_main()

app_create()

Create Window and Content here!

Process setup work

Page 62: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Main LoopStart

Create Terminate

Main Loop

main()

ui_app_main()

ui_app_main()

app_create() app_terminate()

Create Window and Content here!

Delete Window and trigger shutdown

Process setup work

Page 63: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Anatomy of the Application Core

Main LoopStart Exit

Create Terminate

Main Loop

main()

ui_app_main()

ui_app_main()

app_create() app_terminate()

Create Window and Content here!

Delete Window and trigger shutdown

Process shutdown work

Process setup work

Page 64: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Now … Creation of your UI

Main LoopStart Exit

Create Terminate

Main Loop

main()

ui_app_main()

ui_app_main()

app_create() app_terminate()

Create Window and Content here!

Delete Window and trigger shutdown

Process shutdown work

Process setup work

Page 65: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window

Page 66: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)

Page 67: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)● Add more containers/content (Naviframe, Box, Table etc.)

Page 68: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)● Add more containers/content (Naviframe, Box, Table etc.)● Add more content (Lists, Buttons, Labels etc.)

Page 69: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)● Add more containers/content (Naviframe, Box, Table etc.)● Add more content (Lists, Buttons, Labels etc.)● Add callbacks to objects to listen to events

Page 70: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)● Add more containers/content (Naviframe, Box, Table etc.)● Add more content (Lists, Buttons, Labels etc.)● Add callbacks to objects to listen to events● Show window

Page 71: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Create a Window & Content

● Add a window● Add a conformant (if you want to handle keyboard and indicator)● Add more containers/content (Naviframe, Box, Table etc.)● Add more content (Lists, Buttons, Labels etc.)● Add callbacks to objects to listen to events● Show window● … Let main loop run and call callbacks

Page 72: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Now … Mainloop Interactions

Main LoopStart Exit

Create Terminate

Main Loop

main()

ui_app_main()

ui_app_main()

app_create() app_terminate()

Create Window and Content here!

Delete Window and trigger shutdown

Process shutdown work

Process setup work

Page 73: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Main Loop

UI Creation, Events,, Mainloop, Core Rendering, Async I/O

Page 74: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Main Loop

Thread

UI Creation, Events,, Mainloop, Core Rendering, Async I/O

Page 75: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Main Loop

Thread

Thread

UI Creation, Events,, Mainloop, Core Rendering, Async I/O

Page 76: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Main Loop

Thread

Thread

Thread

UI Creation, Events,, Mainloop, Core Rendering, Async I/O

Page 77: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Main Loop

Thread

Thread

Thread

UI Creation, Events,, Mainloop, Core Rendering, Async I/O

Data structure, I/O, Thread I/O handling, Prepare Data/Rendering before Display

Page 78: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Thread Safe Main Loop Only

Page 79: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Thread Safe

LibC Calls…eina_…ecore_main_loop_thread_safe_call_async()ecore_main_loop_thread_safe_call_sync()ecore_thread_main_loop_begin()ecore_thread_main_loop_end()ecore_thread_check()ecore_thread_feedback()ecore_thread_reschedule()ecore_thread_local_data_add()ecore_thread_local_data_set()ecore_thread_local_data_find()ecore_thread_local_data_del()ecore_thread_global_data_add()ecore_thread_global_data_set()ecore_thread_global_data_find()ecore_thread_global_data_del()ecore_thread_global_data_wait()ecore_pipe_write()ecore_pipe_read_fd()ecore_pipe_write_fd()ecore_pipe_wait()

Main Loop Only

Page 80: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Application Core & Threads

Thread Safe

LibC Calls…eina_…ecore_main_loop_thread_safe_call_async()ecore_main_loop_thread_safe_call_sync()ecore_thread_main_loop_begin()ecore_thread_main_loop_end()ecore_thread_check()ecore_thread_feedback()ecore_thread_reschedule()ecore_thread_local_data_add()ecore_thread_local_data_set()ecore_thread_local_data_find()ecore_thread_local_data_del()ecore_thread_global_data_add()ecore_thread_global_data_set()ecore_thread_global_data_find()ecore_thread_global_data_del()ecore_thread_global_data_wait()ecore_pipe_write()ecore_pipe_read_fd()ecore_pipe_write_fd()ecore_pipe_wait()

Main Loop Only

elm_…evas_…edje_…ecore_……

Page 81: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Call “Main Loop” Calls from Thread

Page 82: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Call “Main Loop” Calls from Thread

…ecore_thread_main_loop_begin(); { // Begin main loop code … timer = ecore_timer_add(42.0, my_timer_callback, NULL); evas_object_move(my_object, x, y); …} ecore_thread_main_loop_end(); // End main loop code…

Very simple & easy way to call rare bl.ocks of code within main loop context from a thread

Page 83: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Call “Main Loop” Calls from Thread

…ecore_thread_main_loop_begin(); { // Begin main loop code … timer = ecore_timer_add(42.0, my_timer_callback, NULL); evas_object_move(my_object, x, y); …} ecore_thread_main_loop_end(); // End main loop code…

or…void my_main_loop_code(void *data) { // Begin main loop code My_Data *my_data = data; … timer = ecore_timer_add(42.0, my_timer_callback, NULL); evas_object_move(my_data->obj, my_data->x, my_data->y); free(my_data); …} // End main loop code…

…// Queue function to be called in the main loopMy_Data *my_data = calloc(1, sizeof(My_Data));my_data->x = x;my_data->y = y;my_data->obj = my_object;ecore_main_loop_thread_safe_call_async(my_main_loop_code, my_data);…

Very simple & easy way to call rare bl.ocks of code within main loop context from a thread

Very efficent way to call code async very frequently from thread in main loop context

Page 84: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

Page 85: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool

Page 86: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

Page 87: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short

Page 88: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short● Pool of workers pull thread items off the queue and hand results back to mainloop

Page 89: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short● Pool of workers pull thread items off the queue and hand results back to mainloop● Limited size of pool to avoid overloading CPU (pool size based on number of cores)

Page 90: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short● Pool of workers pull thread items off the queue and hand results back to mainloop● Limited size of pool to avoid overloading CPU (pool size based on number of cores)● Saves managing your own thread pool

Page 91: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short● Pool of workers pull thread items off the queue and hand results back to mainloop● Limited size of pool to avoid overloading CPU (pool size based on number of cores)● Saves managing your own thread pool● Simple to use for tasks easily divided up into N discrete small units

Page 92: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Thread Worker Pool

● You can also use standard worker pool– ecore_thread_new() adds a thread work item to the queue

● Keep work items short● Pool of workers pull thread items off the queue and hand results back to mainloop● Limited size of pool to avoid overloading CPU (pool size based on number of cores)● Saves managing your own thread pool● Simple to use for tasks easily divided up into N discrete small units

● See Tizen and Elementary docs for more threading usage examples

Page 93: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

Page 94: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully

Page 95: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully– Divide tasks into isolated work per thread

Page 96: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully– Divide tasks into isolated work per thread

● Minimizes possible bugs by minimizing locking requirements

Page 97: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully– Divide tasks into isolated work per thread

● Minimizes possible bugs by minimizing locking requirements● Mainloop “collects results & implements display state”

Page 98: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully– Divide tasks into isolated work per thread

● Minimizes possible bugs by minimizing locking requirements● Mainloop “collects results & implements display state”● Use ecore thread infra to save re-inventing the wheel

Page 99: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Threading Summary

● Use threads, but design carefully– Divide tasks into isolated work per thread

● Minimizes possible bugs by minimizing locking requirements● Mainloop “collects results & implements display state”● Use ecore thread infra to save re-inventing the wheel

● If you have issues, please report/bring them up!

Page 100: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Now … Back to the Window that is created

Main LoopStart Exit

Create Terminate

Main Loop

main()

ui_app_main()

ui_app_main()

app_create() app_terminate()

Create Window and Content here!

Delete Window and trigger shutdown

Process shutdown work

Process setup work

Page 101: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

Page 102: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph

Page 103: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists

Page 104: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists– Changes to all objects are stateful

Page 105: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists– Changes to all objects are stateful

● They retain their state as it was last set

Page 106: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists– Changes to all objects are stateful

● They retain their state as it was last set

– Rendering is “automatic” after going idle at next VSYNC event

Page 107: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists– Changes to all objects are stateful

● They retain their state as it was last set

– Rendering is “automatic” after going idle at next VSYNC event● Hidden/abstracted so acceleration methods can be dramatically changed

Page 108: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Window Content

● The window is a full scene graph– Everything you see is an object that persists– Changes to all objects are stateful

● They retain their state as it was last set

– Rendering is “automatic” after going idle at next VSYNC event● Hidden/abstracted so acceleration methods can be dramatically changed

VSYNC VSYNC VSYNC VSYNC VSYNC

WAKE WAKE WAKE WAKE WAKE WAKE WAKE

SLEEP SLEEP SLEEP SLEEP SLEEP SLEEP SLEEP

RENDER RENDER RENDER

GPU / RENDER THREAD

RENDER RENDER RENDER

MISSED VSYNC MISSED VSYNC

Page 109: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

Page 110: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

● Windows hold a tree of objects

Page 111: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

● Windows hold a tree of objects

● Each object can be a basic object or a container (Smart Object)

Page 112: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

● Windows hold a tree of objects

● Each object can be a basic object or a container (Smart Object)– All objects are stacked and have

geometry (x, y, width & height)

Page 113: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

● Windows hold a tree of objects

● Each object can be a basic object or a container (Smart Object)– All objects are stacked and have

geometry (x, y, width & height)– All child objects stack within the

parent object (recursively)

Page 114: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph

● Windows hold a tree of objects

● Each object can be a basic object or a container (Smart Object)– All objects are stacked and have

geometry (x, y, width & height)– All child objects stack within the

parent object (recursively)

● Basic objects– Rectangle– Image (images, buffers, proxies)– Text (single line simple text)– Textblock (multi-line formatted text)– Textgrid (for grids of chars)– Polygon (used for event regions)– Line (really limited)– VG (Vector Graphic)– 3D

Page 115: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph Objects

List Item

List Item Next

Another List Item

Yet Another

Getting There

Almost done

Do This Go Away

Heading is Here

Page 116: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Scene Graph Objects

List Item

List Item Next

Another List Item

Yet Another

Getting There

Almost done

Do This Go Away

Heading is Here

List Item

List Item Next

Another List Item

Yet Another

Getting There

Almost done

Do This Go Away

Heading is HereList Item

List Item Next

Another List Item

Yet Another

Getting There

Almost done

Heading is Here

Go Away

Do This

Page 117: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Components & Layers

Page 118: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

Page 119: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state

Page 120: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden

Page 121: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden– Set a color of an object – it stays that color until it is changed

Page 122: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden– Set a color of an object – it stays that color until it is changed– Set text of text or textblock object – it shows that text until changed

Page 123: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden– Set a color of an object – it stays that color until it is changed– Set text of text or textblock object – it shows that text until changed

● Rendering is automatic after VSYNC wakeup idle

Page 124: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden– Set a color of an object – it stays that color until it is changed– Set text of text or textblock object – it shows that text until changed

● Rendering is automatic after VSYNC wakeup idle– Tries to only re-render updated regions / objects

Page 125: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Queue deferred render

● All objects retain state– Show object once – it stays visible UNTIL hidden– Set a color of an object – it stays that color until it is changed– Set text of text or textblock object – it shows that text until changed

● Rendering is automatic after VSYNC wakeup idle– Tries to only re-render updated regions / objects

VSYNC VSYNC VSYNC VSYNC VSYNC

WAKE

SLEEP

RENDER

WAKE

SLEEP

Queue wakeup for rendering

Wake up and then immediately sleepon entering idle begin rendering

Already queued

Page 126: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Elementary Widgets

Page 127: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Elementary Widgets

● All widgets (elm widgets) are just smart objects

Page 128: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Elementary Widgets

● All widgets (elm widgets) are just smart objects– Provide extra behavior semantics

Page 129: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Elementary Widgets

● All widgets (elm widgets) are just smart objects– Provide extra behavior semantics

● Focus, accessibility, packing, child deletion, …

Page 130: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Elementary Widgets

● All widgets (elm widgets) are just smart objects– Provide extra behavior semantics

● Focus, accessibility, packing, child deletion, …

– Uses Edje to define some internal layout/look and animation

Page 131: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

Page 132: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL

Page 133: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs

Page 134: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering

Page 135: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed

Page 136: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

Page 137: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

● Works on Desktop OpenGL too (Linux, OSX, SDL)

Page 138: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

● Works on Desktop OpenGL too (Linux, OSX, SDL)– Gives you an OpenGL-ES 1.1/2.0 API to use across all targets

Page 139: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

● Works on Desktop OpenGL too (Linux, OSX, SDL)– Gives you an OpenGL-ES 1.1/2.0 API to use across all targets

– You can have multiple GL Views in a window

Page 140: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

● Works on Desktop OpenGL too (Linux, OSX, SDL)– Gives you an OpenGL-ES 1.1/2.0 API to use across all targets

– You can have multiple GL Views in a window● Even inside lists, scrollers

Page 141: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas - OpenGL

● Use elm_glview widget for OpenGL– Handles abstraction details of lower level Evas GL APIs– Handles correctly switching from direct (zero-copy) or indirect rendering– Handles calling your render function when rendering is needed– Provides portability beyond OpenGL-ES based systems beyond Tizen

● Works on Desktop OpenGL too (Linux, OSX, SDL)– Gives you an OpenGL-ES 1.1/2.0 API to use across all targets

– You can have multiple GL Views in a window● Even inside lists, scrollers● Mixed with other standard widgets and objects that can be used for game HUD

Page 142: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers

Page 143: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window

Page 144: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant

Page 145: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page

Page 146: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page– You put Entries in the Table

Page 147: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page– You put Entries in the Table– You put Buttons in the Table

Page 148: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page– You put Entries in the Table– You put Buttons in the Table– You put and Icon in the Button

Page 149: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page– You put Entries in the Table– You put Buttons in the Table– You put and Icon in the Button

● If you use containers correctly, your UI can scale AND resize properly

Page 150: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Containers & Scaling

● EFL loves containers– You put a Conformant in a Window– You put a Naviframe in a Conformant– You add a Naviframe page– You put a Table in the Naviframe page– You put Entries in the Table– You put Buttons in the Table– You put and Icon in the Button

● If you use containers correctly, your UI can scale AND resize properly– This is like HTML with <DIV> in a <DIV> in a <TABLE> in a …

Page 151: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 152: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 153: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children– Different parents have different

rules

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 154: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children– Different parents have different

rules

● Object hints determine if a child fills an/or expands its allocated area

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 155: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children– Different parents have different

rules

● Object hints determine if a child fills an/or expands its allocated area– Align and Weight do this

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 156: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children– Different parents have different

rules

● Object hints determine if a child fills an/or expands its allocated area– Align and Weight do this– Some widgets ONLY use Weight

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 157: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Parent Widget decides how to arrange children– Different parents have different

rules

● Object hints determine if a child fills an/or expands its allocated area– Align and Weight do this– Some widgets ONLY use Weight– Objects do NOT Fill and do NOT

Expand by default

Parent Box

Child

Space Alloc'd

Parent Box

Child Space Alloc'd

Parent Box

ChildSpace Alloc'd

Parent BoxSpace Alloc'd

Parent Box

Child

Space Alloc'd

Child

Weight 0.0 0.0Align 0.5 0.5

Weight 1.0 0.0Align 0.5 0.5

Weight 1.0 1.0Align 0.5 0.5

Weight 1.0 1.0Align 1.0 -1

Weight 1.0 1.0Align 0.0 1.0

Defaults

-1 = FILL

Page 158: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

Page 159: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

● Everything else uses both Weight and Align

Page 160: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

● Everything else uses both Weight and Align● All elm widgets control their own min size

Page 161: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

● Everything else uses both Weight and Align● All elm widgets control their own min size EXCEPT

– Grids never calculate their own min size – you may control it

Page 162: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

● Everything else uses both Weight and Align● All elm widgets control their own min size EXCEPT

– Grids never calculate their own min size – you may control it– GLview never calculates its own size

Page 163: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Size Hinting

● Window, Conformant, Part content (Layouts and other widgets)– Use only Weight

● Everything else uses both Weight and Align● All elm widgets control their own min size EXCEPT

– Grids never calculate their own min size – you may control it– GLview never calculates its own size

● Never set min (or max) size if already controlled by object

Page 164: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

Page 165: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

● Make Elm TableTable

Page 166: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

● Make Elm Table● Make Evas Rectangle (do not show it)● Pack Rectangle at 0, 0, 1x1

Table

Rectangle

Other Widget

Page 167: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

● Make Elm Table● Make Evas Rectangle (do not show it)● Pack Rectangle at 0, 0, 1x1● Create other widget you want to control min size of● Pack other widget in same Table at 0, 0, 1x1

Table

Rectangle

Other Widget

Page 168: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

● Make Elm Table● Make Evas Rectangle (do not show it)● Pack Rectangle at 0, 0, 1x1● Create other widget you want to control min size of● Pack other widget in same Table at 0, 0, 1x1● Set min size desired on Rectangle

Table

Rectangle

Other Widget

Page 169: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Min Size Control Trick

● Make Elm Table● Make Evas Rectangle (do not show it)● Pack Rectangle at 0, 0, 1x1● Create other widget you want to control min size of● Pack other widget in same Table at 0, 0, 1x1● Set min size desired on Rectangle● This gives a second control point (Rectangle object) to set hints on.

Table

Rectangle

Other Widget

Page 170: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

Page 171: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…

Page 172: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.

Page 173: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE

Page 174: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

Page 175: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

Page 176: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

– Should only be needed for very specific cases when special results are needed

Page 177: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

– Should only be needed for very specific cases when special results are needed– Creates issues for Accessibility and Focus Movement

Page 178: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

– Should only be needed for very specific cases when special results are needed– Creates issues for Accessibility and Focus Movement

● You may have to manage a Focus chain by hand if you do this

Page 179: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

– Should only be needed for very specific cases when special results are needed– Creates issues for Accessibility and Focus Movement

● You may have to manage a Focus chain by hand if you do this

● This can be useful for effects or unusual UIs

Page 180: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Manual Positioning

● You can manually move/resize widgets and objects, BUT…– Increases the work to handle multiple orientations, resolutions etc.– This should be RARE– If you do, YOU are in charge of layout handling, scaling, window resizes etc.

● This dramatically increases YOUR workload

– Should only be needed for very specific cases when special results are needed– Creates issues for Accessibility and Focus Movement

● You may have to manage a Focus chain by hand if you do this

● This can be useful for effects or unusual UIs● Not recommended unless you enjoy … The way of PAIN

Page 181: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

Page 182: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)

Page 183: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)– Can listen for deletion:

void func_to_call_on_del(void *data, Evas *e, Evas_Object *obj, void *info) {

printf(“object %p deleted, data is %p\n”, obj, data);

}

evas_object_vevent_callback_add(obj, EVAS_CALLBACK_DEL, func_to_call_on_del, data_pointer_for_func);

Page 184: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)– Can listen for deletion:

void func_to_call_on_del(void *data, Evas *e, Evas_Object *obj, void *info) {

printf(“object %p deleted, data is %p\n”, obj, data);

}

evas_object_vevent_callback_add(obj, EVAS_CALLBACK_DEL, func_to_call_on_del, data_pointer_for_func);

● You can attach key pointer values to any object→evas_object_data_set(obj, “mykey”, mypointer);

evas_object_data_del(obj, “mykey”);

mypointer = evas_object_data_get(obj, “mykey”);

Page 185: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)– Can listen for deletion:

void func_to_call_on_del(void *data, Evas *e, Evas_Object *obj, void *info) {

printf(“object %p deleted, data is %p\n”, obj, data);

}

evas_object_vevent_callback_add(obj, EVAS_CALLBACK_DEL, func_to_call_on_del, data_pointer_for_func);

● You can attach key pointer values to any object→evas_object_data_set(obj, “mykey”, mypointer);

evas_object_data_del(obj, “mykey”);

mypointer = evas_object_data_get(obj, “mykey”);

● Can be used for extending an object - Poor-mans-objects

Page 186: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)– Can listen for deletion:

void func_to_call_on_del(void *data, Evas *e, Evas_Object *obj, void *info) {

printf(“object %p deleted, data is %p\n”, obj, data);

}

evas_object_vevent_callback_add(obj, EVAS_CALLBACK_DEL, func_to_call_on_del, data_pointer_for_func);

● You can attach key pointer values to any object→evas_object_data_set(obj, “mykey”, mypointer);

evas_object_data_del(obj, “mykey”);

mypointer = evas_object_data_get(obj, “mykey”);

● Can be used for extending an object - Poor-mans-objects– Set/get extra data to store/access

Page 187: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Evas/Elm Object Lifecycle

● After objects are created (added)– Can listen for deletion:

void func_to_call_on_del(void *data, Evas *e, Evas_Object *obj, void *info) {

printf(“object %p deleted, data is %p\n”, obj, data);

}

evas_object_vevent_callback_add(obj, EVAS_CALLBACK_DEL, func_to_call_on_del, data_pointer_for_func);

● You can attach key pointer values to any object→evas_object_data_set(obj, “mykey”, mypointer);

evas_object_data_del(obj, “mykey”);

mypointer = evas_object_data_get(obj, “mykey”);

● Can be used for extending an object - Poor-mans-objects– Set/get extra data to store/access– On delete, delete any data needing deletion

Page 188: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Other Events

● Can also listen to many other events on objects:

Page 189: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Other Events

● Can also listen to many other events on objects:…

EVAS_CALLBACK_DEL

EVAS_CALLBACK_SHOW

EVAS_CALLBACK_HIDE

EVAS_CALLBACK_MOVE

EVAS_CALLBACK_RESIZE

EVAS_CALLBACK_RESTACK

EVAS_CALLBACK_CHANGED_SIZE_HINTS

EVAS_CALLBACK_IMAGE_PRELOADED

Page 190: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

Page 191: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image

Page 192: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

Page 193: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

– Each update after that, get data, modify, set data, add update:unsigned int *pixels = evas_object_image_data_get(obj, EINA_TRUE);

int stride = evas_obj_image_stride_get(obj);

// modify “pixels” with each row of pixels being “stride” bytes

evas_object_image_data_set(obj, pixels);

evas_object_image_update_add(obj, 0, 0, 600, 400);

Page 194: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

– Each update after that, get data, modify, set data, add update:unsigned int *pixels = evas_object_image_data_get(obj, EINA_TRUE);

int stride = evas_obj_image_stride_get(obj);

// modify “pixels” with each row of pixels being “stride” bytes

evas_object_image_data_set(obj, pixels);

evas_object_image_update_add(obj, 0, 0, 600, 400);

● ALWAYS GET THEN SET. Not doing so will lead to bugs

Page 195: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

– Each update after that, get data, modify, set data, add update:unsigned int *pixels = evas_object_image_data_get(obj, EINA_TRUE);

int stride = evas_obj_image_stride_get(obj);

// modify “pixels” with each row of pixels being “stride” bytes

evas_object_image_data_set(obj, pixels);

evas_object_image_update_add(obj, 0, 0, 600, 400);

● ALWAYS GET THEN SET. Not doing so will lead to bugs

– If you modify pixel data OFTEN then you should do this before setting size above

Page 196: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

– Each update after that, get data, modify, set data, add update:unsigned int *pixels = evas_object_image_data_get(obj, EINA_TRUE);

int stride = evas_obj_image_stride_get(obj);

// modify “pixels” with each row of pixels being “stride” bytes

evas_object_image_data_set(obj, pixels);

evas_object_image_update_add(obj, 0, 0, 600, 400);

● ALWAYS GET THEN SET. Not doing so will lead to bugs

– If you modify pixel data OFTEN then you should do this before setting size above● evas_obj_image_content_hint_set(obj, EVAS_IMAGE_CONTENT_HINT_DYNAMIC)

Page 197: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● You can modify pixel data of an Image– Suggested always first set alpha, set size, then handle updates after that:

evas_object_image_alpha_set(obj, EINA_TRUE);

evas_object_image_size_set(obj, 600, 400);

– Each update after that, get data, modify, set data, add update:unsigned int *pixels = evas_object_image_data_get(obj, EINA_TRUE);

int stride = evas_obj_image_stride_get(obj);

// modify “pixels” with each row of pixels being “stride” bytes

evas_object_image_data_set(obj, pixels);

evas_object_image_update_add(obj, 0, 0, 600, 400);

● ALWAYS GET THEN SET. Not doing so will lead to bugs

– If you modify pixel data OFTEN then you should do this before setting size above● evas_obj_image_content_hint_set(obj, EVAS_IMAGE_CONTENT_HINT_DYNAMIC)

● This will try and use zero-copy for textures with OpenGL, SW is always zero-copy

Page 198: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha

Page 199: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha– Alpha as MSB, Blue LSB per 32bit “integer” word

A = (pixel >> 24) & 0xff

R = (pixel >> 16) & 0xff

G = (pixel >> 8) & 0xff

B = pixel & 0xff

Page 200: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha– Alpha as MSB, Blue LSB per 32bit “integer” word

A = (pixel >> 24) & 0xff

R = (pixel >> 16) & 0xff

G = (pixel >> 8) & 0xff

B = pixel & 0xff

– Premultiplied Alpha is where R, G and B are multipled by AR = R * A; // conceptually if RGBA are 0.0 to 1.0

G = G * A; // conceptually if RGBA are 0.0 to 1.0

B = B * A; // conceptually if RGBA are 0.0 to 1.0

Page 201: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha– Alpha as MSB, Blue LSB per 32bit “integer” word

A = (pixel >> 24) & 0xff

R = (pixel >> 16) & 0xff

G = (pixel >> 8) & 0xff

B = pixel & 0xff

– Premultiplied Alpha is where R, G and B are multipled by AR = R * A; // conceptually if RGBA are 0.0 to 1.0

G = G * A; // conceptually if RGBA are 0.0 to 1.0

B = B * A; // conceptually if RGBA are 0.0 to 1.0

– Premultiplied Alpha produces correct results when scaling unlike non-premul

Page 202: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha– Alpha as MSB, Blue LSB per 32bit “integer” word

A = (pixel >> 24) & 0xff

R = (pixel >> 16) & 0xff

G = (pixel >> 8) & 0xff

B = pixel & 0xff

– Premultiplied Alpha is where R, G and B are multipled by AR = R * A; // conceptually if RGBA are 0.0 to 1.0

G = G * A; // conceptually if RGBA are 0.0 to 1.0

B = B * A; // conceptually if RGBA are 0.0 to 1.0

– Premultiplied Alpha produces correct results when scaling unlike non-premul– Premultiplied Alpha is faster in software rendering

Page 203: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Dynamic Image Content

● Pixels by default are ARGB8888 premultiplied Alpha– Alpha as MSB, Blue LSB per 32bit “integer” word

A = (pixel >> 24) & 0xff

R = (pixel >> 16) & 0xff

G = (pixel >> 8) & 0xff

B = pixel & 0xff

– Premultiplied Alpha is where R, G and B are multipled by AR = R * A; // conceptually if RGBA are 0.0 to 1.0

G = G * A; // conceptually if RGBA are 0.0 to 1.0

B = B * A; // conceptually if RGBA are 0.0 to 1.0

– Premultiplied Alpha produces correct results when scaling unlike non-premul– Premultiplied Alpha is faster in software rendering– Premultiplied Alpha always produces correct destination buffer Alpha

Page 204: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

Page 205: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead

Page 206: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render

Page 207: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)

Page 208: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)– Objects cost memory

Page 209: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)– Objects cost memory

● So … keep number of objects down where possible

Page 210: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)– Objects cost memory

● So … keep number of objects down where possible– Widgets like Elm Genlist and Gengrid do this for you for all Items

Page 211: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)– Objects cost memory

● So … keep number of objects down where possible– Widgets like Elm Genlist and Gengrid do this for you for all Items

● An Item is a very minimal piece of data acting as placeholder for an item

Page 212: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Object Costs

● More objects cost more overhead– All objects have to be walked to look for changes at render– All objects have to be walked to render them (and clip them)– Objects cost memory

● So … keep number of objects down where possible– Widgets like Elm Genlist and Gengrid do this for you for all Items

● An Item is a very minimal piece of data acting as placeholder for an item

– Do not abuse Genlist and Gengrid for generic scrollable UIs

Page 213: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

Page 214: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller

CanvasViewport

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 215: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table

CanvasViewport

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 216: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

CanvasViewport

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 217: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

● Divide Table or Box into 3 regionsCanvasViewport

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 218: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

● Divide Table or Box into 3 regions– Above– Visible– Below

Above

Below

Visible

CanvasViewport

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 219: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

● Divide Table or Box into 3 regions– Above– Visible– Below

● Track geometry of “dummy rectangles” in Above/Below

Above

Below

Visible

CanvasViewport

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to MOVE and RESIZE callbacks on “visible” object(s)

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 220: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

● Divide Table or Box into 3 regions– Above– Visible– Below

● Track geometry of “dummy rectangles” in Above/Below– Replace/insert as needed

Above

Below

Visible

CanvasViewport

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to MOVE and RESIZE callbacks on “visible” object(s)

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 221: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● Add a Scroller– Add a Box or Table– Set content of Scroller to Box/Table

● Divide Table or Box into 3 regions– Above– Visible– Below

● Track geometry of “dummy rectangles” in Above/Below– Replace/insert as needed– Adjust min size of above/below

Above

Below

Visible

CanvasViewport

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to MOVE and RESIZE callbacks on “visible” object(s)

Listen to MOVE and RESIZE callbacks on “invisible rectangle”

Listen to VIEWPORT_RESIZE callbacks on Evas Canvas

Object

0,0 width x height

Page 222: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible

Page 223: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

Page 224: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too

Page 225: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

Page 226: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE

Page 227: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE● It is a multi-windowed system without fixed sizes, just like a desktop UI

Page 228: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE● It is a multi-windowed system without fixed sizes, just like a desktop UI

● Consider loading content data (text labels, other I/O) in threads

Page 229: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE● It is a multi-windowed system without fixed sizes, just like a desktop UI

● Consider loading content data (text labels, other I/O) in threads– Queue/begin this thread worker when visiblity happens

Page 230: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE● It is a multi-windowed system without fixed sizes, just like a desktop UI

● Consider loading content data (text labels, other I/O) in threads– Queue/begin this thread worker when visiblity happens– Create widgets with “dummy” content (eg blank labels)

Page 231: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

“Infinite Scrolling” Trick

● The less content you create when the region becomes visible– The smoother things will be

● Remember to delete content as it exits the viewport too● Remember to track viewport changes

– Windows in Tizen CAN RESIZE● It is a multi-windowed system without fixed sizes, just like a desktop UI

● Consider loading content data (text labels, other I/O) in threads– Queue/begin this thread worker when visiblity happens– Create widgets with “dummy” content (eg blank labels)– Fill text/content once thread is done

Page 232: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

Page 233: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles

Page 234: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

Page 235: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look

Page 236: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look● You can make new custom styles of your own

Page 237: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look● You can make new custom styles of your own● Themes are in EDJ Files (Edje collections of groups)

Page 238: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look● You can make new custom styles of your own● Themes are in EDJ Files (Edje collections of groups)● Custom styles are generally a bad idea because application will not fit in

Page 239: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look● You can make new custom styles of your own● Themes are in EDJ Files (Edje collections of groups)● Custom styles are generally a bad idea because application will not fit in● Use extensions instead of overlays

Page 240: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Widget Styles

● All widgets support styles except– Box, Table, Grid

● Styles allow custiomizing of widget look● You can make new custom styles of your own● Themes are in EDJ Files (Edje collections of groups)● Custom styles are generally a bad idea because application will not fit in● Use extensions instead of overlays

– Add new styles instead of override

Page 241: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Theme Style Lookup

Group2 Group4 Group5

Group1 Group2 Group4

Group1 Group2 Group3

Group4 Group5

Overlay Theme

System Theme

Default Theme

Extension Theme

Lookup for Group1 Lookup for Group2Lookup for Group1 Lookup for Group3 Lookup for Group4 Lookup for Group5

Page 242: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

Page 243: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is

Page 244: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

Page 245: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers

Page 246: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency

Page 247: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles

Page 248: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)

Page 249: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)● State changes can animate by interpolating between states

Page 250: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)● State changes can animate by interpolating between states

● What Edje is NOT

Page 251: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)● State changes can animate by interpolating between states

● What Edje is NOT– An application UI design system

Page 252: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)● State changes can animate by interpolating between states

● What Edje is NOT– An application UI design system– A widget layout system

Page 253: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● What Edje is– Designed as an “overgrown PSD file”

● Multiple layers● Layers can move/resize/show/hide/change color & transparency● Layers can point to image data to use, be text or rectangles● The stored states of layers can be changed in response to signals (e.g from events or app)● State changes can animate by interpolating between states

● What Edje is NOT– An application UI design system– A widget layout system– A chicken

Page 254: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

EDC

collections { images { image: "icon.png" LOSSY 80; // encode icon.png with lossy 80% quality } group { name: "my/group"; // name of this group int he collections parts { part { name: "base"; type: RECT; // a "base" part that is a rect description { state: "default" 0.0; // the default state color: 255 128 0 255; // orange } description { state: "active" 0.0; // an active state color: 255 255 0 255; // yellow } } part { name: "icon"; // icon part - default type is image description { state: "default" 0.0; // the default state rel2.relative: 0.5 1.0; // rel2 (bottom right) relative to middle image.normal: "icon.png"; } } part { name: "label"; type: TEXT; // label part description { state: "default" 0.0; // the default state rel1.to: "icon"; // top-left relative to the icon rel1.relative: 1.0 0.0; // relative to top-right of icon color: 255 255 255 255; // white text.font: "Sans"; text.size: 10; // 10 px Sans font text.text: "Hello"; // text content to show } description { state: "active" 0.0; // an active state inherit: "default" 0.0; // copy state from default then modify color: 0 0 0 255; // black text.text: "Clicked"; // a new text label } } }

programs { program { // when mouse button 1 is down on label signal: "mouse,down,1"; source: "label"; action: STATE_SET "active" 0.0; // set state to active transition: SINUSOIDAL 0.5; // over 0.5 sec with sinusoidal interp target: "label"; // do it to label target: "base"; // do it to base } program { // when mouse button 1 is released on label signal: "mouse,up,1"; source: "label"; action: STATE_SET "default" 0.0; // set state to default transition: SINUSOIDAL 1.0; // over 1 sec with sinusoidal interp target: "label"; // do it to label target: "base"; // do it to base } } }}

Layer

Layer

Layer

Page 255: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years

Page 256: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years● Recently tools like Enventor (ships with Tizen 2.4 SDK) give you a GUI

editing tool

Page 257: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years● Recently tools like Enventor (ships with Tizen 2.4 SDK) give you a GUI

editing tool– Gives you rapid feedback on your changes to save a lot of time and effort

Page 258: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years● Recently tools like Enventor (ships with Tizen 2.4 SDK) give you a GUI

editing tool– Gives you rapid feedback on your changes to save a lot of time and effort– Eflete is even better and is almost pure-GUI EDJE file editing

Page 259: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years● Recently tools like Enventor (ships with Tizen 2.4 SDK) give you a GUI

editing tool– Gives you rapid feedback on your changes to save a lot of time and effort– Eflete is even better and is almost pure-GUI EDJE file editing

● Coming in future – you can download source from git.enlightenment.org

Page 260: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Edje – Graphical Blobs

● Edje has been extended over many years● Recently tools like Enventor (ships with Tizen 2.4 SDK) give you a GUI

editing tool– Gives you rapid feedback on your changes to save a lot of time and effort– Eflete is even better and is almost pure-GUI EDJE file editing

● Coming in future – you can download source from git.enlightenment.org

● EDC files go through CPP so you can use #include, #define, #ifdef etc.

Page 261: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

EDC

#define IMAGE(x) images.image: x LOSSY 80#define DEF “default” 0.0#define ACT “active” 0.0#define TRANS(x) SINUSOIDAL x#define TARGETS target: “label”; target: “base”#define SIGSRC(x, y) signal: x; source: xcollections { IMAGE(“icon.png”); group { name: "my/group"; parts { part { name: "base"; type: RECT; // a "base" part that is a rect description { state: DEF; color: 255 128 0 255; // orange } description { state: ACT; // an active state color: 255 255 0 255; // yellow } } part { name: "icon"; // icon part - default type is image description { state: DEF; rel2.relative: 0.5 1.0; // rel2 (bottom right) relative to middle image.normal: "icon.png"; } } part { name: "label"; type: TEXT; // label part description { state: "default" 0.0; // the default state rel1.to: "icon"; // top-left relative to the icon rel1.relative: 1.0 0.0; // relative to top-right of icon color: 255 255 255 255; // white text.font: "Sans"; text.size: 10; // 10 px Sans font text.text: "Hello"; // text content to show } description { state: ACT; // an active state inherit: "default" 0.0; // copy state from default then modify color: 0 0 0 255; // black text.text: "Clicked"; // a new text label } } }

programs { program { SIGSRC(“mouse,down,1”, “label”); action: STATE_SET ACT; // set state to active transition: TRANS(0.5); // over 0.5 sec with sinusoidal interp TARGETS; } program { SIGSRC(“mouse,up,1”, “label”); action: STATE_SET DEF; // set state to default transition: TRANS(1.0); TARGETS; } } }}

Page 262: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Last - 3D Effects

You don't need OpenGL

Page 263: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

● You can do 2.5D/3D effects on any object

Page 264: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

● You can do 2.5D/3D effects on any object● With imagination you can do 3D simple 3D objects with multiple maps

Page 265: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

● You can do 2.5D/3D effects on any object● With imagination you can do 3D simple 3D objects with multiple maps

Page 266: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

● You can do 2.5D/3D effects on any object● With imagination you can do 3D simple 3D objects with multiple maps

Page 267: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

Evas_Map *m = evas_map_new(4); // new 4 point map – only 4 points are actually guaranteed to work

evas_map_util_points_populate_from_object(m, obj); // fill map points from current object geometry

evas_map_util_3d_rotate(m, 30.0, 20.0, 10.0, center_x, center_y, 0); // rotate map around a center point

evas_map_util_3d_perspective(m, center_screen_x, center_screen_y, 0, pixels_from_camera_to_screen_plane);

evas_object_map_set(obj, m); // set map for this object

evas_map_free(m); // free it – object will retain a reference and release when it is done

evas_object_map_enable_set(obj, EINA_TRUE); // enable the map that is set

Page 268: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

Evas_Map *m = evas_map_new(4); // new 4 point map – only 4 points are actually guaranteed to work

evas_map_util_points_populate_from_object(m, obj); // fill map points from current object geometry

evas_map_util_3d_rotate(m, 30.0, 20.0, 10.0, center_x, center_y, 0); // rotate map around a center point

evas_map_util_3d_perspective(m, center_screen_x, center_screen_y, 0, pixels_from_camera_to_screen_plane);

evas_object_map_set(obj, m); // set map for this object

evas_map_free(m); // free it – object will retain a reference and release when it is done

evas_object_map_enable_set(obj, EINA_TRUE); // enable the map that is set

● Many more ways to use maps to “map an object somewhere else”

Page 269: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

2.5D Mapping

Evas_Map *m = evas_map_new(4); // new 4 point map – only 4 points are actually guaranteed to work

evas_map_util_points_populate_from_object(m, obj); // fill map points from current object geometry

evas_map_util_3d_rotate(m, 30.0, 20.0, 10.0, center_x, center_y, 0); // rotate map around a center point

evas_map_util_3d_perspective(m, center_screen_x, center_screen_y, 0, pixels_from_camera_to_screen_plane);

evas_object_map_set(obj, m); // set map for this object

evas_map_free(m); // free it – object will retain a reference and release when it is done

evas_object_map_enable_set(obj, EINA_TRUE); // enable the map that is set

● Many more ways to use maps to “map an object somewhere else”● Is useful even for 2D rotations as well

Page 270: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

Page 271: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

● If it's hard – you're probably doing it wrong

Page 272: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

● If it's hard – you're probably doing it wrong● Use the facilities provided to save time

Page 273: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

● If it's hard – you're probably doing it wrong● Use the facilities provided to save time

– The higher level ones save more time

Page 274: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

● If it's hard – you're probably doing it wrong● Use the facilities provided to save time

– The higher level ones save more time

● Ask questions to learn and make better code

Page 275: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Remember...

● If it's hard – you're probably doing it wrong● Use the facilities provided to save time

– The higher level ones save more time

● Ask questions to learn and make better code– Real humans are here and happy to talk to you

Page 276: Tizen Native Development Tips to Save Time & …...Tizen Native Development Tips to Save Time & Trouble Tizen Developer Conference 2015 深圳 , 中华人民共和国 Shenzhen, People's

Links

● http://developer.tizen.org– SDK, API Documentation and more

● http://www.enlightenment.org– Upstream EFL API development project

● http://git.enlightenment.org/core/elementary.git/tree/data/themes– Lots of sample EDC files for Edje (a complete theme within this tree of files)

● http://git.enlightenment.org/core/elementary.git/tree/src/bin– Lots of sample code showing how to use lots of Elm APIs

● http://developer.tizen.org/forums– Tizen developer forums for help and advice

● http://www.tizen.org/community/mailing-lists– Mailing lists for Tizen development

● http://www.tizen.org/community/irc– Internet Chat for Tizen

● https://www.enlightenment.org/contact– IRC and E-Mail information for EFL upstream development