LINUX.ORG.RU

gtk2: рисование всякой всячины


0

0

не рисуется ничего, просто создается окно со скриншотом части экрана, которую он закрывает. делаю так: в функцию передается графический контекст окошка, создаю GdkPixmap.дальше:

GdkPixbuf *pixbuf = gdk_pixbuf_new_from_data((const guchar *)buf,//const guchar *data,
GDK_COLORSPACE_RGB, //GdkColorspace colorspace,

false, //gboolean has_alpha,

8, //int bits_per_sample,

cache.width(), //int width,

cache.height(), //int height,

depthy * cache.width(), //int rowstride,

NULL, //GdkPixbufDestroyNotify destroy_fn,

NULL //gpointer destroy_fn_data);

);
gdk_draw_pixbuf(pixmap,//GdkDrawable *drawable,
hdc, //GdkGC *gc,
pixbuf, //GdkPixbuf *pixbuf,
0, //gint src_x,
0, //gint src_y,
x, //gint dest_x,
y, //gint dest_y,
cache.width(), //gint width,
cache.height(), //gint height,
GDK_RGB_DITHER_NONE, //GdkRgbDither dither,
0, //gint x_dither,
0 //gint y_dither);
);

#include <gtk/gtk.h>

gboolean window_on_expose(GtkWidget *widget,
			  GdkEventExpose *event,
			  gpointer user_data)
{
  GdkGC *gc;

  gc = gdk_gc_new(GDK_DRAWABLE(widget->window));

  gdk_draw_pixbuf(GDK_DRAWABLE(widget->window),
		  gc,
		  GDK_PIXBUF(user_data),
		  0, 0,
		  0, 0,
		  -1, -1,
		  GDK_RGB_DITHER_NORMAL,
		  0, 0);
  g_object_unref(G_OBJECT(gc));

  return TRUE;
}

int main(int argc, char *argv[])
{
  GtkWidget *window; /* окно, на котором будем рисовать */
  GdkPixbuf *pixbuf; /* pixbuf, который будем рисовать */

  gtk_init(&argc, &argv);

  /* Создаем pixbuf */
  pixbuf = gdk_pixbuf_new_from_file("/usr/share/icons/gnome/32x32/status/gtk-dialog-warnin
g.png", NULL);
  /* Создаем окно */
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_resize(GTK_WINDOW(window), 32, 32);
  g_signal_connect(G_OBJECT(window), "expose_event",
		   G_CALLBACK(window_on_expose), (gpointer)pixbuf);
  g_signal_connect(G_OBJECT(window), "destroy",
		   G_CALLBACK(gtk_main_quit), NULL);

  /* Показываем окно, запускаем главный цикл */
  gtk_widget_show(window);
  gtk_main();
  return 0;
}

Deleted
()
Ответ на: комментарий от Deleted

Спасибо, но это немного не то. Изначально ситуация такая: имеется проект на java, GUI написан с помощью SWT. Так же имеется стороння либа на плюсах, которую надо прикрутить к проекту. Выглядит все так: на стороне java создается окно и какие-то там виджеты, берется график контекст и передается на плюсовую сторону. То есть к самому окну доступа у меня нет. Хотелось бы сделать так: создаем в памяти карту пикселей, а потом натягиваем ее на график контескт и передаем на сторону java для отрисовки. Реально ли это сделать, не меняя глобально код на java?

Infinity
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.