2001-12-11 17:31:52 +00:00
|
|
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
2000-10-06 18:19:18 +00:00
|
|
|
|
2001-05-03 09:38:07 +00:00
|
|
|
#include "config.h"
|
2000-10-06 18:19:18 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2001-05-03 09:38:07 +00:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
|
2001-12-11 17:31:52 +00:00
|
|
|
static void
|
|
|
|
compare_pixbufs (GdkPixbuf *pixbuf, GdkPixbuf *compare, const gchar *file_type)
|
|
|
|
{
|
|
|
|
if ((gdk_pixbuf_get_width (pixbuf) !=
|
|
|
|
gdk_pixbuf_get_width (compare)) ||
|
|
|
|
(gdk_pixbuf_get_height (pixbuf) !=
|
|
|
|
gdk_pixbuf_get_height (compare)) ||
|
|
|
|
(gdk_pixbuf_get_n_channels (pixbuf) !=
|
|
|
|
gdk_pixbuf_get_n_channels (compare)) ||
|
|
|
|
(gdk_pixbuf_get_has_alpha (pixbuf) !=
|
|
|
|
gdk_pixbuf_get_has_alpha (compare)) ||
|
|
|
|
(gdk_pixbuf_get_bits_per_sample (pixbuf) !=
|
|
|
|
gdk_pixbuf_get_bits_per_sample (compare))) {
|
|
|
|
fprintf (stderr,
|
|
|
|
"saved %s file differs from copy in memory\n",
|
|
|
|
file_type);
|
|
|
|
} else {
|
|
|
|
guchar *orig_pixels;
|
|
|
|
guchar *compare_pixels;
|
|
|
|
gint orig_rowstride;
|
|
|
|
gint compare_rowstride;
|
|
|
|
gint width;
|
|
|
|
gint height;
|
|
|
|
gint bytes_per_pixel;
|
|
|
|
gint x, y;
|
|
|
|
guchar *p1, *p2;
|
|
|
|
gint count = 0;
|
|
|
|
|
|
|
|
orig_pixels = gdk_pixbuf_get_pixels (pixbuf);
|
|
|
|
compare_pixels = gdk_pixbuf_get_pixels (compare);
|
|
|
|
|
|
|
|
orig_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
|
|
|
compare_rowstride = gdk_pixbuf_get_rowstride (compare);
|
|
|
|
|
|
|
|
width = gdk_pixbuf_get_width (pixbuf);
|
|
|
|
height = gdk_pixbuf_get_height (pixbuf);
|
|
|
|
|
|
|
|
/* well... */
|
|
|
|
bytes_per_pixel = gdk_pixbuf_get_n_channels (pixbuf);
|
|
|
|
|
|
|
|
p1 = orig_pixels;
|
|
|
|
p2 = compare_pixels;
|
|
|
|
|
|
|
|
for (y = 0; y < height; y++) {
|
|
|
|
for (x = 0; x < width * bytes_per_pixel; x++)
|
|
|
|
count += (*p1++ != *p2++);
|
|
|
|
|
|
|
|
orig_pixels += orig_rowstride;
|
|
|
|
compare_pixels += compare_rowstride;
|
|
|
|
|
|
|
|
p1 = orig_pixels;
|
|
|
|
p2 = compare_pixels;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (count > 0) {
|
|
|
|
fprintf (stderr,
|
|
|
|
"saved %s file differs from copy in memory\n",
|
|
|
|
file_type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
static gboolean
|
|
|
|
save_to_loader (const gchar *buf, gsize count, GError **err, gpointer data)
|
|
|
|
{
|
|
|
|
GdkPixbufLoader *loader = data;
|
|
|
|
|
2009-11-08 23:32:50 +00:00
|
|
|
return gdk_pixbuf_loader_write (loader, (const guchar *)buf, count, err);
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static GdkPixbuf *
|
|
|
|
buffer_to_pixbuf (const gchar *buf, gsize count, GError **err)
|
|
|
|
{
|
|
|
|
GdkPixbufLoader *loader;
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
|
|
|
|
loader = gdk_pixbuf_loader_new ();
|
2009-11-08 23:32:50 +00:00
|
|
|
if (gdk_pixbuf_loader_write (loader, (const guchar *)buf, count, err) &&
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
gdk_pixbuf_loader_close (loader, err)) {
|
|
|
|
pixbuf = g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader));
|
2004-08-19 00:25:27 +00:00
|
|
|
g_object_unref (loader);
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
return pixbuf;
|
|
|
|
} else {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_compare (GdkPixbuf *pixbuf, GdkPixbuf *compare, GError *err)
|
|
|
|
{
|
|
|
|
if (compare == NULL) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
compare_pixbufs (pixbuf, compare, "jpeg");
|
|
|
|
g_object_unref (compare);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-12-11 17:31:52 +00:00
|
|
|
static void
|
2000-10-06 18:19:18 +00:00
|
|
|
keypress_check (GtkWidget *widget, GdkEventKey *evt, gpointer data)
|
|
|
|
{
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
GtkDrawingArea *da = (GtkDrawingArea*)data;
|
|
|
|
GError *err = NULL;
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
gchar *buffer;
|
|
|
|
gsize count;
|
|
|
|
GdkPixbufLoader *loader;
|
|
|
|
|
2001-10-20 23:39:32 +00:00
|
|
|
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (da), "pixbuf");
|
2000-10-06 18:19:18 +00:00
|
|
|
|
|
|
|
if (evt->keyval == 'q')
|
|
|
|
gtk_main_quit ();
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
|
|
|
|
if (evt->keyval == 's' && (evt->state & GDK_CONTROL_MASK)) {
|
|
|
|
/* save to callback */
|
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
loader = gdk_pixbuf_loader_new ();
|
|
|
|
if (!gdk_pixbuf_save_to_callback (pixbuf, save_to_loader, loader, "jpeg",
|
|
|
|
&err,
|
|
|
|
"quality", "100",
|
|
|
|
NULL) ||
|
|
|
|
!gdk_pixbuf_loader_close (loader, &err)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader)),
|
|
|
|
err);
|
2004-08-19 00:25:27 +00:00
|
|
|
g_object_unref (loader);
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (evt->keyval == 'S') {
|
|
|
|
/* save to buffer */
|
|
|
|
if (!gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &count, "jpeg",
|
|
|
|
&err,
|
|
|
|
"quality", "100",
|
|
|
|
NULL)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
buffer_to_pixbuf (buffer, count, &err),
|
|
|
|
err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (evt->keyval == 's') {
|
|
|
|
/* save normally */
|
2000-10-06 18:19:18 +00:00
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!gdk_pixbuf_save (pixbuf, "foo.jpg", "jpeg",
|
|
|
|
&err,
|
|
|
|
"quality", "100",
|
|
|
|
NULL)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
2001-12-11 17:31:52 +00:00
|
|
|
} else {
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
do_compare (pixbuf,
|
|
|
|
gdk_pixbuf_new_from_file ("foo.jpg", &err),
|
|
|
|
err);
|
|
|
|
}
|
|
|
|
}
|
2001-12-11 17:31:52 +00:00
|
|
|
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
if (evt->keyval == 'p' && (evt->state & GDK_CONTROL_MASK)) {
|
|
|
|
/* save to callback */
|
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
2001-12-11 17:31:52 +00:00
|
|
|
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
loader = gdk_pixbuf_loader_new ();
|
|
|
|
if (!gdk_pixbuf_save_to_callback (pixbuf, save_to_loader, loader, "png",
|
|
|
|
&err,
|
|
|
|
"tEXt::Software", "testpixbuf-save",
|
|
|
|
NULL)
|
|
|
|
|| !gdk_pixbuf_loader_close (loader, &err)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader)),
|
|
|
|
err);
|
2004-08-19 00:25:27 +00:00
|
|
|
g_object_unref (loader);
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (evt->keyval == 'P') {
|
|
|
|
/* save to buffer */
|
|
|
|
if (!gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &count, "png",
|
|
|
|
&err,
|
|
|
|
"tEXt::Software", "testpixbuf-save",
|
|
|
|
NULL)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
buffer_to_pixbuf (buffer, count, &err),
|
|
|
|
err);
|
2000-10-06 18:19:18 +00:00
|
|
|
}
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
else if (evt->keyval == 'p') {
|
2000-10-06 18:19:18 +00:00
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2001-10-05 18:51:47 +00:00
|
|
|
if (!gdk_pixbuf_save (pixbuf, "foo.png", "png",
|
|
|
|
&err,
|
|
|
|
"tEXt::Software", "testpixbuf-save",
|
|
|
|
NULL)) {
|
2000-10-06 18:19:18 +00:00
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
2001-12-11 17:31:52 +00:00
|
|
|
} else {
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
do_compare(pixbuf,
|
|
|
|
gdk_pixbuf_new_from_file ("foo.png", &err),
|
|
|
|
err);
|
|
|
|
}
|
|
|
|
}
|
2001-12-11 17:31:52 +00:00
|
|
|
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
if (evt->keyval == 'i' && (evt->state & GDK_CONTROL_MASK)) {
|
|
|
|
/* save to callback */
|
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
loader = gdk_pixbuf_loader_new ();
|
|
|
|
if (!gdk_pixbuf_save_to_callback (pixbuf, save_to_loader, loader, "ico",
|
|
|
|
&err,
|
|
|
|
NULL)
|
|
|
|
|| !gdk_pixbuf_loader_close (loader, &err)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader)),
|
|
|
|
err);
|
2004-08-19 00:25:27 +00:00
|
|
|
g_object_unref (loader);
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (evt->keyval == 'I') {
|
|
|
|
/* save to buffer */
|
|
|
|
if (!gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &count, "ico",
|
|
|
|
&err,
|
|
|
|
NULL)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare (pixbuf,
|
|
|
|
buffer_to_pixbuf (buffer, count, &err),
|
|
|
|
err);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (evt->keyval == 'i') {
|
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
}
|
2001-12-11 17:31:52 +00:00
|
|
|
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
if (!gdk_pixbuf_save (pixbuf, "foo.ico", "ico",
|
|
|
|
&err,
|
|
|
|
NULL)) {
|
|
|
|
fprintf (stderr, "%s", err->message);
|
|
|
|
g_error_free (err);
|
|
|
|
} else {
|
|
|
|
do_compare(pixbuf,
|
|
|
|
gdk_pixbuf_new_from_file ("foo.ico", &err),
|
|
|
|
err);
|
2001-12-11 17:31:52 +00:00
|
|
|
}
|
Make s, S, Control-S, p, P, Control-P, i, I, Control-I test
Wed Jan 7 02:50:55 2004 Matthias Clasen <maclas@gmx.de>
* demos/testpixbuf-save.c: Make s, S, Control-S, p, P, Control-P,
i, I, Control-I test gdk_pixbuf_save(), gdk_pixbuf_save_to_buffer()
and gdk_pixbuf_save_to_callback() with jpeg, png and ico formats,
respectively. Tests #82203.
2004-01-07 01:59:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (evt->keyval == 'a') {
|
2001-12-11 17:31:52 +00:00
|
|
|
if (pixbuf == NULL) {
|
|
|
|
fprintf (stderr, "PIXBUF NULL\n");
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
GdkPixbuf *alpha_buf;
|
|
|
|
|
|
|
|
alpha_buf = gdk_pixbuf_add_alpha (pixbuf,
|
|
|
|
FALSE, 0, 0, 0);
|
|
|
|
|
|
|
|
g_object_set_data_full (G_OBJECT (da),
|
|
|
|
"pixbuf", alpha_buf,
|
|
|
|
(GDestroyNotify) g_object_unref);
|
2000-10-06 18:19:18 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-12-11 17:31:52 +00:00
|
|
|
static int
|
2000-10-06 18:19:18 +00:00
|
|
|
close_app (GtkWidget *widget, gpointer data)
|
|
|
|
{
|
|
|
|
gtk_main_quit ();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2010-09-08 23:15:14 +00:00
|
|
|
static gboolean
|
|
|
|
draw_cb (GtkWidget *drawing_area, cairo_t *cr, gpointer data)
|
2000-10-06 18:19:18 +00:00
|
|
|
{
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
|
2001-10-20 23:39:32 +00:00
|
|
|
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),
|
|
|
|
"pixbuf");
|
2010-07-13 15:49:33 +00:00
|
|
|
|
|
|
|
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
|
2010-09-08 23:15:14 +00:00
|
|
|
cairo_paint (cr);
|
2010-07-13 15:49:33 +00:00
|
|
|
|
2000-10-06 18:19:18 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2001-12-11 17:31:52 +00:00
|
|
|
static int
|
2000-10-06 18:19:18 +00:00
|
|
|
configure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data)
|
|
|
|
{
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
|
2001-10-20 23:39:32 +00:00
|
|
|
pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),
|
|
|
|
"pixbuf");
|
2000-10-06 18:19:18 +00:00
|
|
|
|
|
|
|
g_print ("X:%d Y:%d\n", evt->width, evt->height);
|
|
|
|
if (evt->width != gdk_pixbuf_get_width (pixbuf) || evt->height != gdk_pixbuf_get_height (pixbuf)) {
|
|
|
|
GdkWindow *root;
|
|
|
|
GdkPixbuf *new_pixbuf;
|
|
|
|
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
root = gdk_get_default_root_window ();
|
2010-10-02 00:47:55 +00:00
|
|
|
new_pixbuf = gdk_pixbuf_get_from_window (root,
|
|
|
|
0, 0, evt->width, evt->height);
|
2002-02-09 05:24:25 +00:00
|
|
|
g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", new_pixbuf,
|
|
|
|
(GDestroyNotify) g_object_unref);
|
2000-10-06 18:19:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
main (int argc, char **argv)
|
|
|
|
{
|
|
|
|
GdkWindow *root;
|
|
|
|
GtkWidget *window;
|
|
|
|
GtkWidget *vbox;
|
|
|
|
GtkWidget *drawing_area;
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
|
|
|
|
gtk_init (&argc, &argv);
|
|
|
|
|
Make gdkx.h the only installed header from gdk/x11. All structures in
Fri Sep 7 11:51:44 2001 Owen Taylor <otaylor@redhat.com>
Make gdkx.h the only installed header from gdk/x11.
All structures in gdk/x11 are opaque.
* gdk/x11/Makefile.am gdk/x11/gdkx.h gdk/x11/gdkprivate-x11.h:
Don't install gdk{drawable,pixmap,window}-x11.h.
* gdk/x11/{gdkcolormap-x11.c, gdkfont-x11.c, gdkx.h, gdkvisual-x11.c:
Move GdkColormapPrivateX11, GdkFontPrivateX GdkImagePrivateX11,
GdkVisualClass into C files.
* gdk/gdkpixmap-x11.[ch]: Make gdk_pixmap_impl_get_type() static.
* gdk/x11/{gdkcolor-x11.c, gdkcursor-x11.c, gdkdrawable-x11.c,
gdkfont-x11.c, gdkgc-x11.c, gdkx.h, gdkimage-x11,gdkvisual-x11.c}
Add public functions to replace previously exported direct
structure access.
gdk_x11_colormap_get_{xdisplay,xcolormap}
gdk_x11_cursor_get_{xdisplay,xcursor},
gdk_x11_drawable_get_{xdisplay,xcursor,gdk_x11_visual_get_xvisual,
gdk_x11_font_get_{xdisplay,xfont}, gdk_x11_image_get_{xdisplay,ximage},
gdk_x11_gc_get_{xdisplay,ximage}
* gdk/gdkprivate.h gdk/gdkinternals.h: Move GdkColorInfo,
GdkEventFilter, GdkClientFilter, GdkFontPrivate to gdkinternals.
Fix a number of variables and functions that were exported
"accidentally" from GDK.
* gdk/**.[ch]: gdk => _gdk for gdk_visual_init,
gdk_events_init, gdk_input_init, gdk_dnd_init, gdk_image_exit,
gdk_input_exit, gdk_windowing_exit, gdk_event_func, gdk_event_data,
gdk_event_notify, gdk_queued_events, gdk_queued_tail,
gdk_event_new, gdk_events_queue, gdk_events_unqueue,
gdk_event_queue_find_first, gdk_event_queue_remove_link,
gdk_event_queue_append, gdk_event_button_generate,
gdk_debug_flags, gdk_default_filters, gdk_parent_root.
* gdk/x11/{gdkevents-x11.c, gdkglobals-x11.c, gdkimage-x11.c,
gdkmain-x11.c, gdkprivate-x11.h, gdk/x11/gdkwindow-x11.c}:
gdk => _gdk for gdk_event_mask_table, gkd_nevent_masks,
gdk_wm_window_protocols, gdk_leader_window, gdk_xgrab_window,
gdk_use_xshm, gdk_input_ignore_core.
* gdk/x11/xsettings-common.h (xsettings_list_insert): Add
#defines to namespace functions into the private _gdk_
namespace.
* gdk/gdkwindow.[ch] gdk/x11/gdkx.h: Add gdk_get_default_root_window ()
to replace gdk_parent_root exported variable. Adjust and
deprecate GDK_ROOT_PARENT().
* demos/{testpixbuf-drawable.c,testpixbuf-save.c}: Fix
GDK_ROOT_PARENT usage, remove includes of port-specific
headers.
* gdk/{win32,x11,fb}/gdkinput*.[ch]: s/gdk/_gdk/ for
_gdk_input_gxid_host, _gdk_input_gxid_port, _gdk_input_ignore_core,
gdk_input_devices, _gdk_input_windows, gdk_init_input_core.
* gdk/x11/{gdkevents-x11.,c gdkglobals-x11.c, gdkmain-x11.c}
docs/Changes-2.0.txt: Remove gdk_wm_protocols,
gdk_wm_delete_window functions, gdk_wm_take_focus,
use gdk_atom_intern() instead.
* gdk/linux-fb/{gdkselection-fb.c, gdkmain-fb.c, gdkprivatefb.h}
gdk/win32/{gdkselection-win32.c, gdkmgdkwin32.h, gdkprivate-win32.h}
gdk/x11/{gdkselection-x11.c gdkx.h, gtkprivate-x11.h}
gtk/gtkselection.c
Unexport gdk_selection_property, just use
gdk_atom_intern ("GDK_SELECTION").
* gdk/x11/{gdkprivate-x11.h,gdkdrawable-x11h,gdkgc-x11.c,gdkx.h}:
Unexport gdk_drawable_impl_x11_get_type, gdk_gc_x11_get_type,
GDK_GC_X11 cast macros, GdkGCX11 structures, GdkCursorPrivate,
GdkVisualprivate, gdk_x11_gc_flush.
Make a number of public exports of variables into functions
to increase encapsulation.
* gdk/gdkinternals.h gdk/gdkinput.h gdk/gdkevents.h
gdk/linux-fb/gdkmouse-fb.c: gdk_core_pointer => _gdk_core_pointer,
move to gdkinternals.h. Add gdk_device_get_core_pointer ().
* gdk/gdkprivate.h gdk/gdkpango.c gdk/gdkinternals.h
docs/Changes-2.0.txt: Unexport gdk_parent_root, gdk_error_code,
gdk_error_warnings.
* gdk/x11/{gdkcolormap-x11.c, gdkmain-x11.c, gdkx.h}
docs/Changes-2.0.txt:
s/gdk_screen/_gdk_screen/, add gdk_x11_get_default_screen()
s/gdk_root_window/_gdk_root_window/, add gdk_x11_get_default_root_xwindow()
Add gdk_x11_get_default_xdisplay().
* gdk/gdk.h gdk/gdk.c linux-fb/gdkfb.h linux-fb/gdkglobals-fb.c
win32/gdkwin32.h x11/gdkglobals-x11.c gdk/x11/gdkmain-x11.c
gdk/x11/gdkx.h: gdk/gdk.def: Add gdk_get/set_program_class,
Don't export gdk_progclass, move --class command line
option and handling to common portion of GDK.
Miscellaneous fixes:
* gdk/x11/gdkwindow-x11.c (gdk_window_set_icon_list): Fix
g_return_val_if_fail that should have been g_return_if_fail.
* gdk/gdkinternals.h gdk/gdkprivate.h: Move
gdk_synthesize_window_state() to the semi-public gdkprivate.h.
* gtk/gtkdnd.c (_gtk_drag_source_handle_event): Remove uneeded
X11 dependency.
* gdk/linux-fb/gdkmain-fb.c gdk/win32/gdkmain-win32.c gdk/TODO:
Remove unused gdk_key_repeat_disable/restore.
* linux-fb/gdkglobals-fb.c win32/gdkglobals-win32.c
x11/gdkglobals-x11.c x11/gdkprivate-x11.h gdk/gdk.def:
Remove unused gdk_null_window_warnings variable.
* gdk/Makefile.am (DIST_SUBDIRS) nanox/*: cvs remove nanox;
it can be retrieved from the repository; it is too far
from functional to be worth having people check out;
it would be easier to start from scratch, I suspect.
* gdk/x11/gdkpixmap-x11.c: Fix lvalue usage of GDK_PIXMAP_XID().
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
* gdk/x11/gdkkeys-x11.c gdk/gdkrgb.c gdk/gdkwindow.c
gdk/x11/gdkpango-x11.c gdk/x11/gdkselection-x11.c:
Fix some accidentally global variables and unused global variables.
Add some space for future expansion to multihead.
* gdk/gdkdrawable.h: Add four reserved function pointers
for future expansion of GdkDrawableClass.
* gtk/gtkwindow.h gtk/gtkinvisible.h: Add reserved pointer
where we can put a GdkScreen * later.
2001-09-07 21:50:20 +00:00
|
|
|
root = gdk_get_default_root_window ();
|
2010-10-02 00:47:55 +00:00
|
|
|
pixbuf = gdk_pixbuf_get_from_window (root,
|
|
|
|
0, 0, 150, 160);
|
2000-10-06 18:19:18 +00:00
|
|
|
|
|
|
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
2001-10-20 23:39:32 +00:00
|
|
|
g_signal_connect (window, "delete_event",
|
|
|
|
G_CALLBACK (close_app), NULL);
|
|
|
|
g_signal_connect (window, "destroy",
|
|
|
|
G_CALLBACK (close_app), NULL);
|
2000-10-06 18:19:18 +00:00
|
|
|
|
|
|
|
vbox = gtk_vbox_new (FALSE, 0);
|
|
|
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
|
|
|
|
|
|
|
drawing_area = gtk_drawing_area_new ();
|
fix a typo.
2001-08-07 Havoc Pennington <hp@pobox.com>
* gtk/gtkfilesel.c (open_ref_dir): fix a typo.
* gtk/gtkplug.c (gtk_plug_init): remove setting of auto_shrink;
some fixage is needed here, but nothing simple. Owen understands
it. ;-)
* gtk/gtkwindow.h, gtk/gtkwindow.c: Rework code and API for window
sizing and positioning. Also, fix bug in compute_geometry_hints
(width/height confusion for setting min size).
(gtk_window_move): new function
(gtk_window_resize): new function
(gtk_window_get_size): new function
(gtk_window_get_position): new function
(gtk_window_parse_geometry): new function
* gtk/gtkwidget.c (gtk_widget_set_size_request): new function
(gtk_widget_get_size_request): new function
(gtk_widget_get_usize): delete, that was a short-lived function
;-)
(gtk_widget_set_usize): deprecate
(gtk_widget_set_uposition): deprecate, make it a trivial
gtk_window_move() wrapper
(gtk_widget_class_init): remove x/y/width/height properties,
add width_request height_request
* demos/*: update to avoid deprecated functions
* gtk/gtklayout.c: add x/y child properties
* gtk/gtkfixed.c: add x/y child properties, and get rid of
uses of "gint16"
* tests/testgtk.c (create_window_sizing): lots of tweaks to window
sizing test
* gdk/x11/gdkevents-x11.c (gdk_event_translate): Ensure that
configure events on toplevel windows are always in root window
coordinates, following ICCCM spec that all synthetic events
are in root window coords already, while real events are
in parent window coords. Previously the code assumed that
coords of 0,0 were parent window coords, which was
really broken.
* gtk/gtkcontainer.c (gtk_container_get_focus_chain): fix
warning
* gdk/gdkwindow.h (GdkWindowHints): add GDK_HINT_USER_POS
and GDK_HINT_USER_SIZE so we can set USSize and USPosition
hints in gtk_window_parse_geometry()
* gdk/x11/gdkwindow-x11.c (gdk_window_set_geometry_hints): support
new USER_POS USER_SIZE hints
2001-08-10 03:46:08 +00:00
|
|
|
gtk_widget_set_size_request (GTK_WIDGET (drawing_area),
|
|
|
|
gdk_pixbuf_get_width (pixbuf),
|
|
|
|
gdk_pixbuf_get_height (pixbuf));
|
2010-09-08 23:15:14 +00:00
|
|
|
g_signal_connect (drawing_area, "draw",
|
|
|
|
G_CALLBACK (draw_cb), NULL);
|
2001-10-20 23:39:32 +00:00
|
|
|
|
|
|
|
g_signal_connect (drawing_area, "configure_event",
|
|
|
|
G_CALLBACK (configure_cb), NULL);
|
|
|
|
g_signal_connect (window, "key_press_event",
|
|
|
|
G_CALLBACK (keypress_check), drawing_area);
|
2001-12-11 17:31:52 +00:00
|
|
|
g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", pixbuf,
|
|
|
|
(GDestroyNotify) g_object_unref);
|
2000-10-06 18:19:18 +00:00
|
|
|
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
|
|
|
|
|
|
|
|
gtk_widget_show_all (window);
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
|
|
}
|