>----Messaggio originale---- >Da: [EMAIL PROTECTED] >Data: 21/02/2008 0.47 >A: "Gennaro Bellizio"<[EMAIL PROTECTED]> >Cc: <[email protected]> >Ogg: Re: Goocanvasmm > >On 2/20/08, Gennaro Bellizio <[EMAIL PROTECTED]> wrote: >> >> >> >----Messaggio originale---- >> >Da: [EMAIL PROTECTED] >> >Data: 20/02/2008 16.54 >> >> >A: "Gennaro Bellizio"<[EMAIL PROTECTED]> >> >Cc: <[email protected]> >> >Ogg: Re: Goocanvasmm >> > >> >> >> >I'm afraid I don't really understand exactly what the problem is. >> >Could you provide a small code example that shows the issue that >> >you're having? >> > >> >-- >> >jonner >> > >> >> >> Let's consider the coordinates example. When I run the application no >> rectangle is displayed onto the canvas. Nevertheless if I click some >> button the item bounds labels are updated correctly. By applying the >> following patch to window.h >> >> Index: window.h >> =================================================================== >> --- window.h (revisione 1357) >> +++ window.h (copia locale) >> @@ -29,7 +29,7 @@ >> void update_label(); >> >> Goocanvas::Canvas m_canvas; >> - Glib::RefPtr<Goocanvas::Rect> m_rect; >> + Glib::RefPtr<Goocanvas::RectModel> m_rect; >> >> Gtk::VBox m_box; >> Gtk::HBox m_button_box; >> >> and the following to window.cc >> >> Index: window.cc >> =================================================================== >> --- window.cc (revisione 1357) >> +++ window.cc (copia locale) >> @@ -34,8 +34,9 @@ >> m_canvas.set_size_request(640, 480); >> m_canvas.set_bounds(0, 0, 1000, 1000); >> >> - Glib::RefPtr<Goocanvas::Item> root = m_canvas.get_root_item(); >> - m_rect = Goocanvas::Rect::create(10, 10, 60, 60); >> + Glib::RefPtr<Goocanvas::ItemModel> root = Goocanvas:: GroupModel:: >> create() ; >> + m_canvas->set_root_item_model(root) ; >> + m_rect = Goocanvas::RectModel::create(10, 10, 60, 60); >> root->add_child(m_rect); >> m_rect->property_line_width().set_value(10.0); >> m_rect->property_stroke_color().set_value("yellow"); >> @@ -74,6 +75,7 @@ >> ", width=" << m_rect->property_width() << ", height=" << >> m_rect->property_height() << >> ", line_width=" << m_rect->property_line_width() << std:: >> endl; >> >> + // No bounds are available now, so the following will not compile >> Goocanvas::Bounds bounds = m_rect->get_bounds(); >> str << "Item bounds: x1=" << bounds.get_x1() << ", y1=" << bounds. >> get_y1() << ", x2=" << bounds.get_x2() << ", y2=" << bounds. get_y2() << >> std::endl; >> >> the rectangle is displayed but now its bounds aren't available because >> the *Model classes do not provide the get_bounds() method. The same >> happens for the Goocanvas::Ellipse instances. >> >> Goocanvas::Text instances, instead, are displayed correctly like it >> can be seen by applying the following patch >> >> Index: window.h >> =================================================================== >> --- window.h (revisione 1357) >> +++ window.h (copia locale) >> @@ -29,7 +29,7 @@ >> void update_label(); >> >> Goocanvas::Canvas m_canvas; >> - Glib::RefPtr<Goocanvas::Rect> m_rect; >> + Glib::RefPtr<Goocanvas::Text> m_text; >> >> Gtk::VBox m_box; >> Gtk::HBox m_button_box; >> >> Index: window.cc >> =================================================================== >> --- window.cc (revisione 1357) >> +++ window.cc (copia locale) >> @@ -35,11 +35,9 @@ >> m_canvas.set_bounds(0, 0, 1000, 1000); >> >> Glib::RefPtr<Goocanvas::Item> root = m_canvas.get_root_item(); >> - m_rect = Goocanvas::Rect::create(10, 10, 60, 60); >> - root->add_child(m_rect); >> - m_rect->property_line_width().set_value(10.0); >> - m_rect->property_stroke_color().set_value("yellow"); >> - m_rect->property_fill_color().set_value("gray"); >> + m_text = Goocanvas::Text::create("This is displayed\nand bounds are >> available"); >> + root->add_child(m_text); >> + m_text->property_fill_color().set_value("blue"); >> >> >> Gtk::ScrolledWindow* sw = Gtk::manage(new Gtk:: ScrolledWindow()); >> @@ -70,11 +68,11 @@ >> void ExampleWindow::update_label() >> { >> std::stringstream str; >> - str << "Rect: x=" << m_rect->property_x() << ", y=" << m_rect- >> >property_y() << >> - ", width=" << m_rect->property_width() << ", height=" << >> m_rect->property_height() << >> - ", line_width=" << m_rect->property_line_width() << std:: >> endl; >> + str << "Rect: x=" << m_text->property_x() << ", y=" << m_text- >> >property_y() << >> + ", width=" << m_text->property_width() << >> + ", line_width=" << m_text->property_line_width() << std:: >> endl; >> >> - Goocanvas::Bounds bounds = m_rect->get_bounds(); >> + Goocanvas::Bounds bounds = m_text->get_bounds(); >> str << "Item bounds: x1=" << bounds.get_x1() << ", y1=" << bounds. >> get_y1() << ", x2=" << bounds.get_x2() << ", y2=" << bounds. get_y2() << >> std::endl; >> >> >> @@ -84,21 +82,21 @@ >> >> void ExampleWindow::on_button_translate() >> { >> - m_rect->translate(20, 20); >> + m_text->translate(20, 20); >> update_label(); >> } >> >> void ExampleWindow::on_button_setxy() >> { >> - m_rect->property_x() = 50; >> - m_rect->property_y() = 50; >> + m_text->property_x() = 50; >> + m_text->property_y() = 50; >> update_label(); >> } >> >> >> void ExampleWindow::on_button_scale() >> { >> - m_rect->scale(1.2, 1.2); >> + m_text->scale(1.2, 1.2); >> update_label(); >> } >> >> In my application I used a Goocanvas::GroupModel for stacking a >> Goocanvas::EllipseModel and a Goocanvas::TextModel in order to draw a >> graph node with a text-label. My problem is to get the text-label >> bounds in order to correctly center it into the node. >> >> I hope I have been more clear this time. :-) >> >> Thanks in advance. >> >> Gennaro Bellizio > >What version of goocanvasmm are you using? Because it is not possible >to get the bounds in any released version, but I just recently >committed a change to svn that adds a get/set_bounds function to >ItemSimple (which is a base class for Rect, Ellipse, etc). So I think >it should work if you use goocanvasmm from svn. If it does not, >please file a bug. > >-- >jonner >
I'm using the svn trunk. Gennaro Bellizio ________________________________________________________________ Tiscali Voce 8 Mega: attiva la promozione entro il 21/02/08, in esclusiva TELEFONO+ADSL a soli 4,95 Euro al mese! http://abbonati.tiscali.it/promo/mail/ _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
