-/* xscreensaver, Copyright (c) 2006-2012 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
-* the above copyright notice appear in all copies and that both that
-* copyright notice and this permission notice appear in supporting
-* documentation. No representations are made about the suitability of this
-* software for any purpose. It is provided "as is" without express or
-* implied warranty.
-*/
+/* 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
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
/* This is a subclass of Apple's ScreenSaverView that knows how to run
xscreensaver programs without X11 via the dark magic of the "jwxyz"
# 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
-#ifdef USE_IPHONE
-# define USE_BACKBUFFER /* must be in sync with jwxyz.h */
-#endif
-
+// 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;
- double tap_time;
- CGPoint tap_point;
BOOL screenLocked;
+ BOOL _ignoreRotation; // whether hack requested "always portrait".
+ // some want this, some do not.
+ NSTimer *crash_timer;
- 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;
+ NSDictionary *function_tables;
- NSSize rot_current_size;
- GLfloat rot_current_angle;
+ id<XScreenSaverViewDelegate> _delegate;
- NSTimer *crash_timer;
+ UIView *closeBox;
+ NSTimer *closeBoxTimer;
+
+ CGAffineTransform pinch_transform;
+
+# else // !USE_PHONE
-# endif // USE_IPHONE
+ NSOpenGLPixelFormat *pixfmt;
-# ifdef USE_BACKBUFFER
+# endif // !USE_IPHONE
+
+ NSOpenGLContext *ogl_ctx; // OpenGL rendering context
+
+# ifdef JWXYZ_QUARTZ
CGContextRef backbuffer;
- CGSize backbuffer_size;
-# endif // USE_BACKBUFFER
+ CGColorSpaceRef colorspace;
+
+# 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 // 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;
+- (CGFloat) hackedContentScaleFactor;
- (void)setScreenLocked:(BOOL)locked;
-#endif // USE_IPHONE
-
-#ifdef USE_BACKBUFFER
-- (void)initLayer;
-- (void)createBackbuffer;
-#endif // USE_BACKBUFFER
+- (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;
+- (void)reshape_x11;
+#ifdef JWXYZ_QUARTZ
+- (void)drawBackbuffer;
+#endif // JWXYZ_QUARTZ
+- (void)flushBackbuffer;
@end