-/* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1992-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
#include "vroot.h"
#include "fps.h"
+#ifdef HAVE_RECORD_ANIM
+# include "recanim.h"
+#endif
+
#ifndef _XSCREENSAVER_VROOT_H_
# error Error! You have an old version of vroot.h! Check -I args.
#endif /* _XSCREENSAVER_VROOT_H_ */
# ifdef DEBUG_PAIR
{ "-pair", ".pair", XrmoptionNoArg, "True" },
# endif /* DEBUG_PAIR */
+
+# ifdef HAVE_RECORD_ANIM
+ { "-record-animation", ".recordAnim", XrmoptionSepArg, 0 },
+# endif /* HAVE_RECORD_ANIM */
+
{ 0, 0, 0, 0 }
};
, Window window2, fps_state *fpst2, void *closure2,
unsigned long delay2
#endif
+# ifdef HAVE_RECORD_ANIM
+ , record_anim_state *anim_state
+# endif
)
{
do {
- unsigned long quantum = 100000; /* 1/10th second */
+ unsigned long quantum = 33333; /* 30 fps */
if (quantum > delay)
quantum = delay;
delay -= quantum;
XSync (dpy, False);
+
+#ifdef HAVE_RECORD_ANIM
+ if (anim_state) screenhack_record_anim (anim_state);
+#endif
+
if (quantum > 0)
{
usleep (quantum);
Window window,
# ifdef DEBUG_PAIR
Window window2,
+# endif
+# ifdef HAVE_RECORD_ANIM
+ record_anim_state *anim_state,
# endif
const struct xscreensaver_function_table *ft)
{
if (fpst) fps_cb (dpy, window, fpst, closure);
#ifdef DEBUG_PAIR
- if (fpst2) fps_cb (dpy, window, fpst2, closure);
+ if (fpst2) fps_cb (dpy, window2, fpst2, closure2);
#endif
if (! usleep_and_process_events (dpy, ft,
window, fpst, closure, delay
#ifdef DEBUG_PAIR
, window2, fpst2, closure2, delay2
+#endif
+#ifdef HAVE_RECORD_ANIM
+ , anim_state
#endif
))
break;
}
+#ifdef HAVE_RECORD_ANIM
+ /* Exiting before target frames hit: write the video anyway. */
+ if (anim_state) screenhack_record_anim_free (anim_state);
+#endif
+
ft->free_cb (dpy, window, closure);
if (fpst) fps_free (fpst);
Window window2 = 0;
Widget toplevel2 = 0;
# endif
+#ifdef HAVE_RECORD_ANIM
+ record_anim_state *anim_state = 0;
+#endif
XtAppContext app;
Bool root_p;
Window on_window = 0;
!strcmp(argv[1], "--help"));
fprintf (stderr, "%s\n", version);
for (s = progclass; *s; s++) fprintf(stderr, " ");
- fprintf (stderr, " http://www.jwz.org/xscreensaver/\n\n");
+ fprintf (stderr, " https://www.jwz.org/xscreensaver/\n\n");
if (!help_p)
fprintf(stderr, "Unrecognised option: %s\n", argv[1]);
# undef ya_rand_init
ya_rand_init (0);
+
+#ifdef HAVE_RECORD_ANIM
+ {
+ int frames = get_integer_resource (dpy, "recordAnim", "Integer");
+ if (frames > 0)
+ anim_state = screenhack_record_anim_init (xgwa.screen, window, frames);
+ }
+#endif
+
run_screenhack_table (dpy, window,
# ifdef DEBUG_PAIR
window2,
+# endif
+# ifdef HAVE_RECORD_ANIM
+ anim_state,
# endif
ft);
+#ifdef HAVE_RECORD_ANIM
+ if (anim_state) screenhack_record_anim_free (anim_state);
+#endif
+
XtDestroyWidget (toplevel);
XtDestroyApplicationContext (app);