Re: Goocanvasmm
- From: "Jonathon Jongsma" <jonathon quotidian org>
- To: "Gennaro Bellizio" <genbell tiscali it>
- Cc: gtkmm-list gnome org
- Subject: Re: Goocanvasmm
- Date: Wed, 20 Feb 2008 17:47:12 -0600
On 2/20/08, Gennaro Bellizio <genbell tiscali it> wrote:
>
>
> >----Messaggio originale----
> >Da: jonathon quotidian org
> >Data: 20/02/2008 16.54
>
> >A: "Gennaro Bellizio"<genbell tiscali it>
> >Cc: <gtkmm-list gnome org>
> >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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]