Я изо всех сил пытаюсь получить gtkmm3 Gtk::OffscreenWindow
для рендеринга на поверхности Каира.Как правильно сделать это?
У меня есть класс, полученный из Gtk::OffscreenWindow
Я назвал WidgetRenderer
.У меня есть другой класс, полученный из Gtk::DrawingArea
рендеринга окончательного DrawingArea
, который называется DrawManager
.Используя Glib::Refptr
, указывающий на Gdk::Pixbuf
и получая PixBuf, используя WidgetRenderer.get_pixbuf()
Я попытался изменить Gtk::OffscreenWindow
на стандартное окно и напрямую попытался запустить его, используя Gtk::Application.run(WidgetRenderer)
Запуск Solus 4.0 и обновление пакетов с хранилищем.
Конструктор WidgetRenderer:
WidgetRenderer::WidgetRenderer() :
title("Label")
{
add(title);
show_all_children();
show();
}
Конструктор DrawManager:
MyArea::MyArea() : testNode()
{
testNode.show();
std::cout << testNode.get_width() << std::endl;
m_image = testNode.get_pixbuf();
}
Функция on_draw DrawManager:
bool MyArea::on_draw(const Cairo::RefPtr<Cairo::Context> &cr)
{
Gtk::Allocation allocation = get_allocation();
const int width = allocation.get_width();
const int height = allocation.get_height();
Gdk::Cairo::set_source_pixbuf(cr, m_image, 200, 200);
cr->paint();
return true;
}
Основная функция:
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv);
Gtk::Window win;
win.set_title("Test");
//win.set_default_size(200, 200);
DrawManager area;
win.add(area);
area.show();
return app->run(win);
Что должно произойти, это то, что этикетка label
должна быть напечатана в окне.Вместо этого я получаю белый экран.