Re: Goocanvasmm



>----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]