From 346117fdacf4e83625bd0d28b98e51228cbd2b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Renaudeau?= Date: Fri, 18 Sep 2015 13:42:04 +0200 Subject: [PATCH] Add support for eventsThrough and autoRedraw props Related to https://github.com/ProjectSeptemberInc/gl-react/commit/c7a937c71f7c5238a32453a6c87197119f22364b --- Examples/Simple/Blur.js | 4 +-- Examples/Simple/Blur1D.js | 3 ++- Examples/Simple/HueRotate.js | 5 ++-- Examples/Simple/index.ios.js | 48 +++++++++++++++++++++++++++++++++--- RNGL/GLCanvas.h | 2 ++ RNGL/GLCanvas.m | 36 ++++++++++++++++++++++++--- RNGL/GLCanvasManager.m | 2 ++ 7 files changed, 88 insertions(+), 12 deletions(-) diff --git a/Examples/Simple/Blur.js b/Examples/Simple/Blur.js index 59d3723..ccda710 100644 --- a/Examples/Simple/Blur.js +++ b/Examples/Simple/Blur.js @@ -4,8 +4,8 @@ const Blur1D = require("./Blur1D"); class Blur extends GL.Component { render () { - const { width, height, factor, children } = this.props; - return + const { width, height, factor, children, ...rest } = this.props; + return {children} diff --git a/Examples/Simple/Blur1D.js b/Examples/Simple/Blur1D.js index 1202255..4d0499e 100644 --- a/Examples/Simple/Blur1D.js +++ b/Examples/Simple/Blur1D.js @@ -35,8 +35,9 @@ void main () { class Blur1D extends GL.Component { render () { - const { width, height, direction, children: t } = this.props; + const { width, height, direction, children: t, ...rest } = this.props; return @@ -68,6 +76,7 @@ class Simple extends React.Component { 3. Hue Rotate on Text+Image @@ -124,6 +133,39 @@ class Simple extends React.Component { onValueChange={factor => this.setState({ factor })} /> + + 8. Blur (2-pass) over UI + + + + + + this.setState({ factor })} + /> + + this.setState({ switch1 })} /> + this.setState({ switch2 })} /> + this.setState({ switch3 })} /> + + + + + + + + + ; } diff --git a/RNGL/GLCanvas.h b/RNGL/GLCanvas.h index 7a8019e..f53d3f8 100644 --- a/RNGL/GLCanvas.h +++ b/RNGL/GLCanvas.h @@ -5,6 +5,8 @@ @property (nonatomic) GLData *data; @property (nonatomic) BOOL opaque; +@property (nonatomic) BOOL autoRedraw; +@property (nonatomic) BOOL eventsThrough; @property (nonatomic) NSNumber *nbContentTextures; @property (nonatomic) NSNumber *renderId; @property (nonatomic) NSArray *imagesToPreload; diff --git a/RNGL/GLCanvas.m b/RNGL/GLCanvas.m index a501b60..4e7d4eb 100644 --- a/RNGL/GLCanvas.m +++ b/RNGL/GLCanvas.m @@ -31,6 +31,10 @@ NSMutableArray *_preloaded; BOOL _preloadingDone; + + CADisplayLink *displayLink; + + NSTimer *animationTimer; } - (instancetype)initWithBridge:(RCTBridge *)bridge @@ -107,6 +111,29 @@ NSString* srcResource (id res) } } +- (void)setAutoRedraw:(BOOL)autoRedraw +{ + if (autoRedraw) { + if (!animationTimer) + animationTimer = // FIXME: can we do better than this? + [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 + target:self + selector:@selector(setNeedsDisplay) + userInfo:nil + repeats:YES]; + } + else { + if (animationTimer) { + [animationTimer invalidate]; + } + } +} + +- (void)setEventsThrough:(BOOL)eventsThrough +{ + self.userInteractionEnabled = !eventsThrough; +} + - (void)setData:(GLData *)data { _data = data; @@ -302,12 +329,13 @@ NSString* srcResource (id res) - (void)drawRect:(CGRect)rect { + if (!_preloadingDone) { glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); return; } - BOOL needsDeferredRendering = _nbContentTextures > 0; + BOOL needsDeferredRendering = _nbContentTextures > 0 && !_autoRedraw; if (needsDeferredRendering && !_deferredRendering) { dispatch_async(dispatch_get_main_queue(), ^{ _deferredRendering = true; @@ -315,15 +343,15 @@ NSString* srcResource (id res) }); } else { - [self render:rect]; + [self render]; _deferredRendering = false; } } -- (void)render:(CGRect)rect +- (void)render { if (!_renderData) return; - + self.layer.opaque = _opaque; CGFloat scale = RCTScreenScale(); diff --git a/RNGL/GLCanvasManager.m b/RNGL/GLCanvasManager.m index d3c934c..816409c 100644 --- a/RNGL/GLCanvasManager.m +++ b/RNGL/GLCanvasManager.m @@ -20,6 +20,8 @@ RCT_EXPORT_MODULE(); RCT_EXPORT_VIEW_PROPERTY(nbContentTextures, NSNumber); RCT_EXPORT_VIEW_PROPERTY(opaque, BOOL); +RCT_EXPORT_VIEW_PROPERTY(autoRedraw, BOOL); +RCT_EXPORT_VIEW_PROPERTY(eventsThrough, BOOL); RCT_EXPORT_VIEW_PROPERTY(data, GLData); RCT_EXPORT_VIEW_PROPERTY(renderId, NSNumber); RCT_EXPORT_VIEW_PROPERTY(imagesToPreload, NSArray); -- 2.26.2