X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fphotopile.c;h=d2ea5b402aed92a30f06fb294eba15212bfcbcf6;hb=aa75c7476aeaa84cf3abc192b376a8b03c325213;hp=aa52d162e5e816d3269b561a7e9101561e6b9aa4;hpb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;p=xscreensaver diff --git a/hacks/glx/photopile.c b/hacks/glx/photopile.c index aa52d162..d2ea5b40 100644 --- a/hacks/glx/photopile.c +++ b/hacks/glx/photopile.c @@ -1,4 +1,4 @@ -/* photopile, Copyright (c) 2008-2012 Jens Kilian +/* photopile, Copyright (c) 2008-2015 Jens Kilian * Based on carousel, Copyright (c) 2005-2008 Jamie Zawinski * Loads a sequence of images and shuffles them into a pile. * @@ -11,7 +11,7 @@ * implied warranty. */ -#define DEF_FONT "-*-helvetica-bold-r-normal-*-240-*" +#define DEF_FONT "-*-helvetica-bold-r-normal-*-*-480-*-*-*-*-*-*" #define DEFAULTS "*count: 7 \n" \ "*delay: 10000 \n" \ "*wireframe: False \n" \ @@ -21,7 +21,8 @@ "*font: " DEF_FONT "\n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: False \n" \ - "*chooseRandomImages: True \n" + "*chooseRandomImages: True \n" \ + "*suppressRotationAnimation: True\n" \ # define refresh_photopile 0 # define release_photopile 0 @@ -30,7 +31,7 @@ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) -#ifndef HAVE_COCOA +#ifndef HAVE_JWXYZ # include /* for XrmDatabase in -debug mode */ #endif #include @@ -353,7 +354,12 @@ loading_msg (ModeInfo *mi) if (wire) return; if (ss->loading_sw == 0) /* only do this once */ - ss->loading_sw = texture_string_width (ss->texfont, text, &ss->loading_sh); + { + XCharStruct e; + texture_string_metrics (ss->texfont, text, &e, 0, 0); + ss->loading_sw = e.width; + ss->loading_sh = e.ascent + e.descent; + } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -428,6 +434,15 @@ reshape_photopile (ModeInfo *mi, int width, int height) glLoadIdentity(); glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1); +# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ + { + GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); + int o = (int) current_device_rotation(); + if (o != 0 && o != 180 && o != -180) + glScalef (1/h, h, 1); + } +# endif + glClear(GL_COLOR_BUFFER_BIT); } @@ -437,7 +452,7 @@ reshape_photopile (ModeInfo *mi, int width, int height) static void hack_resources (Display *dpy) { -# ifndef HAVE_COCOA +# ifndef HAVE_JWXYZ char *res = "desktopGrabber"; char *val = get_string_resource (dpy, res, "DesktopGrabber"); char buf1[255]; @@ -449,7 +464,7 @@ hack_resources (Display *dpy) value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); -# endif /* !HAVE_COCOA */ +# endif /* !HAVE_JWXYZ */ } @@ -629,18 +644,26 @@ draw_image (ModeInfo *mi, int i, GLfloat t, GLfloat s, GLfloat z) */ if (titles_p) { - int sw, sh; - GLfloat scale = 0.6; + int sw, sh, ascent, descent; + GLfloat scale = 1; const char *title = frame->title ? frame->title : "(untitled)"; + XCharStruct e; /* #### Highly approximate, but doing real clipping is harder... */ int max = 35; if (strlen(title) > max) title += strlen(title) - max; - sw = texture_string_width (ss->texfont, title, &sh); + texture_string_metrics (ss->texfont, title, &e, &ascent, &descent); + sw = e.width; + sh = ascent + descent; + + /* Scale the text to match the pixel size of the photo */ + scale *= w / 300.0; - glTranslatef (-sw*scale*0.5, -h - sh*scale, z); + /* Move to below photo */ + glTranslatef (0, -h - sh * (polaroid_p ? 2.2 : 0.5), 0); + glTranslatef (-sw*scale/2, sh*scale/2, z); glScalef (scale, scale, 1); if (wire || !polaroid_p)