X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=OSX%2FXScreenSaverView.h;h=06f0ebe29a4ffd812b542d2830e4d2cd96e929f8;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=6902c559ea749aac3708edcd55eb67b748ffee8c;hpb=4ade52359b6eba3621566dac79793a33aa4c915f;p=xscreensaver diff --git a/OSX/XScreenSaverView.h b/OSX/XScreenSaverView.h index 6902c559..06f0ebe2 100644 --- a/OSX/XScreenSaverView.h +++ b/OSX/XScreenSaverView.h @@ -1,13 +1,13 @@ -/* xscreensaver, Copyright (c) 2006-2013 Jamie Zawinski -* -* 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-2016 Jamie Zawinski + * + * 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" @@ -25,6 +25,7 @@ # define NSImage UIImage # define NSEvent UIEvent # define NSWindow UIWindow +# define NSOpenGLContext EAGLContext #else # import # import @@ -35,6 +36,14 @@ #import "PrefsReader.h" #ifdef USE_IPHONE + +@class XScreenSaverView; + +@protocol XScreenSaverViewDelegate +- (void) wantsFadeOut:(XScreenSaverView *)saverView; +- (void) didShake:(XScreenSaverView *)saverView; +@end + @interface ScreenSaverView : NSView - (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview; - (NSTimeInterval)animationTimeInterval; @@ -52,10 +61,8 @@ #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 @@ -77,47 +84,81 @@ fps_state *fpst; # 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; - BOOL ignore_rotation_p; + NSDictionary *function_tables; - NSSize rot_current_size; - GLfloat rot_current_angle; + id _delegate; - NSTimer *crash_timer; +# else // !USE_PHONE - NSDictionary *function_tables; + NSOpenGLPixelFormat *pixfmt; -# endif // USE_IPHONE +# endif // !USE_IPHONE -# ifdef USE_BACKBUFFER + 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; + size_t 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 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