summaryrefslogtreecommitdiffstats
path: root/jwxyz/jwxyzI.h
diff options
context:
space:
mode:
Diffstat (limited to 'jwxyz/jwxyzI.h')
-rw-r--r--jwxyz/jwxyzI.h208
1 files changed, 208 insertions, 0 deletions
diff --git a/jwxyz/jwxyzI.h b/jwxyz/jwxyzI.h
new file mode 100644
index 0000000..6a38d2e
--- /dev/null
+++ b/jwxyz/jwxyzI.h
@@ -0,0 +1,208 @@
+/* xscreensaver, Copyright (c) 1991-2018 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.
+ */
+
+#ifndef __JWXYZ_I_H__
+#define __JWXYZ_I_H__
+
+#include <inttypes.h>
+#include <stddef.h>
+
+#include "jwxyz.h"
+
+#define Assert(C, ...) do { if (!(C)) jwxyz_abort (__VA_ARGS__); } while(0)
+
+#undef MAX
+#undef MIN
+#define MAX(a,b) ((a)>(b)?(a):(b))
+#define MIN(a,b) ((a)<(b)?(a):(b))
+
+#define JWXYZ_FONT_FAMILY 0 /* i.e. -[NSFont familyName] via XLFD */
+#define JWXYZ_FONT_FACE 1 /* -[NSFont fontName] via native */
+#define JWXYZ_FONT_RANDOM 2
+
+#define JWXYZ_STYLE_BOLD 1
+#define JWXYZ_STYLE_ITALIC 2
+#define JWXYZ_STYLE_MONOSPACE 4
+
+#define JWXYZ_QUERY_COLOR(dpy, pixel, mult, rgba) \
+ { \
+ Visual *_V = DefaultVisualOfScreen (DefaultScreenOfDisplay (dpy)); \
+ (rgba)[0] = ((pixel) & _V->red_mask) * (mult) / _V->red_mask; \
+ (rgba)[1] = ((pixel) & _V->green_mask) * (mult) / _V->green_mask; \
+ (rgba)[2] = ((pixel) & _V->blue_mask) * (mult) / _V->blue_mask; \
+ (rgba)[3] = ((pixel) & _V->alpha_mask) * (mult) / _V->alpha_mask; \
+ }
+
+/* jwxyz.m, jwxyz-gl.c, jwxyz-image.c */
+extern void jwxyz_window_resized (Display *);
+
+/* jwxyz-cocoa.m, jwxyz-android.c */
+extern const XRectangle *jwxyz_frame (Drawable d); /* XGetGeometry sux. */
+extern unsigned int jwxyz_drawable_depth (Drawable d);
+
+/* 'scale' is pixels per point, with 72 points per inch. This matches the
+ meaning of -[UIView contentScaleFactor] on iOS.
+ */
+extern float jwxyz_scale (Window main_window);
+
+extern const char *jwxyz_default_font_family (int require);
+extern void *jwxyz_load_native_font (Window main_window,
+ int traits_jwxyz, int mask_jwxyz,
+ const char *font_name_ptr,
+ size_t font_name_length,
+ int font_name_type, float size,
+ char **family_name_ret,
+ int *ascent_ret, int *descent_ret);
+extern void jwxyz_release_native_font (Display *, void *native_font);
+
+/* Text metrics for aliased and antialiased text must match. */
+extern void jwxyz_render_text (Display *, void *native_font,
+ const char *str, size_t len, Bool utf8_p,
+ Bool antialias_p, XCharStruct *cs_ret,
+ char **pixmap_ret);
+extern void jwxyz_get_pos (Window w, XPoint *vpos, XPoint *p);
+#ifndef current_device_rotation
+extern double current_device_rotation (void);
+extern Bool ignore_rotation_p (Display *);
+#endif
+
+/* jwxyz-common.c */
+extern void jwxyz_validate_pixel (Display *dpy, unsigned long pixel,
+ unsigned int depth, Bool alpha_allowed_p);
+extern Bool jwxyz_dumb_drawing_mode(Display *dpy, Drawable d, GC gc,
+ int x, int y,
+ unsigned width, unsigned height);
+extern void jwxyz_blit (const void *src_data, ptrdiff_t src_pitch,
+ unsigned src_x, unsigned src_y,
+ void *dst_data, ptrdiff_t dst_pitch,
+ unsigned dst_x, unsigned dst_y,
+ unsigned width, unsigned height);
+extern void jwxyz_fill_rect (Display *, Drawable, GC,
+ int x, int y,
+ unsigned int width, unsigned int height,
+ unsigned long pixel);
+extern void jwxyz_gcv_defaults (Display *dpy, XGCValues *gcv, int depth);
+extern int jwxyz_draw_string (Display *dpy, Drawable d, GC gc, int x, int y,
+ const char *str, size_t len, int utf8_p);
+extern void *jwxyz_native_font (Font f);
+
+#define SEEK_XY(dst, dst_pitch, x, y) \
+ ((uint32_t *)((char *)dst + dst_pitch * y + x * 4))
+
+# ifdef JWXYZ_QUARTZ
+
+# include <CoreGraphics/CGGeometry.h>
+# include <CoreGraphics/CGContext.h>
+
+extern Display *jwxyz_quartz_make_display (Window w);
+extern void jwxyz_quartz_free_display (Display *);
+extern void jwxyz_flush_context (Display *);
+
+# define jwxyz_assert_display(dpy)
+# define jwxyz_assert_drawable(main_window, d)
+# define jwxyz_assert_gl()
+
+/* jwxyz-cocoa.m needs these from jwxyz.m for XCopyArea. */
+extern void invalidate_drawable_cache (Drawable d);
+extern void set_color (Display *dpy, CGContextRef cgc, unsigned long argb,
+ unsigned int depth, Bool alpha_allowed_p, Bool fill_p);
+extern void push_gc (Drawable d, GC gc);
+extern void push_color_gc (Display *dpy, Drawable d, GC gc,
+ unsigned long color,
+ Bool antialias_p, Bool fill_p);
+extern CGPoint map_point (Drawable d, int x, int y);
+extern void jwxyz_quartz_copy_area (Display *dpy, Drawable src, Drawable dst,
+ GC gc, int src_x, int src_y,
+ unsigned int width, unsigned int height,
+ int dst_x, int dst_y);
+
+#define pop_gc(d,gc) CGContextRestoreGState (d->cgc)
+
+# endif /* JWXYZ_QUARTZ */
+
+# ifdef JWXYZ_GL
+
+# if defined(USE_IPHONE)
+# include <OpenGLES/ES1/gl.h>
+# elif defined(HAVE_COCOA)
+# include <OpenGL/gl.h>
+# elif defined(HAVE_ANDROID)
+# include <GLES/gl.h>
+# else
+# include <GL/gl.h>
+# endif
+
+/* utils/jwxyz-gl.c */
+extern Display *jwxyz_gl_make_display (Window w);
+extern void jwxyz_gl_free_display (Display *);
+extern void jwxyz_set_matrices (Display *dpy, unsigned width, unsigned height,
+ Bool screen_p);
+extern void jwxyz_gl_flush (Display *dpy);
+extern void jwxyz_gl_set_gc (Display *dpy, GC gc);
+extern void jwxyz_gl_copy_area (Display *dpy, Drawable src, Drawable dst,
+ GC gc, int src_x, int src_y,
+ unsigned int width, unsigned int height,
+ int dst_x, int dst_y);
+
+/* Only works if both drawables share OpenGL objects. OpenGL context sharing
+ works on OS X, iOS, and some (but not all!) EGL implementations. This would
+ also work with FBOs and one context for everything. Surprisingly slow and
+ unreliable.
+ */
+extern void jwxyz_gl_copy_area_read_tex_image (Display *dpy,
+ unsigned src_height,
+ int src_x, int src_y,
+ unsigned int width,
+ unsigned int height,
+ int dst_x, int dst_y);
+extern void jwxyz_gl_copy_area_write_tex_image (Display *dpy, GC gc,
+ int src_x, int src_y,
+ unsigned int width,
+ unsigned int height,
+ int dst_x, int dst_y);
+
+extern void jwxyz_gl_draw_image (Display *dpy, GC gc,
+ GLenum gl_texture_target,
+ unsigned int tex_w, unsigned int tex_h,
+ int src_x, int src_y, int src_depth,
+ unsigned int width, unsigned int height,
+ int dst_x, int dst_y, Bool flip_y);
+
+/* glReadPixels followed by glTexImage2D. This is terrible, so only use this
+ if nothing else works.
+ */
+extern void jwxyz_gl_copy_area_read_pixels (Display *dpy, Drawable src,
+ Drawable dst, GC gc,
+ int src_x, int src_y,
+ unsigned int width,
+ unsigned int height,
+ int dst_x, int dst_y);
+
+/* Platform-specific */
+extern void jwxyz_bind_drawable (Display *dpy, Window w, Drawable d);
+extern void jwxyz_assert_display (Display *);
+extern void jwxyz_assert_drawable (Window main_window, Drawable d);
+extern void jwxyz_assert_gl (void);
+
+# endif /* JWXYZ_GL */
+
+# ifdef JWXYZ_IMAGE
+
+extern Display *jwxyz_image_make_display (Window w,
+ const unsigned char *rgba_bytes);
+extern void jwxyz_image_free_display (Display *);
+
+extern ptrdiff_t jwxyz_image_pitch (Drawable d);
+extern void *jwxyz_image_data (Drawable d);
+
+# endif /* JWXYZ_IMAGE */
+
+#endif