次のコードを書いてGtk::Window
のカーソルをCairo::Context
に設定しました。プログラムを実行してカーソルをウィンドウに移動すると、カーソルが上の横の黒い線に変わり、下に定義できない白い形が続きます。カーソルが黒の16×16の正方形に変わることを期待していました。なぜカーソルは私が意図した形にならないのですか?Gtk +:カイロコンテキストからウィンドウのカーソルを設定する方法は?
#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;
}
Gdk::Pixmap
を画面に描画すると、正常に表示されます。 Gdk::Pixbuf
を画面に描画すると、ゴミが出ます。