Re: [gtk-list] gdk bitmap error



Tony Towers wrote:

> I would like to use bitmaps in part of a tapestry chart generator I'm
> writing.  Currently I'm using pixmaps throughout, but a significant
> part of the program uses plain black/white icons.  Using bitmaps
> here would reduce code size and maybe speed it up a bit.
>
> I can't get gdk_bitmap_create_from_data to work.  I've read through
> the manuals and tutorials, and as far as I can see I'm using it right,
> but whenever I get to a point where one of the bitmaps would be
> displayed the process dies and
>
> Gdk-ERROR **: BadMatch (invalid parameter attributes)
>   serial 80 error_code 8 request_code 62 minor_code 0
>
> is printed on stderr.
>
> The code included reproduces the problem nicely on both Linux (Debian
> 2.0 + 2.2.5 kernel) and Solaris 7.  I'm using GTK+/Glib 1.2.3.
>
> The icon should be an elongated right pointing arrow.
>
> I suspect I'm doing something daft, anyone have any ideas?
> Thanks in advance.
>
> #include <gtk/gtk.h>
>
> #define icon_width 90
> #define icon_height 16
> static char icon_bits[] = {
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00,
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,
>  0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,
>  0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,
>  0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,
>  0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
>  0x7f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,
>  0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,
>  0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
>
> main(int argc, char ** argv)
> {
>   GtkWidget *window, *pixwid;
>   GdkPixmap *pixmap;
>
>   gtk_init(&argc, &argv);
>
>   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
>
>   pixmap = gdk_bitmap_create_from_data(window->window, icon_bits,
>                                        icon_width, icon_height);
>   pixwid = gtk_pixmap_new(pixmap, NULL);
>   gtk_container_set_border_width(GTK_CONTAINER(window), 100);
>   gtk_container_add(GTK_CONTAINER(window), pixwid);
>   gtk_widget_show(pixwid);
>   gtk_widget_show(window);
>
>   gtk_main();
> }
>
> --
> Tony Towers
>
> --
> To unsubscribe: mail -s unsubscribe gtk-list-request@redhat.com < /dev/null

I think your problem is "gdk_bitmap_create_from...";  The depth of your pixmap
does not match the depth of your drawable.

Try this code, with "gdk_pixmap_create_from..."

#include <gtk/gtk.h>

#define icon_width 90
#define icon_height 16
static char icon_bits[] = {
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,
 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0x7f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,
 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,
 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

main(int argc, char ** argv)
{
  GtkWidget *window, *pixwid;
  GdkPixmap *pixmap;
  GdkColor bg, fg;
  GdkVisual *vis;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  vis = gtk_widget_get_visual(window);

  /* This colour management IS WRONG. You must change it */
  bg.pixel = 0x000000;
  fg.pixel = 0xffffff;

  pixmap = gdk_pixmap_create_from_data(window->window, icon_bits,
                                       icon_width, icon_height, vis->depth, &fg,
&bg);
  pixwid = gtk_pixmap_new(pixmap, NULL);
  gtk_container_set_border_width(GTK_CONTAINER(window), 100);
  gtk_container_add(GTK_CONTAINER(window), pixwid);
  gtk_widget_show(pixwid);
  gtk_widget_show(window);

  gtk_main();
}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]