luca filigheddu - sviluppiamo in cascades per blackberry 10

51
Cascades 101 How To Build Astonishing User Interfaces for BlackBerry 10 Luca Filigheddu Head of Developer Evangelism EMEA [email protected] @filos

Upload: girl-geek-dinners-milano

Post on 24-May-2015

1.043 views

Category:

Technology


3 download

DESCRIPTION

Mobile Tea #6

TRANSCRIPT

Page 1: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Cascades 101 How To Build Astonishing User Interfaces for BlackBerry 10

Luca Filigheddu Head of Developer Evangelism EMEA [email protected] @filos

Page 2: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

What is Cascades?

• Qt toolkit • Cascades replaces QtQuick – QtGui • UI runs in separate thread •  “Talks” to C++ and vice-versa

Page 3: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Why Use Cascades?

Elegant UI Framework •  Great looking core UI components •  Easy to build custom UI components •  Dedicated UI tooling including design

preview (w/ Photoshop Plugin)

Increase Productivity •  Higher level APIs •  QT flavoured C++ and declarative UI

approach

Page 4: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

The NDK – Two layers

High Level – Cascades �  High level APIs / C++ �  Qt + QML + JavaScript �  Built-in Elegance, beautiful UI �  Provides the BlackBerry 10 UX Low Level �  Posix/Low level C; great for porting �  Raw OS access, windowing, etc. �  OpenGL ES, OpenAL, ...Excellent for

games �  Great for Open Source Integration

4

Page 5: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Easy to Read, Declaritive QML

5

Objects Properties

Arrays (also properties)

JavaScript functions (also properties)

Page 6: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Visual Tooling

6

Page 7: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Standard UI Components

7

Page 8: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Cascades APIs

8

•  Advertising Service •  App Integration (Invocation Framework) •  BBM integration •  Location •  Payment services (in-app purchases) •  Push services and notifications •  Audio and Video •  Imaging •  Camera •  Sensors •  Networking

Page 9: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Cascades – New in 10.2

9

•  Custom fonts •  Screen reader •  Headless Applications •  GeoFencing •  Bluetooth improvements •  Peripheral discovery •  …MORE…

•  à http://bit.ly/cascades102

Page 10: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

A typical Cascades app

10

Qt/C++ Base

QML-based UI structure

JavaScript-based UI logic

Page 11: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

C++ layer

11

Qt/C++ Base

Qt makes C++ easy to use and provides structure APIs and platform services exposed as C++ classes UI framework exposed as C++ classes Access to the underlying low level NDK and OpenGL

Page 12: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

C++ layer

12

QML UI structure

JavaScript

Declarative UI model – Declare the structure of your app, Cascades will piece it together for you Add runtime logic and react to user events in JavaScript Realtime UI preview in the tool Many platform features exposed in QML as well

Page 13: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Any mix is possible

13

QML UI structure

JavaScript

Qt/C++ Base

Page 14: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Moving between QML and C++ is easy

14

C++

QML

JavaScript myCppFunction()

myCppFunction { }

myJSFunction{ }

myJSFunction() class MyClass { int property; }

MyObject { MyProperty: x }

QmlDocument::create ("asset:///main.qml")

MyObject { MyOtherObj {…} }

Page 15: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Controls

Page 16: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Hello World!

16

Page 17: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Hello world

import bb.cascades 1.0 Page { content: Label { text: "Hello World" } }

Page 18: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Same thing in C++

Page* root = new Page; Label* label = Label::create() .text("Hello World"); root->setContent(label); Application::instance()->setScene(root);

Page 19: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

What to choose?

C++ QML

Page 20: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Application structure controls

Page

Action bar

Tab menu Action menu Context menu

Page 21: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Application structure controls

“navigation transition”

Navigation pane

Title bar “peek”

Page 22: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

More controls…

Checkbox Radio group Button, Toggle button

Label Text field Date/time picker

Slider, Text area

ImageView

Page 23: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Custom controls

Page 24: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Architecture

Page 25: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

25

60 fps!

Page 26: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Client server architecture

Client Server

Tell the server what to render

Get events back

Page 27: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Client Server

Application

Cascades Tap

React

Scroll list

Fetch data

Do something

else

Start animation

Page 28: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Scene Graph

Page 29: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Scene Graph

Root Container

Text: “Hello World”

Container

Hello World

RotationZ Scale Opacity

Page 30: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

In QML

Container { opacity: 0.5 scaleX: 1.5; scaleY: 1.5 rotationZ: 45 ImageView { … } Label { … } }

Page 31: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

C++  

Container *bubble= new Container(); bubble->setOpacity(0.5f); bubble->setScale(1.5f); bubble->setRotationZ(45); bubble->add(ImageView::create() ... ); bubble->add(Label::create() ... ); …

Page 32: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Animations

Page 33: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Animations

�  Translate, rotate, scale, fade �  Implicit animations �  Explicit animations �  Duration, start/end, easing curve �  Grouped animations

33

Page 34: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Events

Page 35: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Example

Page 36: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Handling  Touch  Events  in  QML  

Container{ onTouch: { if (event.isDown()) { scaleX = 2; scaleY = 2;

rotationZ = 45; } else if (event.isUp()){ scaleX = 1; scaleY = 1;

rotationZ = 0; } } } }  

Page 37: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Layouts

Page 38: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

StackLayout & DockLayout

Page 39: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Container { layout: DockLayout {} Cow { horizontalAlignment: HorizontalAlignment.Center verticalAlignment: VerticalAlignment.Top } Cow { horizontalAlignment: HorizontalAlignment.Center verticalAlignment: VerticalAlignment.Center } }

Page 40: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Container { layout: StackLayout { orientation: LayoutOrientation.TopToBottom } Cow { layoutProperties: StackLayoutProperties { spaceQuota: 1 } } Cow { layoutProperties: StackLayoutProperties { spaceQuota: 2 } } }

Page 41: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Custom controls

Page 42: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10
Page 43: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Container DockLayout

SpeedGauge

RotationZ (-10) RotationZ (-40) TranslationY (30) TranslationY(30)

Page 44: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Lists

Page 45: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

List Items

�  Prepackaged item types �  Header �  StandardListItem

�  Custom list item �  “Anything”

45

Page 46: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Data binding

DataModel  

JSON   SQL  

XML  Grouped  Array   QList   custom  

Page 47: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

UI adaptability

Page 48: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Multiple Form Factors

Page 49: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

How create an adaptable UI?

�  Built in controls adapt to device type �  Layouts, space quota, 9-sliced images, … �  Unique (sub)set of assets per configuration

Page 50: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Asset selectors

Based on resolution and/or visual style

       assets/                  main_screen.qml                  dialog.qml                  picture.png                  icon.png                  720x720/                          main_screen.qml                          picture.png  

Page 51: Luca Filigheddu - Sviluppiamo in Cascades per Blackberry 10

Questions? / Answers!

Feel free to email me: [email protected]

51