-/* xscreensaver, Copyright (c) 2006-2015 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright © 2006-2023 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 "screenhack.c" module.
*/
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
# import <Foundation/Foundation.h>
# import <UIKit/UIKit.h>
# define NSView UIView
#import "screenhackI.h"
#import "PrefsReader.h"
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
+
+# if TARGET_OS_TV && !defined(HAVE_TVOS)
+ // We aren't receiving this from Xcode when compiling libjwxyz.a for tvOS.
+# define HAVE_TVOS 1
+# endif
@class XScreenSaverView;
@protocol XScreenSaverViewDelegate
- (void) wantsFadeOut:(XScreenSaverView *)saverView;
- (void) didShake:(XScreenSaverView *)saverView;
+- (void) openPreferences: (NSString *)which;
@end
@interface ScreenSaverView : NSView
- (BOOL)isPreview;
@end
-#endif // USE_IPHONE
+#endif // HAVE_IPHONE
-#define USE_BACKBUFFER // must be in sync with jwxyz.m
// Currently only OpenGL backbuffers are supported (OSX and iOS).
# define BACKBUFFER_OPENGL
@interface XScreenSaverView : ScreenSaverView
-# ifdef USE_IPHONE
+# if defined(HAVE_TVOS)
+ <UIApplicationDelegate>
+# elif defined(HAVE_IPHONE)
<UIAlertViewDelegate>
# endif
{
struct xscreensaver_function_table *xsft;
PrefsReader *prefsReader;
+ NSString *saver_title; // "Möbius Gears", not "MoebiusGears"
BOOL setup_p; // whether xsft->setup_cb() has been run
BOOL initted_p; // whether xsft->init_cb() has been run
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 size (pixels, not points).
-
- GLfloat rotation_ratio; // ratio [0-1] thru rotation anim, or -1
- NSSize rot_current_size; // intermediate or at-rest orientation.
- NSSize rot_from, rot_to; // start/end size rect (pixels, not points)
- GLfloat rot_current_angle; // only right angles when rotation complete.
- GLfloat angle_from, angle_to; // start angle, end angle (degrees)
- double rot_start_time;
+ BOOL _lowrez_p; // Whether the saver prefers 1990s pixels.
- BOOL ignore_rotation_p; // whether hack requested "always portrait".
+# ifdef HAVE_IPHONE
+ BOOL screenLocked;
+ BOOL _ignoreRotation; // whether hack requested "always portrait".
// some want this, some do not.
-
NSTimer *crash_timer;
+ NSTimer *cycle_timer;
NSDictionary *function_tables;
id<XScreenSaverViewDelegate> _delegate;
-# endif // USE_IPHONE
+ UIView *closeBox;
+ NSTimer *closeBoxTimer;
+
+ CGAffineTransform pinch_transform;
+
+# else // !USE_PHONE
-# ifdef USE_BACKBUFFER
+ NSOpenGLPixelFormat *pixfmt;
+
+# endif // !HAVE_IPHONE
+
+ NSOpenGLContext *ogl_ctx; // OpenGL rendering context
+
+# ifdef JWXYZ_QUARTZ
CGContextRef backbuffer;
- CGSize backbuffer_size; // pixels, not points.
CGColorSpaceRef colorspace;
# ifdef BACKBUFFER_OPENGL
void *backbuffer_data;
- size_t backbuffer_len;
+ GLsizei backbuffer_len;
GLsizei gl_texture_w, gl_texture_h;
- NSOpenGLContext *ogl_ctx; // OpenGL rendering context
GLuint backbuffer_texture;
GLenum gl_texture_target;
GLenum gl_pixel_format, gl_pixel_type;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
BOOL double_buffered_p, gl_apple_client_storage_p;
-# else // USE_IPHONE
+# else // HAVE_IPHONE
BOOL gl_limited_npot_p;
GLuint gl_framebuffer, gl_renderbuffer;
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
# endif
-# endif // USE_BACKBUFFER
+# endif // JWXYZ_QUARTZ
+
+# if defined JWXYZ_GL && defined HAVE_IPHONE
+ NSOpenGLContext *ogl_ctx_pixmap;
+# endif // JWXYZ_GL && HAVE_IPHONE
}
-- (id)initWithFrame:(NSRect)frame saverName:(NSString*)n isPreview:(BOOL)p;
+- (id)initWithFrame:(NSRect)f title:(NSString*)t isPreview:(BOOL)p
+ randomizer:(BOOL)r;
+- (id)initWithFrame:(NSRect)f title:(NSString*)t isPreview:(BOOL)p;
+- (id)initWithFrame:(NSRect)f isPreview:(BOOL)p randomizer:(BOOL)r;
+- (void) stopAnimationWithException:(NSException *)e;
- (void) render_x11;
+- (NSOpenGLContext *) oglContext;
- (void) prepareContext;
- (NSUserDefaultsController *) userDefaultsController;
+ (NSString *) decompressXML:(NSData *)xml;
-#ifdef USE_IPHONE
-- (BOOL)reshapeRotatedWindow;
+- (CGFloat) hackedContentScaleFactor;
+- (CGFloat) hackedContentScaleFactor:(BOOL)fonts_p;
+
+#ifdef HAVE_IPHONE
- (void)setScreenLocked:(BOOL)locked;
- (NSDictionary *)getGLProperties;
- (void)addExtraRenderbuffers:(CGSize)size;
+- (NSString *)getCAGravity;
+- (void)orientationChanged;
@property (nonatomic, assign) id<XScreenSaverViewDelegate> delegate;
-#else // !USE_IPHONE
+@property (nonatomic) BOOL ignoreRotation;
+- (BOOL)suppressRotationAnimation;
+- (BOOL)rotateTouches;
+#else // !HAVE_IPHONE
- (NSOpenGLPixelFormat *)getGLPixelFormat;
-#endif // !USE_IPHONE
+#endif // !HAVE_IPHONE
-#ifdef USE_BACKBUFFER
- (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;
-#endif // USE_BACKBUFFER
@end