Commit 3fa270ed authored by Gaëtan Renaudeau's avatar Gaëtan Renaudeau

reorganize code

parent 329faf6b
...@@ -12,6 +12,20 @@ ...@@ -12,6 +12,20 @@
#import "GLRenderData.h" #import "GLRenderData.h"
#import "UIView+React.h" #import "UIView+React.h"
NSString* srcResource (id res)
{
NSString *src;
if ([res isKindOfClass:[NSString class]]) {
src = [RCTConvert NSString:res];
} else {
BOOL isStatic = [RCTConvert BOOL:res[@"isStatic"]];
src = [RCTConvert NSString:res[@"path"]];
if (!src || isStatic) src = [RCTConvert NSString:res[@"uri"]];
}
return src;
}
// For reference, see implementation of gl-shader's GLCanvas // For reference, see implementation of gl-shader's GLCanvas
@implementation GLCanvas @implementation GLCanvas
...@@ -32,8 +46,6 @@ ...@@ -32,8 +46,6 @@
NSMutableArray *_preloaded; NSMutableArray *_preloaded;
BOOL _preloadingDone; BOOL _preloadingDone;
CADisplayLink *displayLink;
NSTimer *animationTimer; NSTimer *animationTimer;
} }
...@@ -52,6 +64,8 @@ ...@@ -52,6 +64,8 @@
RCT_NOT_IMPLEMENTED(-init) RCT_NOT_IMPLEMENTED(-init)
//// Props Setters
-(void)setImagesToPreload:(NSArray *)imagesToPreload -(void)setImagesToPreload:(NSArray *)imagesToPreload
{ {
if (_preloadingDone) return; if (_preloadingDone) return;
...@@ -65,45 +79,12 @@ RCT_NOT_IMPLEMENTED(-init) ...@@ -65,45 +79,12 @@ RCT_NOT_IMPLEMENTED(-init)
_imagesToPreload = imagesToPreload; _imagesToPreload = imagesToPreload;
} }
- (void)dispatchOnLoad
{
if (_onLoad) {
[_bridge.eventDispatcher sendInputEventWithName:@"load" body:@{ @"target": self.reactTag }];
}
}
- (void)dispatchOnProgress: (double)progress withLoaded:(int)loaded withTotal:(int)total
{
if (_onProgress) {
NSDictionary *event =
@{
@"target": self.reactTag,
@"progress": @(progress),
@"loaded": @(loaded),
@"total": @(total) };
[_bridge.eventDispatcher sendInputEventWithName:@"progress" body:event];
}
}
- (void)setOpaque:(BOOL)opaque - (void)setOpaque:(BOOL)opaque
{ {
_opaque = opaque; _opaque = opaque;
[self setNeedsDisplay]; [self setNeedsDisplay];
} }
NSString* srcResource (id res)
{
NSString *src;
if ([res isKindOfClass:[NSString class]]) {
src = [RCTConvert NSString:res];
} else {
BOOL isStatic = [RCTConvert BOOL:res[@"isStatic"]];
src = [RCTConvert NSString:res[@"path"]];
if (!src || isStatic) src = [RCTConvert NSString:res[@"uri"]];
}
return src;
}
- (void)setRenderId:(NSNumber *)renderId - (void)setRenderId:(NSNumber *)renderId
{ {
if (_nbContentTextures > 0) { if (_nbContentTextures > 0) {
...@@ -141,18 +122,26 @@ NSString* srcResource (id res) ...@@ -141,18 +122,26 @@ NSString* srcResource (id res)
[self syncEventsThrough]; [self syncEventsThrough];
} }
- (void) syncEventsThrough
{
self.userInteractionEnabled = !(_eventsThrough);
self.superview.userInteractionEnabled = !(_eventsThrough && !_visibleContent);
}
- (void)setData:(GLData *)data - (void)setData:(GLData *)data
{ {
_data = data; _data = data;
[self requestSyncData]; [self requestSyncData];
} }
- (void)setNbContentTextures:(NSNumber *)nbContentTextures
{
[self resizeUniformContentTextures:[nbContentTextures intValue]];
_nbContentTextures = nbContentTextures;
}
//// Sync methods (called from props setters)
- (void) syncEventsThrough
{
self.userInteractionEnabled = !(_eventsThrough);
self.superview.userInteractionEnabled = !(_eventsThrough && !_visibleContent);
}
- (void)requestSyncData - (void)requestSyncData
{ {
[self syncData]; [self syncData];
...@@ -275,60 +264,6 @@ NSString* srcResource (id res) ...@@ -275,60 +264,6 @@ NSString* srcResource (id res)
} }
} }
- (int)countPreloaded
{
int nb = 0;
for (id toload in _imagesToPreload) {
if ([_preloaded containsObject:srcResource(toload)])
nb++;
}
return nb;
}
- (void)onImageLoad:(NSString *)loaded
{
if (!_preloadingDone) {
[_preloaded addObject:loaded];
int count = [self countPreloaded];
int total = (int) [_imagesToPreload count];
double progress = ((double) count) / ((double) total);
[self dispatchOnProgress:progress withLoaded:count withTotal:total];
if (count == total) {
[self dispatchOnLoad];
_preloadingDone = true;
[self requestSyncData];
}
}
else {
// Any texture image load will trigger a future re-sync of data (if no preloaded)
[self requestSyncData];
}
}
- (void)setNbContentTextures:(NSNumber *)nbContentTextures
{
[self resizeUniformContentTextures:[nbContentTextures intValue]];
_nbContentTextures = nbContentTextures;
}
- (void)resizeUniformContentTextures:(int)n
{
[EAGLContext setCurrentContext:self.context];
int length = (int) [_contentTextures count];
if (length == n) return;
if (n < length) {
_contentTextures = [_contentTextures subarrayWithRange:NSMakeRange(0, n)];
}
else {
NSMutableArray *contentTextures = [[NSMutableArray alloc] initWithArray:_contentTextures];
for (int i = (int) [_contentTextures count]; i < n; i++) {
[contentTextures addObject:[[GLTexture alloc] init]];
}
_contentTextures = contentTextures;
}
}
- (void)syncContentTextures - (void)syncContentTextures
{ {
int i = 0; int i = 0;
...@@ -346,6 +281,9 @@ NSString* srcResource (id res) ...@@ -346,6 +281,9 @@ NSString* srcResource (id res)
} }
} }
//// Draw
- (void)drawRect:(CGRect)rect - (void)drawRect:(CGRect)rect
{ {
...@@ -427,6 +365,73 @@ NSString* srcResource (id res) ...@@ -427,6 +365,73 @@ NSString* srcResource (id res)
} }
} }
//// utility methods
- (void)onImageLoad:(NSString *)loaded
{
if (!_preloadingDone) {
[_preloaded addObject:loaded];
int count = [self countPreloaded];
int total = (int) [_imagesToPreload count];
double progress = ((double) count) / ((double) total);
[self dispatchOnProgress:progress withLoaded:count withTotal:total];
if (count == total) {
[self dispatchOnLoad];
_preloadingDone = true;
[self requestSyncData];
}
}
else {
// Any texture image load will trigger a future re-sync of data (if no preloaded)
[self requestSyncData];
}
}
- (int)countPreloaded
{
int nb = 0;
for (id toload in _imagesToPreload) {
if ([_preloaded containsObject:srcResource(toload)])
nb++;
}
return nb;
}
- (void)resizeUniformContentTextures:(int)n
{
[EAGLContext setCurrentContext:self.context];
int length = (int) [_contentTextures count];
if (length == n) return;
if (n < length) {
_contentTextures = [_contentTextures subarrayWithRange:NSMakeRange(0, n)];
}
else {
NSMutableArray *contentTextures = [[NSMutableArray alloc] initWithArray:_contentTextures];
for (int i = (int) [_contentTextures count]; i < n; i++) {
[contentTextures addObject:[[GLTexture alloc] init]];
}
_contentTextures = contentTextures;
}
}
- (void)dispatchOnLoad
{
if (_onLoad) {
[_bridge.eventDispatcher sendInputEventWithName:@"load" body:@{ @"target": self.reactTag }];
}
}
- (void)dispatchOnProgress: (double)progress withLoaded:(int)loaded withTotal:(int)total
{
if (_onProgress) {
NSDictionary *event =
@{
@"target": self.reactTag,
@"progress": @(progress),
@"loaded": @(loaded),
@"total": @(total) };
[_bridge.eventDispatcher sendInputEventWithName:@"progress" body:event];
}
}
@end @end
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment