[prev in list] [next in list] [prev in thread] [next in thread]
List: gtkmm
Subject: Re: Implementing a LED-like widget
From: Rob Benton <rob.benton () conwaycorp ! net>
Date: 2005-08-27 1:53:27
Message-ID: 430FD7CA.4020908 () conwaycorp ! net
[Download RAW message or body]
Marcus Lundblad wrote:
> -----------------------------------------------------------
>
> desk_indicator.hh:
>
> #include <gtkmm.h>
> #include <gdkmm.h>
>
> #ifndef DESK_INDICATOR
> #define DESK_INDICATOR
>
> class desk_indicator : public Gtk::Frame {
> public:
> desk_indicator();
> ~desk_indicator();
>
> void set_active(bool active = true);
> bool active() const { return is_active; }
>
> private:
>
> class led_area : public Gtk::DrawingArea {
> public:
> led_area();
> void set_active(bool active = true) { this->is_active = active; }
> bool active() const { return is_active; }
>
> void on_realize();
> bool on_expose_event(GdkEventExpose* ev);
>
> private:
> bool is_active;
> Glib::RefPtr<Gdk::GC> gc;
>
> };
>
> bool is_active;
>
> led_area led;
> };
>
> #endif //DESK_INDICATOR
>
> ------------------------------------------------------------------
> desk_indicator.cc:
>
> #include "desk_indicator.hh"
>
> #include <gdkmm.h>
> #include <iostream>
>
> desk_indicator::desk_indicator()
> {
> std::cerr << "desk_indicator::desk_indicator" << std::endl;
> set_shadow_type(Gtk::SHADOW_IN);
> set_size_request(10,10);
> add(led);
> is_active = false;
> }
>
> desk_indicator::~desk_indicator()
> {
> }
>
> void
> desk_indicator::set_active(bool active)
> {
> this->is_active = active;
> led.set_active(active);
> }
>
> desk_indicator::led_area::led_area()
> {
> is_active = false;
> set_size_request(10, 10);
> }
>
> void
> desk_indicator::led_area::on_realize()
> {
> Glib::RefPtr<Gdk::Window> win = get_window();
> gc = Gdk::GC::create(win);
> gc->set_foreground(Gdk::Color("Yellow"));
> }
>
> bool
> desk_indicator::led_area::on_expose_event(GdkEventExpose* event)
> {
> std::cerr << "desk_indicator::on_expose_event" << std::endl;
> if(active()) {
> int width, height;
> Glib::RefPtr<Gdk::Window> win = get_window();
> win->get_size(width, height);
> win->draw_rectangle(gc, true, 0, 0, width, height);
> }
> return true;
> }
>
> ---------------------------------------------------------------------
Marcus, I've been working a lot with Gtk::DrawingArea widgets lately and
I have been looking at your code. I noticed in this example here you
never explicitly show() the led object. Did I miss where that is happening?
Also I've never tried to use a temporary Gdk::Color object in the
set_foreground() call. I've always used alloc_color() from the colormap
object (my method of getting the colormap is for an old 2.4 bug):
_colormap = Gdk::Screen::get_default()->get_default_colormap();
_bgcolor.set_rgb(43690, 43690, 43690);
_colormap->alloc_color(_bgcolor);
and then called free_colors() when I am done:
_colormap->free_colors(_bgcolor, 1);
When you step through your code with GDB, how much of your widgets get
shown?
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic