2 * Copyright (C) 2008 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #include <gdk-pixbuf/gdk-pixbuf.h>
45 ctx = (struct ctx *) data;
46 gtk_widget_queue_draw (GTK_WIDGET (ctx->draw));
52 expose (GtkWidget *widget, GdkEventExpose *event, gpointer data)
58 ctx = (struct ctx *) data;
59 gdk_drawable_get_size (GDK_DRAWABLE (event->window), &w, &h);
61 ctx->i = (ctx->i >= ctx->points->len) ? 0 : ctx->i + 1;
62 point = g_array_index (ctx->points, Point, ctx->i);
63 screen = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
64 event->area.width, event->area.height);
65 gdk_pixbuf_scale (ctx->picture, screen, 0, 0,
66 event->area.width, event->area.height,
67 -point.x + w/2 - event->area.x,
68 -point.y + h/2 - event->area.y,
69 point.rx, point.ry, GDK_INTERP_BILINEAR);
70 gdk_draw_pixbuf (widget->window, NULL, screen, 0, 0,
71 event->area.x, event->area.y,
72 event->area.width, event->area.height,
73 GDK_RGB_DITHER_NONE, 0, 0);
74 gdk_pixbuf_unref (screen);
79 layout = gtk_widget_create_pango_layout (ctx->draw, point.name);
80 pango_layout_set_attributes (layout, ctx->list);
81 pango_layout_get_pixel_size (layout, &pw, &ph);
82 gdk_draw_rectangle (widget->window, ctx->gc2, TRUE,
83 (WIDTH - pw - 8) / 2, HEIGHT - ph - 20, pw + 8, ph);
84 gdk_draw_layout (widget->window, ctx->gc, (WIDTH - pw) / 2,
85 HEIGHT - ph - 20, layout);
86 g_object_unref (layout);
88 g_timeout_add (3000, queue, ctx);
93 g_timeout_add (10, queue, ctx);
104 fprintf (stderr, "movie picture dotsfile\n");
109 main (int argc, char **argv)
113 GdkColorspace colorspace;
121 PangoAttribute *attr;
122 gtk_init (&argc, &argv);
132 ctx.points = ReadPoints (dotsfile);
133 ctx.points = drop_dup_frames (ctx.points, FPF);
134 rescale_points (ctx.points, get_scales (FPF));
135 ctx.picture = gdk_pixbuf_new_from_file (filename, NULL);
136 ctx.i = ctx.points->len;
137 colorspace = gdk_pixbuf_get_colorspace (ctx.picture);
138 has_alpha = gdk_pixbuf_get_has_alpha (ctx.picture);
139 bits_per_sample = gdk_pixbuf_get_bits_per_sample (ctx.picture);
142 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
143 g_signal_connect (G_OBJECT (window), "destroy",
144 G_CALLBACK (gtk_main_quit), NULL);
145 ctx.draw = gtk_drawing_area_new ();
146 gtk_widget_set_size_request (ctx.draw, width, height);
147 gtk_container_add (GTK_CONTAINER (window), ctx.draw);
148 gtk_widget_show_all (window);
149 g_signal_connect (G_OBJECT (ctx.draw), "expose_event",
150 G_CALLBACK (expose), &ctx);
152 Yellow.green = 0xFFFF;
157 ctx.gc = gdk_gc_new (ctx.draw->window);
158 gdk_gc_set_rgb_fg_color (ctx.gc, &Yellow);
159 ctx.gc2 = gdk_gc_new (ctx.draw->window);
160 gdk_gc_set_rgb_fg_color (ctx.gc2, &Black);
161 ctx.list = pango_attr_list_new ();
162 attr = pango_attr_size_new (32 * PANGO_SCALE);
163 pango_attr_list_insert (ctx.list, attr);
164 attr = pango_attr_weight_new (PANGO_WEIGHT_SEMIBOLD);
165 pango_attr_list_insert (ctx.list, attr);
166 g_timeout_add (10, queue, &ctx);
168 gdk_pixbuf_unref (ctx.picture);