Responsive Applications Tutorial - EclipseCon 2014.pdf

Post on 02-Jan-2017

239 views 3 download

Transcript of Responsive Applications Tutorial - EclipseCon 2014.pdf

Creating Responsive SWT Applications

Creating Responsive SWT Applications

Jordi Böhme López Holger Staudacher

The Plan for this Tutorial

1. Status Quo 2. The Problem 3. The Solution 4. Hands-On 5. Results

Goal

Goal

Responsive Application ==

Responsive Design

Responsive Adapt the layout to the viewing environment

by using a fluid, proportion-based grid, flexible resources and rules.

Design Layout of the User Interface elements by

understanding interaction design and how it can enable a

pleasurable end user experience.

The Evolution of the

User Interface

80x24(480x240)

640x480

800x600

1024x768

3360x2100

480x240

640x480800x600

1024x768

3360x2100

1080p

Layouting the User Interface

SWT on the Desktop !

SWT RCP/Workbench

SWT in the Browser on Desktop & Mobile

!

RAP(Remote Application Platform)

SWT Layouts

A. Layout B. LayoutData

SWT Layout

Layout

LayoutData

LayoutData

Layout

LayoutData

LayoutData

FillLayout (distribute space equally)

���041�)9QGMLK

FillLayout

U FillLayout <AKLJA:ML=K�L@=�9N9AD9:D=�KH9;=�=IM9DDQ

U l.margin{Height,Width} K=LK�E9J?AFK

U l.spacing K=LK�KH9;=�:=LO==F�;=DDK

V������";DAHK=0GMJ;=

RowLayout (fill line-by-line or row-by-row)

���041�)9QGMLK

RowLayout

U RowLayout HD9;=K�9DD�;GFLJGDK�AF�JGOK���;GDMEFK���OJ9HK�:Q�<=>9MDL

U AK�;MKLGEAR=<�L@JGM?@�>A=D<K�G> RowLayout 9F< RowData

V������";DAHK=0GMJ;=

GridLayout (place in grid l-to-r, t-to-b)

���041�)9QGMLK

GridLayout

U GridLayout HGKALAGFK�;GFLJGDK�>JGE�D=>L�LG�JA?@L��LGH�LG�:GLLGE�AF�9?JA<

U AK�;MKLGEAR=<�L@JGM?@�>A=D<K�G> GridLayout 9F< GridData

U ;GFLJGDK�;9F�KH9F�K=N=J9D�JGOK�GJ�;GDMEFK��K== GridData�

V������";DAHK=0GMJ;=

GridLayout (place in grid l-to-r, t-to-b)

1 2

3 4 5

6 7 8

FormLayout (place relative to others)

���041�)9QGMLK

FormAttachment

U FormAttachments canU J=>=J�LG�9�H=J;=FL9?=�G>�L@=�H9J=FL�K�OA<L@���@=A?@LU J=D9L=�LG�L@=�KA<=�G>�9FGL@=J�;GFLJGD

V������";DAHK=0GMJ;=

Other SWT Layout

StackLayout (stack of "cards", one on top)

!

MigLayout (advanced 3rd party layout)

So, what is the problem?

Is there a solution?

Responsive Web Design

Media Queries Grid

Flexible Images Relative Units

Media Queries to distinguish

MobileDesktop

TV Print

Grid based CSS Layouts

Fixed (Width) Columns !

Fluid Columns

Fixed Grid

Fluid Grid

Flexible Resources

Images

Typography / Fonts

Always prefer relative units like percentages,

rather than absolute units like pixels or points.

FluidGrid (Golden Grid System)

4 Columns: 0 - 720px 8 Columns: 720 - 1872px 16 Columns: 1872 - ∞px

Responsive Web Design !

HTML + CSS + JavaScript

Responsive Design for SWT?

Challenges !

1. SWT & RAP Compatibility 2. Don’t reinvent the Wheel 3. Standalone Library 4. Readable Code

