Added scaling of pixmaps. Currently doesn't work, however, since I'm
Added scaling of pixmaps. Currently doesn't work, however, since I'm guessing how art_rgb_affine really works. Mark
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||
*
|
||||
@ -44,34 +45,47 @@ quit_func (GtkWidget *widget, gpointer dummy)
|
||||
|
||||
expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data)
|
||||
{
|
||||
GdkPixBuf *pixbuf = (GdkPixBuf *)data;
|
||||
gint x1, y1, x2, y2;
|
||||
GdkPixBuf *pixbuf;
|
||||
|
||||
if (pixbuf->art_pixbuf->has_alpha){
|
||||
gdk_draw_rgb_32_image (drawing_area->window,
|
||||
drawing_area->style->black_gc,
|
||||
event->area.x, event->area.y,
|
||||
event->area.width,
|
||||
event->area.height,
|
||||
GDK_RGB_DITHER_MAX,
|
||||
pixbuf->art_pixbuf->pixels
|
||||
+ (event->area.y * pixbuf->art_pixbuf->rowstride)
|
||||
+ (event->area.x * pixbuf->art_pixbuf->n_channels),
|
||||
pixbuf->art_pixbuf->rowstride);
|
||||
}else{
|
||||
gdk_draw_rgb_image (drawing_area->window,
|
||||
drawing_area->style->white_gc,
|
||||
event->area.x, event->area.y,
|
||||
event->area.width,
|
||||
event->area.height,
|
||||
GDK_RGB_DITHER_NORMAL,
|
||||
pixbuf->art_pixbuf->pixels
|
||||
+ (event->area.y * pixbuf->art_pixbuf->rowstride)
|
||||
+ (event->area.x * pixbuf->art_pixbuf->n_channels),
|
||||
pixbuf->art_pixbuf->rowstride);
|
||||
}
|
||||
pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
|
||||
|
||||
if (pixbuf->art_pixbuf->has_alpha){
|
||||
gdk_draw_rgb_32_image (drawing_area->window,
|
||||
drawing_area->style->black_gc,
|
||||
0, 0,
|
||||
pixbuf->art_pixbuf->width,
|
||||
pixbuf->art_pixbuf->height,
|
||||
GDK_RGB_DITHER_NORMAL,
|
||||
pixbuf->art_pixbuf->pixels,
|
||||
pixbuf->art_pixbuf->rowstride);
|
||||
} else {
|
||||
gdk_draw_rgb_image (drawing_area->window,
|
||||
drawing_area->style->white_gc,
|
||||
0, 0,
|
||||
pixbuf->art_pixbuf->width,
|
||||
pixbuf->art_pixbuf->height,
|
||||
GDK_RGB_DITHER_NORMAL,
|
||||
pixbuf->art_pixbuf->pixels,
|
||||
pixbuf->art_pixbuf->rowstride);
|
||||
}
|
||||
}
|
||||
|
||||
config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data)
|
||||
{
|
||||
GdkPixBuf *pixbuf, *spb;
|
||||
|
||||
pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
|
||||
|
||||
g_print("X:%d Y:%d\n", event->width, event->height);
|
||||
|
||||
if (((event->width) != (pixbuf->art_pixbuf->width)) ||
|
||||
((event->height) != (pixbuf->art_pixbuf->height))) {
|
||||
spb = gdk_pixbuf_scale(pixbuf, event->width, event->height);
|
||||
gdk_pixbuf_free (pixbuf);
|
||||
gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", spb);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
new_testrgb_window (GdkPixBuf *pixbuf)
|
||||
{
|
||||
@ -88,7 +102,7 @@ new_testrgb_window (GdkPixBuf *pixbuf)
|
||||
"GtkObject::user_data", NULL,
|
||||
"GtkWindow::type", GTK_WINDOW_TOPLEVEL,
|
||||
"GtkWindow::title", "testrgb",
|
||||
"GtkWindow::allow_shrink", FALSE,
|
||||
"GtkWindow::allow_shrink", TRUE,
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
(GtkSignalFunc) quit_func, NULL);
|
||||
@ -97,11 +111,15 @@ new_testrgb_window (GdkPixBuf *pixbuf)
|
||||
|
||||
drawing_area = gtk_drawing_area_new ();
|
||||
|
||||
gtk_widget_set_usize (drawing_area, w, h);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, FALSE, FALSE, 0);
|
||||
gtk_drawing_area_size (GTK_DRAWING_AREA(drawing_area), w, h);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT(drawing_area), "expose_event",
|
||||
GTK_SIGNAL_FUNC (expose_func), pixbuf);
|
||||
GTK_SIGNAL_FUNC(expose_func), NULL);
|
||||
gtk_signal_connect (GTK_OBJECT(drawing_area), "configure_event",
|
||||
GTK_SIGNAL_FUNC (config_func), NULL);
|
||||
|
||||
gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", pixbuf);
|
||||
|
||||
gtk_widget_show (drawing_area);
|
||||
|
||||
@ -137,14 +155,11 @@ main (int argc, char **argv)
|
||||
gtk_widget_set_default_visual (gdk_rgb_get_visual ());
|
||||
|
||||
i = 1;
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (argv[i])
|
||||
{
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (argv[i]) {
|
||||
pixbuf = gdk_pixbuf_load_image (argv[i]);
|
||||
|
||||
if (pixbuf)
|
||||
{
|
||||
if (pixbuf) {
|
||||
new_testrgb_window (pixbuf);
|
||||
found_valid = TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user