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 _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
