2017-06-13 2 views
0

Ich habe GTK :: ApplicationWindow mit einem OpenGL-Widget. Ich möchte die Größe des OpenGL-Widgets bei der Erstellung und bei der Größenänderung abfragen. Dies geschieht, damit ich das Seitenverhältnis ausgleichen kann. Hier ist ein Ausschnitt meines Codes. Das Problem ist, dass wenn ich das Fenster verkleinere oder spawne. Der Wert von m_glAreaWidth und m_glAreaHeight ist immer 0. Das Widget spawnt tatsächlich und reagiert auf die Größenänderung, daher verstehe ich nicht, wie get_allocation ein Rechteck der Größe 0 ergibt.Problem bekommen Widget-Größe in gtkmm

mainWindow::mainWindow(BaseObjectType* cobject ,const Glib::RefPtr<Gtk::Builder>& builder): 
     Gtk::ApplicationWindow(cobject), 
     m_refGlade(builder), 

{ 

     //add GLArea Widget 
     m_TopLayout->pack_start(m_GLArea); 

     m_GLArea.set_auto_render(true); 

     signal_size_allocate().connect(sigc::mem_fun(*this, &mainWindow::on_my_size_allocate),false); 

     //Makes window fill the whole screen 
     maximize(); 

     show_all(); 

} 
    void mainWindow::on_my_size_allocate(Gtk::Allocation& allocation) 
{ 
     Gtk::Allocation glAreaAlloc = m_GLArea.get_allocation(); 

     m_glAreaWidth = glAreaAlloc.get_x(); 
     m_glAreaHeight = glAreaAlloc.get_y(); 


     m_GLArea.queue_render(); 


} 

Antwort

0

Ich fand es heraus. Ich habe gerade ersetzt:

Gtk::Allocation glAreaAlloc = m_GLArea.get_allocation(); 

    m_glAreaWidth = glAreaAlloc.get_x(); 
    m_glAreaHeight = glAreaAlloc.get_y(); 

mit

m_glAreaWidth = m_GLArea.get_allocated_width(); 
    m_glAreaHeight = m_GLArea.get_allocated_height(); 

noch nicht sicher, warum dies funktioniert und nicht das andere.