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

Reply via email to