From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / OSX / XScreenSaverView.h
index 28d1f51fab258d6647b17dfd5d63db6a801736d2..dffa58e97081deb37ad6cadf471e75146a34afb7 100644 (file)
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2006-2014 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2006-2017 Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -25,6 +25,7 @@
 # define NSImage UIImage
 # define NSEvent UIEvent
 # define NSWindow UIWindow
+# define NSOpenGLContext EAGLContext
 #else
 # import <Cocoa/Cocoa.h>
 # import <ScreenSaver/ScreenSaver.h>
 #import "PrefsReader.h"
 
 #ifdef USE_IPHONE
+
+@class XScreenSaverView;
+
+@protocol XScreenSaverViewDelegate
+- (void) wantsFadeOut:(XScreenSaverView *)saverView;
+- (void) didShake:(XScreenSaverView *)saverView;
+- (void) openPreferences: (NSString *)which;
+@end
+
 @interface ScreenSaverView : NSView
 - (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview;
 - (NSTimeInterval)animationTimeInterval;
 #endif // USE_IPHONE
 
 
-#define USE_BACKBUFFER  // must be in sync with jwxyz.m
-
-// If USE_BACKBUFFER is enabled, one of these must also be enabled.
-// #define BACKBUFFER_CGCONTEXT   // Not supported by iOS.
-#define BACKBUFFER_CALAYER
+// Currently only OpenGL backbuffers are supported (OSX and iOS).
+# define BACKBUFFER_OPENGL
 
 @interface XScreenSaverView : ScreenSaverView
 # ifdef USE_IPHONE
   Window xwindow;
   void *xdata;
   fps_state *fpst;
+  void (*fps_cb) (Display *, Window, fps_state *, void *);
 
 # ifdef USE_IPHONE
-  UIDeviceOrientation orientation, new_orientation;
   BOOL screenLocked;
-
-  CGSize initial_bounds;       // portrait-mode geometry
-       
-  GLfloat rotation_ratio;      // ratio thru rotation anim, or -1
-  NSSize rot_from, rot_to;     // start size rect, end size rect
-  GLfloat angle_from, angle_to;        // start angle, end angle
-  double rot_start_time;
-  BOOL ignore_rotation_p;      // hack requests "always portrait".
+  BOOL _ignoreRotation;                // whether hack requested "always portrait".
                                // some want this, some do not.
-
-  NSSize rot_current_size;     // current intermediate or final orientation.
-  GLfloat rot_current_angle;   // only right angles when rotation complete.
-
   NSTimer *crash_timer;
 
   NSDictionary *function_tables;
 
-# endif // USE_IPHONE
+  id<XScreenSaverViewDelegate> _delegate;
+
+  UIView *closeBox;
+  NSTimer *closeBoxTimer;
 
-# ifdef USE_BACKBUFFER
+  CGAffineTransform pinch_transform;
+
+# else // !USE_PHONE
+
+  NSOpenGLPixelFormat *pixfmt;
+
+# endif // !USE_IPHONE
+
+  NSOpenGLContext *ogl_ctx;      // OpenGL rendering context
+
+# ifdef JWXYZ_QUARTZ
   CGContextRef backbuffer;
-  CGSize backbuffer_size;
   CGColorSpaceRef colorspace;
 
-#  ifdef BACKBUFFER_CGCONTEXT
-  CGContextRef window_ctx;
+#  ifdef BACKBUFFER_OPENGL
+  void *backbuffer_data;
+  GLsizei backbuffer_len;
+
+  GLsizei gl_texture_w, gl_texture_h;
+
+  GLuint backbuffer_texture;
+  GLenum gl_texture_target;
+  GLenum gl_pixel_format, gl_pixel_type;
+#   ifndef USE_IPHONE
+  BOOL double_buffered_p, gl_apple_client_storage_p;
+#   else // USE_IPHONE
+  BOOL gl_limited_npot_p;
+  GLuint gl_framebuffer, gl_renderbuffer;
+#   endif // USE_IPHONE
 #  endif
 
-# endif // USE_BACKBUFFER
+# endif // JWXYZ_QUARTZ
+
+# if defined JWXYZ_GL && defined USE_IPHONE
+  NSOpenGLContext *ogl_ctx_pixmap;
+# endif // JWXYZ_GL && USE_IPHONE
 }
 
 - (id)initWithFrame:(NSRect)frame saverName:(NSString*)n isPreview:(BOOL)p;
 
 - (void) render_x11;
+- (NSOpenGLContext *) oglContext;
 - (void) prepareContext;
-- (void) resizeContext;
 - (NSUserDefaultsController *) userDefaultsController;
 + (NSString *) decompressXML:(NSData *)xml;
 
 #ifdef USE_IPHONE
-- (void)didRotate:(NSNotification *)notification;
-- (BOOL)reshapeRotatedWindow;
+- (CGFloat) hackedContentScaleFactor;
 - (void)setScreenLocked:(BOOL)locked;
-#endif // USE_IPHONE
-
-#ifdef USE_BACKBUFFER
-- (void)initLayer;
+- (NSDictionary *)getGLProperties;
+- (void)addExtraRenderbuffers:(CGSize)size;
+- (NSString *)getCAGravity;
+- (void)orientationChanged;
+@property (nonatomic, assign) id<XScreenSaverViewDelegate> delegate;
+@property (nonatomic) BOOL ignoreRotation;
+- (BOOL)suppressRotationAnimation;
+- (BOOL)rotateTouches;
+#else // !USE_IPHONE
+- (NSOpenGLPixelFormat *)getGLPixelFormat;
+#endif // !USE_IPHONE
+
+- (void)enableBackbuffer:(CGSize)new_backbuffer_size;
+- (void)setViewport;
 - (void)createBackbuffer:(CGSize)s;
-#endif // USE_BACKBUFFER
+- (void)reshape_x11;
+#ifdef JWXYZ_QUARTZ
+- (void)drawBackbuffer;
+#endif // JWXYZ_QUARTZ
+- (void)flushBackbuffer;
 
 @end