Re: Gtk::Style usage help needed



First of all, thanks José for your complete answer,

I've done both steps you commented. Final sample code looks now like this:

#include <gtkmm.h>

class mystyle : public Gtk::Style
{
  public:
     static Glib::RefPtr <mystyle> create()
     {
	return Glib::RefPtr <mystyle> (new mystyle);
     }

  protected:
     mystyle() : Gtk::Style(), Glib::ObjectBase("mystyle")
     {
     }
};

int main (int argc, char **argv)
{
   Gtk::Main mainkit(argc, argv);

   Gtk::Window window;
   Gtk::Label label("test");
   Glib::RefPtr <mystyle> style = mystyle::create();

   label.set_style(style);
   
   window.resize(400,100);
   window.add(label);
   window.show_all();
   mainkit.run(window);

   return 0;
}

Anyway it doesn't work. Same errors, and same segfault.
Tried running under valgrind and here is a surprise.. under valgrind works!!
Valgrind don't show any errors in this code execution, but upon window close
I get this error:

(a.out:14344): GLib-GObject-CRITICAL **: g_object_unref: assertion
`G_IS_OBJECT (object)' failed

any idea?


José Alburquerque wrote:
> 
> On Fri, 2010-10-29 at 11:08 -0700, siagogam wrote:
>> Ok, I'll try to explain what I want to do, so you can tell me if I'm
>> doing it
>> the way is supposed to be done. 
>> 
>> As you said, I want to modify how widgets are drawn (by using cairo
>> inside
>> the style virtual functions), and I have no intention of creating a new
>> complete theme engine. If all applications should share the same look is
>> a
>> point of view quite extended , but what I want to do is just the opposite
>> (define my own look and feel in my application) 
>> 
>> I'm trying to do it just the way you mentioned, by calling set_style in
>> the
>> affected widgets. But if we recover the example code, I'm getting some
>> pango
>> errors and a segfault when trying to use an overloaded Gtk::Style in a
>> label
>> widget (other widgets I have tested works fine with this approach). 
>> 
>> I've been looking to the Gtk::Style code in style.cc and the create()
>> function does nothing but create the Glib::RefPtr, so I'm quite confused
>> write now. ¿what can it be wrong? 
> 
> I suppose that if you want to derive from Gtk::Style you should follow
> the same "structure" as the original Gtk::Style class.
> 
> Since Gtk::Style is reference counted, it is normally accessed using
> Gli::RefPtr<>.  Its constructors are protected and the create() method
> constructs the style and returns a Glib::RefPtr<> to the style.  You
> might follow a similar structure for your class (I think).
> 
> As far as drawing widgets with cairo, there is good docs in the
> programming book:
> http://library.gnome.org/devel/gtkmm-tutorial/unstable/chapter-drawingarea.html
> 
> There's also a section on creating custom widgets that might be helpful:
> http://library.gnome.org/devel/gtkmm-tutorial/unstable/chapter-customwidgets.html
> 
> Finally, I think it may be necessary to call the Glib::ObjectBase(const
> char*) constructor from the derived style class (I don't know for sure).
> See the following bug in case it is relevant:
> https://bugzilla.gnome.org/show_bug.cgi?id=523043
> 
>> 
>> TIA
>> 
>> 
>> José Alburquerque wrote:
>> > 
>> > On Fri, 2010-10-29 at 00:40 -0700, siagogam wrote: 
>> >> Yes I've already tried in my test example the Gtk::Style::create() and
>> >> works
>> >> fine, but what I want to do is overload the style drawing functions in
>> >> order
>> >> to perform some changes in the way some widgets are drawn. I can not
>> do
>> >> that
>> >> using the create static method.
>> > 
>> > As Paul said, users normally determine the look of applications on
>> their
>> > desktop by selecting themes themselves.  If you should still want to
>> > modify how widgets are drawn for some reason, the best way to do it, I
>> > think, is by using the various style manipulating methods in the
>> > Gtk::Widget API[1] such as get_style()[2], set_style()[3] and
>> > modify_style()[4] among others.
>> > 
>> > [1] http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1Widget.html
>> > [2]
>> >
>> http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1Widget.html#a3a3c08d5fcb8a134fff5e3f3a11f4f7f
>> > [3]
>> >
>> http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1Widget.html#a50ef706c909b415894aab77663447af3
>> > [4]
>> >
>> http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1Widget.html#a8fe55b3cc4342ae1242b384b2de813bd
>> > 
>> >> 
>> >> I'm not sure of whats rcstyle for, but I think its for defining the
>> >> system
>> >> apearance through an rc style file. is this true? Anyway, thats not
>> what
>> >> I'm
>> >> looking for.
>> >> 
>> >> Gtk::Style offers lots of protected virtual methods, so its' designed
>> to
>> >> be
>> >> inherited, but in the other hand the label style seems to depend on
>> the
>> >> code
>> >> executed in the create() method, that can not be overloaded. Is this a
>> >> bug?
>> >> 
>> >> TIA
>> > 
>> > -- 
>> > José
>> > 
>> > 
>> > 
>> > _______________________________________________
>> > gtkmm-list mailing list
>> > gtkmm-list gnome org
>> > http://mail.gnome.org/mailman/listinfo/gtkmm-list
>> > 
>> > 
>> 
> 
> -- 
> José
> 
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
> 
> 

-- 
View this message in context: http://old.nabble.com/Gtk%3A%3AStyle-usage-help-needed-tp30079646p30089083.html
Sent from the Gtkmm mailing list archive at Nabble.com.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]