Skip to content

intendia-oss/rxgwt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RxGWT: Reactive Extensions for GWT

Maven Central Build Status Join the chat at https://gitter.im/intendia-oss/rxgwt

GWT specific bindings for RxJava (requires RxJava GWT).

This module adds the minimum classes to RxJava that make writing reactive components in GWT applications easy and hassle-free. More specifically, it provides adapters for all available events and various operators like bufferedFinally, debounceFinally, etc.

GWT module system requires all classes used by a module to be included as dependant modules. So to not to force to load all optional modules various independent small modules are exposed by RxGWT.

  • RxGWT.gwt.xml - includes common utils, usually not included explicit as it is included by all other modules
  • RxUser.gwt.xml - includes GWT user dependant utils like RxHandlers and RxEvents
  • RxElemental.gwt.xml - legacy GWT elemental utils
  • RxElemental2.gwt.xml - new generation GWT elemental2 utils
  • RxElemento.gwt.xml - elemento typed events on top of new generation GWT elemental2 utils

Download

Releases are deployed to the Central Repository.

Snapshots of the development version are available in Sonatype's snapshots repository.

Example

Observable<List<double[]>> mouseDiff$ = mouseMove(canvas)
        .map(e -> canvasPosition(canvas, e))
        .buffer(3, 1);

Observable<List<double[]>> mouseDrag$ = mouseDown(canvas).compose(log("mouse down"))
        .flatMap(e -> mouseDiff$.takeUntil(mouseUp(canvas).compose(log("mouse up"))));

Observable<List<double[]>> touchDiff$ = touchMove(canvas)
        .map(e -> e.getTouches().get(0))
        .map(e -> canvasPosition(canvas, e))
        .buffer(2, 1);

Observable<List<double[]>> touchDrag$ = touchStart(canvas).compose(log("touch down"))
        .flatMap(e -> touchDiff$.takeUntil(touchEnd(canvas).compose(log("touch up"))));

Observable<Object> down$ = merge(mouseDown(canvas), touchStart(canvas));
Observable<List<double[]>> drag$ = merge(mouseDrag$, touchDrag$);

Observable<String> paint$ = keyPress(canvas, '1').map(e -> "paint").startWith("default");
Observable<String> erase$ = keyPress(canvas, '2').map(e -> "erase");

All the mouseMove, mouseDown, touchMove, touchStart, touchEnd and keyPress static methods are exposed by the RxGWT API. To find all of them just explore RxGwt, or RxHandlers and RxEvents. RxEvents and RxHandlers are auto-generated using all classes in gwt-user extending from Events and HasValue respectively.

You can see this complete code example here RxCanvas, or other interesting one in RxSnake.