Author: filipzelic
Date: Fri Aug 21 23:42:21 2015
New Revision: 38915
URL: http://svn.gna.org/viewcvs/gnustep?rev=38915&view=rev
Log:
Updating test applications to use nextFrameTime.
Change-Id: If67e5d40e93183408fd332842f388d7c8c472101
Modified:
libs/quartzcore/trunk/ChangeLog
libs/quartzcore/trunk/Source/CALayer.m
libs/quartzcore/trunk/Tests/hello_carenderer.m
libs/quartzcore/trunk/Tests/offscreen_render.m
Modified: libs/quartzcore/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/quartzcore/trunk/ChangeLog?rev=38915&r1=38914&r2=38915&view=diff
==============================================================================
--- libs/quartzcore/trunk/ChangeLog (original)
+++ libs/quartzcore/trunk/ChangeLog Fri Aug 21 23:42:21 2015
@@ -1,3 +1,12 @@
+2015-08-19 Filip Zelic <[email protected]>
+
+ * Source/CALayer.m
+ Fixed problem with not redrawing when implicit animations are not
created.
+
+ * Tests/hello_carenderer.m
+ * Tests/offscreen_render.m
+ Implementing delegate method so that all demos render only as needed.
+
2015-08-13 Filip Zelic <[email protected]>
* Headers/QuartzCore/CAMediaTiming.h
Modified: libs/quartzcore/trunk/Source/CALayer.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/quartzcore/trunk/Source/CALayer.m?rev=38915&r1=38914&r2=38915&view=diff
==============================================================================
--- libs/quartzcore/trunk/Source/CALayer.m (original)
+++ libs/quartzcore/trunk/Source/CALayer.m Fri Aug 21 23:42:21 2015
@@ -438,6 +438,7 @@
[self willChangeValueForKey: @ #prop]; \
_ ## prop = prop; \
[self didChangeValueForKey: @ #prop]; \
+ [self takeNoteThatNextFrameTimeChanged]; \
}
GSCA_OBSERVABLE_SETTER(setPosition, CGPoint, position, CGPointEqualToPoint)
@@ -446,8 +447,16 @@
GSCA_OBSERVABLE_SETTER(setSublayerTransform, CATransform3D, sublayerTransform,
CATransform3DEqualToTransform)
GSCA_OBSERVABLE_SETTER(setShadowOffset, CGSize, shadowOffset,
CGSizeEqualToSize)
+#else
+
+- (void) setPosition: (CGPoint)position
+{
+ _position = position;
+ [self takeNoteThatNextFrameTimeChanged];
+}
#endif
+
- (void) setBounds: (CGRect)bounds
{
if (CGRectEqualToRect(bounds, _bounds))
@@ -472,24 +481,30 @@
{
if (backgroundColor == _backgroundColor)
return;
-
+
[self willChangeValueForKey: @"backgroundColor"];
CGColorRetain(backgroundColor);
CGColorRelease(_backgroundColor);
_backgroundColor = backgroundColor;
[self didChangeValueForKey: @"backgroundColor"];
+ // NOTE: -takeNoteThatNextFrameTime is called due to the application not
redrawing when
+ // implicit animations are not created.
+ [self takeNoteThatNextFrameTimeChanged];
}
- (void)setShadowColor: (CGColorRef)shadowColor
{
if (shadowColor == _shadowColor)
return;
-
+
[self willChangeValueForKey: @"shadowColor"];
CGColorRetain(shadowColor);
CGColorRelease(_shadowColor);
_shadowColor = shadowColor;
[self didChangeValueForKey: @"shadowColor"];
+ // NOTE: -takeNoteThatNextFrameTime is called due to the application not
redrawing when
+ // implicit animations are not created.
+ [self takeNoteThatNextFrameTimeChanged];
}
- (void)setShadowPath: (CGPathRef)shadowPath
@@ -502,6 +517,9 @@
CGPathRelease(_shadowPath);
_shadowPath = shadowPath;
[self didChangeValueForKey: @"shadowPath"];
+ // NOTE: -takeNoteThatNextFrameTime is called due to the application not
redrawing when
+ // implicit animations are not created.
+ [self takeNoteThatNextFrameTimeChanged];
}
/* ***************** */
@@ -1049,7 +1067,7 @@
if (styleActions)
{
NSObject<CAAction>* dictValue = [styleActions objectForKey: key];
-
+
if ([dictValue isKindOfClass: [NSNull class]])
{
/* Abort search */
Modified: libs/quartzcore/trunk/Tests/hello_carenderer.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/quartzcore/trunk/Tests/hello_carenderer.m?rev=38915&r1=38914&r2=38915&view=diff
==============================================================================
--- libs/quartzcore/trunk/Tests/hello_carenderer.m (original)
+++ libs/quartzcore/trunk/Tests/hello_carenderer.m Fri Aug 21 23:42:21 2015
@@ -42,11 +42,13 @@
#import <QuartzCore/CARenderer.h>
#import <QuartzCore/CALayer.h>
#import <QuartzCore/CABase.h>
+#import <QuartzCore/CATransaction.h>
#else
#import <GSQuartzCore/AppleSupport.h>
#import <GSQuartzCore/CARenderer.h>
#import <GSQuartzCore/CALayer.h>
#import <GSQuartzCore/CABase.h>
+#import <GSQuartzCore/CATransaction.h>
#endif
#import "QCTestOpenGLView.h"
@@ -77,7 +79,7 @@
/* ******************** */
-@interface HelloCARendererOpenGLView : QCTestOpenGLView
+@interface HelloCARendererOpenGLView : QCTestOpenGLView <GSCARendererDelegate>
{
CARenderer * _renderer;
HelloCARendererLayerDelegate * _layerDelegate;
@@ -113,7 +115,7 @@
[layer setBackgroundColor: yellowColor];
[layer setDelegate: _layerDelegate];
[layer setNeedsDisplay];
-
+
#if GNUSTEP || GSIMPL_UNDER_COCOA
_renderer = [CARenderer rendererWithNSOpenGLContext: [self openGLContext]
options: nil];
@@ -124,7 +126,9 @@
[_renderer retain];
[_renderer setLayer: layer];
[_renderer setBounds: NSRectToCGRect([self bounds])];
-
+ //NOTE: Setting a delegate only because of -nextFrameTime
+ [_renderer setDelegate: self];
+
CGColorRelease(yellowColor);
}
@@ -145,10 +149,10 @@
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, [self frame].size.width, 0, [self frame].size.height, -1, 1);
-
+
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
+
/* */
[_renderer beginFrameAtTime: CACurrentMediaTime()
timeStamp: NULL];
@@ -156,7 +160,7 @@
[_renderer render];
[_renderer endFrame];
/* */
-
+
{
#if GNUSTEP || GSIMPL_UNDER_COCOA
// FIXME: this is unneeded under cocoa and should be unnecessary with GS
@@ -174,20 +178,42 @@
glColor3f(0.0, 0.0, 1.0);
glVertex2f(100.0, 100.0);
glEnd();
-
+
}
-
+
glFlush();
[[self openGLContext] flushBuffer];
-
- _timer = [NSTimer scheduledTimerWithTimeInterval: 1./60 //[_renderer
nextFrameTime]-CACurrentMediaTime()
+
+ _timer = [NSTimer scheduledTimerWithTimeInterval: [_renderer
nextFrameTime]-CACurrentMediaTime()
target: self
selector: @selector(timerAnimation:)
userInfo: nil
repeats: NO];
}
+-(void) nextFrameTimeDidChange
+{
+ CFTimeInterval currentTime = CACurrentMediaTime();
+ NSLog(@"Current time %g", currentTime);
+ NSLog(@"GSCARendererDelegate - next frame time did change: next frame time
is %g", [_renderer nextFrameTime]);
+
+ // TODO: Remove once implicit animations are properly integrated into
NSRunLoop.
+ if ([[CATransaction topTransaction] isImplicit])
+ {
+ [CATransaction commit];
+ }
+
+ if (isinf([_renderer nextFrameTime]) || [_renderer nextFrameTime] <
currentTime)
+ {
+ [_timer invalidate];
+ _timer = [NSTimer scheduledTimerWithTimeInterval: [_renderer
nextFrameTime]-currentTime
+ target: self
+ selector:
@selector(timerAnimation:)
+ userInfo: nil
+ repeats: NO];
+ }
+}
@end
Modified: libs/quartzcore/trunk/Tests/offscreen_render.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/quartzcore/trunk/Tests/offscreen_render.m?rev=38915&r1=38914&r2=38915&view=diff
==============================================================================
--- libs/quartzcore/trunk/Tests/offscreen_render.m (original)
+++ libs/quartzcore/trunk/Tests/offscreen_render.m Fri Aug 21 23:42:21 2015
@@ -91,7 +91,7 @@
/* ******************** */
-@interface OffscreenRenderOpenGLView : QCTestOpenGLView
+@interface OffscreenRenderOpenGLView : QCTestOpenGLView <GSCARendererDelegate>
{
CARenderer * _renderer;
CALayer * _theSublayer;
@@ -280,7 +280,8 @@
[_renderer retain];
[_renderer setLayer: layer];
[_renderer setBounds: NSRectToCGRect([self bounds])];
-
+ [_renderer setDelegate:self];
+
OffscreenRenderCustomLayer * layer2 = [OffscreenRenderCustomLayer layer];
[layer2 setBounds: CGRectMake (0, 0, 100, 100)];
[layer2 setBackgroundColor: greenColor];
@@ -289,8 +290,8 @@
[layer2 setNeedsDisplay];
[layer addSublayer: layer2];
_theSublayer = [layer2 retain];
-
-
+
+
OffscreenRenderCustomLayer * layer3 = [OffscreenRenderCustomLayer layer];
[layer3 setBounds: CGRectMake (0, 0, 125, 125)];
[layer3 setValue:(id)blueColor forKey:@"backgroundColor"]; // testing KVC
for colors
@@ -300,15 +301,15 @@
[layer3 setShadowOpacity: 1.0];
[layer addSublayer: layer3];
_theShadowedSublayer = [layer3 retain];
-
-
+
+
OffscreenRenderCustomLayer * layer4 = [OffscreenRenderCustomLayer layer];
[layer4 setBounds: CGRectMake (0, 0, 125, 125)];
[layer4 setSize: CGSizeMake(100, 100)];
[layer4 setNeedsDisplay];
[layer4 setPosition: CGPointMake (0, [layer bounds].size.height)];
[layer addSublayer: layer4];
-
+
CFURLRef poweredByGNUstepURL = (CFURLRef)[[NSBundle mainBundle]
URLForResource:@"PoweredByGNUstep" withExtension:@"tiff"];
CGImageSourceRef poweredByGNUstepSource =
CGImageSourceCreateWithURL(poweredByGNUstepURL, NULL);
CGImageRef poweredByGNUstepImage =
CGImageSourceCreateImageAtIndex(poweredByGNUstepSource, 0, NULL);
@@ -374,10 +375,10 @@
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, [self frame].size.width, 0, [self frame].size.height, -1, 1);
-
+
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
+
/* */
[_renderer beginFrameAtTime: CACurrentMediaTime()
timeStamp: NULL];
@@ -385,18 +386,40 @@
[_renderer render];
[_renderer endFrame];
/* */
-
+
glFlush();
[[self openGLContext] flushBuffer];
-
- _timer = [NSTimer scheduledTimerWithTimeInterval: 1./60 //[_renderer
nextFrameTime]-CACurrentMediaTime()
+
+ _timer = [NSTimer scheduledTimerWithTimeInterval: [_renderer
nextFrameTime]-CACurrentMediaTime()
target: self
selector: @selector(timerAnimation:)
userInfo: nil
repeats: NO];
}
+-(void) nextFrameTimeDidChange
+{
+ CFTimeInterval currentTime = CACurrentMediaTime();
+ NSLog(@"Current time %g", currentTime);
+ NSLog(@"GSCARendererDelegate - next frame time did change: next frame time
is %g", [_renderer nextFrameTime]);
+
+ // TODO: Remove once implicit animations are properly integrated into
NSRunLoop.
+ if ([[CATransaction topTransaction] isImplicit])
+ {
+ [CATransaction commit];
+ }
+
+ if (isinf([_renderer nextFrameTime]) || [_renderer nextFrameTime] <
currentTime)
+ {
+ [_timer invalidate];
+ _timer = [NSTimer scheduledTimerWithTimeInterval: [_renderer
nextFrameTime]-currentTime
+ target: self
+ selector:
@selector(timerAnimation:)
+ userInfo: nil
+ repeats: NO];
+ }
+}
@end
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs