J'ai écrit le code suivant pour placer le curseur d'un Gtk::Window
à partir d'un Cairo::Context
. Lorsque j'exécute le programme et déplace le curseur dans la fenêtre, le curseur se transforme en une ligne horizontale noire en haut, suivie par une forme blanche indéfinissable en bas. Je m'attendais à ce que le curseur se transforme en un carré noir de 16 × 16. Pourquoi le curseur n'atteint-il pas la forme voulue?Gtk +: Comment définir le curseur d'une fenêtre à partir d'un contexte Cairo?
#include <gtkmm.h>
const int size = 16, hotspot = 0;
class Window : public Gtk::Window
{
public:
void change_cursor()
{
Glib::RefPtr<Gdk::Drawable> pixmap = Gdk::Pixmap::create(
Glib::RefPtr<Gdk::Drawable>(), size, size, get_window()->get_depth());
pixmap->set_colormap(get_window()->get_colormap());
Cairo::RefPtr<Cairo::Context> context = pixmap->create_cairo_context();
context->set_source_rgba(0, 0, 0, 0);
context->rectangle(0, 0, size, size);
context->fill();
Glib::RefPtr<Gdk::Pixbuf> pixbuf
= Gdk::Pixbuf::create(pixmap, 0, 0, size, size);
Gdk::Cursor cursor(get_window()->get_display(), pixbuf, hotspot, hotspot);
window->set_cursor(cursor);
}
};
int main(int argc, char* argv[])
{
Gtk::Main app(argc, argv);
Window window;
window.show_all();
window.change_cursor();
Gtk::Main::run(window);
return 0;
}
Quand je dessine le Gdk::Pixmap
à l'écran, il semble bien. Quand je dessine le Gdk::Pixbuf
à l'écran, je reçois des ordures.