Passe-Partout Open-Source (EPL)

http://github.com/eclipsesource/tabris

Passe-Partout (or passepartout) is the French term for a mat, a paper or, more

usually, cardboard sheet with a cutout, which is placed under the glass in a picture frame.

Query Engine !

Single Jar !

Only depends on: org.eclipse.swt

!

SWT Layout !

Flexible Resources

Passe-Partout API

We prefer fluent API for better readability…

PassePartout. PassePartout. PassePartout. PassePartout. PassePartout. PassePartout.

createFluidGrid( … ); createFluidGridData( … ); when( … ); then( … ); px( … ); font( … );

Our Konami Code for Java

PassePartout. PassePartout. PassePartout. PassePartout. PassePartout. PassePartout.

createFluidGrid( … ); createFluidGridData( … ); when( … ); then( … ); px( … ); font( … );

Our Konami Code for Java

import static com.eclipsesource.tabris.passepartout.PassePartout

PassePartout. PassePartout. PassePartout. PassePartout. PassePartout. PassePartout.

createFluidGrid( … ); createFluidGridData( … ); when( … ); then( … ); px( … ); font( … );

Our Konami Code for Java

import static com.eclipsesource.tabris.passepartout.PassePartout

createFluidGrid( … ); createFluidGridData( … ); when( … ); then( … ); px( … ); font( … );

Rules

when( minWidth( px( 720 ) ) ).then( columns( 4 ) ); when( maxWidth( px( 719 ) ) ).then( columns( 4 ) );

when( … ).and( … ).then( …,…,… );

Rule

Query

Condition(s)Instruction(s)

Units

px( int ); percentage( double ); em( double );

Absolute Relative

Units

px( int );

em == a unit with the width of the capital "M"

percentage( double ); em( double );

Absolute Relative

FluidGridLayout

Composite composite = new Composite( parent, SWT.NONE ); composite.setLayout( createFluidGrid() );

4 Columns: 0 - 720px 8 Columns: 720 - 1872px 16 Columns: 1872 - ∞px

FluidGridData

Composite child = new Composite( parent, SWT.NONE ); child.setLayoutData( createFluidGridData( rule1, rule2 ) );

Composite parent = new Composite( parent, SWT.NONE ); parent.setLayout( createFluidGrid() ); !Composite yellow = new Composite( parent, SWT.NONE ); yellow.setLayoutData( createFluidGridData( when( minWidth( px( 720 ) ) ).then( columns( 4 ) ), when( maxWidth( px( 719 ) ) ).then( columns( 4 ) ) ) ); !Composite green = new Composite( parent, SWT.NONE ); green.setLayoutData( createFluidGridData( when( minWidth( px( 720 ) ) ).then( columns( 4 ) ), when( maxWidth( px( 719 ) ) ).then( columns( 4 ) ) ) );

Resources

Label label = new Label( parent, SWT.NONE ); createResource( when( … ).then( image( smallImage ) ), when( … ).then( image( largeImage ) ) ).bindTo( label );

QueryListenerFluidGridLayout grid = createFluidGrid(); grid.addQueryListener( rule, new QueryListener() { @Override public void activated( Query query ) { // create controls } @Override public void deactivated( Query query ) { // destroy controls } } );

Break

IDE & Workspace Setup

In Eclipse, go to: Window » Preferences » Java » Editor » Content Assist » Favorites

and add: com.eclipsesource.tabris.passepartout.PassePartout

Static Imports

Your Mission: Create a responsive UI

Now, Team Up!

Project Setup

Show Off Your Results

1. Sign in to http://eclipsecon.org

2. Select this session to evaluate

3. Vote:

Thank You

+1 0 -1

Everytime you vote -1, a fairy dies

Questions & Feedbackhttp://github.com/eclipsesource/tabris

http://developer.eclipsesource.com/tabris/docs/1.3/working/responsive-design/

@hstaudacher, @jordibohmelopez