Re: Goocanvasmm
- From: Gennaro Bellizio <genbell tiscali it>
- To: <jonathon quotidian org>
- Cc: gtkmm-list gnome org
- Subject: Re: Goocanvasmm
- Date: Thu, 21 Feb 2008 09:24:30 +0100 (CET)
>----Messaggio originale----
>Da: jonathon quotidian org
>Data: 21/02/2008 0.47
>A: "Gennaro Bellizio"<genbell tiscali it>
>Cc: <gtkmm-list gnome org>
>Ogg: Re: Goocanvasmm
>
>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
>
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/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]