Skip to content

Commit b26cb67

Browse files
author
Øyvind Kolås
committed
pinpoint: when file changes, move to first changed slide.
1 parent 4c911bb commit b26cb67

File tree

5 files changed

+55
-18
lines changed

5 files changed

+55
-18
lines changed

pinpoint/pinpoint.c

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030

3131
#include "pinpoint.h"
3232

33+
GList *pp_slides = NULL; /* list of slide texts */
34+
GList *pp_slidep = NULL; /* current slide */
35+
3336
typedef struct
3437
{
3538
const char *name;
@@ -163,19 +166,17 @@ main (int argc,
163166

164167
renderer->run (renderer);
165168
renderer->finalize (renderer);
169+
if (renderer->source)
170+
g_free (renderer->source);
166171

167172
g_list_free (pp_slides);
168173

169174
return 0;
170175
}
171176

172-
173177
/*********************/
174178

175179

176-
GList *pp_slides = NULL; /* list of slide texts */
177-
GList *pp_slidep = NULL; /* current slide */
178-
179180
/*
180181
* Cross-renderers helpers
181182
*/
@@ -442,10 +443,33 @@ pp_parse_slides (PinPointRenderer *renderer,
442443
GList *s;
443444
PinPointPoint *point, *next_point;
444445

445-
/* store current slideno */
446-
if (pp_slidep)
447-
for (;pp_slidep->prev; pp_slidep = pp_slidep->prev)
448-
slideno++;
446+
if (renderer->source)
447+
{
448+
gboolean start_of_line = TRUE;
449+
int pos;
450+
int lineno=0;
451+
/* compute slide no that has changed */
452+
for (pos = 0, slideno = 0;
453+
slide_src[pos] && renderer->source[pos] && slide_src[pos]==renderer->source[pos]
454+
; pos ++)
455+
{
456+
switch (slide_src[pos])
457+
{
458+
case '\n':
459+
start_of_line = TRUE;
460+
lineno++;
461+
break;
462+
case '-':
463+
if (start_of_line)
464+
slideno++;
465+
default:
466+
start_of_line = FALSE;
467+
}
468+
}
469+
slideno--;
470+
g_free (renderer->source);
471+
}
472+
renderer->source = g_strdup (slide_src);
449473

450474
for (s = pp_slides; s; s = s->next)
451475
pin_point_free (renderer, s->data);

pinpoint/pinpoint.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct _PinPointRenderer
6868
void * (*allocate_data) (PinPointRenderer *renderer);
6969
void (*free_data) (PinPointRenderer *renderer,
7070
void *datap);
71+
char * source;
7172
};
7273

7374
struct _PinPointPoint

pinpoint/pp-clutter.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,8 @@ show_slide (ClutterRenderer *renderer, gboolean backwards)
962962
NULL);
963963
}
964964
else /* no text, fade out shading */
965-
g_object_set (data->shading, "opacity", 0, NULL);
965+
if (data->shading)
966+
g_object_set (data->shading, "opacity", 0, NULL);
966967
if (data->foreground)
967968
{
968969
clutter_actor_reparent (data->text, data->foreground);
@@ -1023,20 +1024,33 @@ stage_resized (ClutterActor *actor,
10231024
show_slide (renderer, FALSE); /* redisplay the current slide */
10241025
}
10251026

1026-
static void
1027-
file_changed (GFileMonitor *monitor,
1028-
GFile *file,
1029-
GFile *other_file,
1030-
GFileMonitorEvent event_type,
1031-
ClutterRenderer *renderer)
1027+
static guint reload_tag = 0;
1028+
1029+
static gboolean
1030+
reload (gpointer data)
10321031
{
1032+
ClutterRenderer *renderer = data;
10331033
char *text = NULL;
10341034
if (!g_file_get_contents (renderer->path, &text, NULL, NULL))
10351035
g_error ("failed to load slides from %s\n", renderer->path);
10361036
renderer->rest_y = STARTPOS;
10371037
pp_parse_slides (PINPOINT_RENDERER (renderer), text);
10381038
g_free (text);
10391039
show_slide(renderer, FALSE);
1040+
reload_tag = 0;
1041+
return FALSE;
1042+
}
1043+
1044+
static void
1045+
file_changed (GFileMonitor *monitor,
1046+
GFile *file,
1047+
GFile *other_file,
1048+
GFileMonitorEvent event_type,
1049+
ClutterRenderer *renderer)
1050+
{
1051+
if (reload_tag)
1052+
g_source_remove (reload_tag);
1053+
reload_tag = g_timeout_add (200, reload, renderer);
10401054
}
10411055

10421056
static ClutterRenderer clutter_renderer_vtable =

pinpoint/sample.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env pinpoint
22
[font=Sans 50px]
3-
[bg.jpg][black]
3+
[bg.jpg]
44
- The bits above are slide defaults
55
pinpoint
66
- [wth.jpg] lines starting with - are slide seperators with per-slide properties

pinpoint/transitions/fade.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
},
1313
{
1414
"type":"ClutterGroup",
15-
"depth":20.0,
1615
"children":[
1716
{
1817
"id":"midground",
@@ -22,7 +21,6 @@
2221
}]},
2322
{
2423
"id":"foreground",
25-
"depth":30.0,
2624
"type":"ClutterGroup",
2725
"rotation-center-z-gravity":"center",
2826
"scale-gravity":"center"

0 commit comments

Comments
 (0)