2 Copyright (C) 2009 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 $Id: cell_renderer_toggle_pixbuf.cc $
24 #include <gtkmm2ext/cell_renderer_pixbuf_toggle.h>
30 using namespace Gtkmm2ext
;
33 CellRendererPixbufToggle::CellRendererPixbufToggle() :
34 Glib::ObjectBase( typeid(CellRendererPixbufToggle
) ),
36 property_pixbuf_(*this, "pixbuf"),
37 property_active_(*this, "active", false)
39 property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE
;
42 property_sensitive() = false;
45 Glib::PropertyProxy
< Glib::RefPtr
<Gdk::Pixbuf
> >
46 CellRendererPixbufToggle::property_pixbuf()
48 return property_pixbuf_
.get_proxy();
51 Glib::PropertyProxy
<bool>
52 CellRendererPixbufToggle::property_active()
54 return property_active_
.get_proxy();
57 // Overridden methods of the parent CellRenderer
58 Glib::PropertyProxy_Base
59 CellRendererPixbufToggle::_property_renderable()
61 return property_pixbuf();
65 CellRendererPixbufToggle::activate_vfunc(GdkEvent
*, Gtk::Widget
&, const Glib::ustring
& path
, const Gdk::Rectangle
&, const Gdk::Rectangle
&, Gtk::CellRendererState
)
67 signal_toggled_(path
);
74 CellRendererPixbufToggle::render_vfunc (const Glib::RefPtr
<Gdk::Drawable
>& window
, Gtk::Widget
& /*widget*/, const Gdk::Rectangle
& /*background_area*/, const Gdk::Rectangle
& cell_area
, const Gdk::Rectangle
& /*expose_area*/, Gtk::CellRendererState
/*flags*/)
77 int offset_height
= 0;
79 if(property_active() == true){
81 offset_width
= cell_area
.get_x() + (int)(cell_area
.get_width() - inactive_pixbuf
->get_width())/2;
82 offset_height
= cell_area
.get_y() + (int)(cell_area
.get_height() - inactive_pixbuf
->get_height())/2;
84 window
->draw_pixbuf (RefPtr
<GC
>(), active_pixbuf
, 0, 0, offset_width
, offset_height
, -1, -1, Gdk::RGB_DITHER_NORMAL
, 0, 0);
87 offset_width
= cell_area
.get_x() + (int)(cell_area
.get_width() - inactive_pixbuf
->get_width())/2;
88 offset_height
= cell_area
.get_y() + (int)(cell_area
.get_height() - inactive_pixbuf
->get_height())/2;
90 window
->draw_pixbuf (RefPtr
<GC
>(), inactive_pixbuf
, 0, 0, offset_width
, offset_height
, -1, -1, Gdk::RGB_DITHER_NORMAL
, 0, 0);
95 CellRendererPixbufToggle::get_size_vfunc (Gtk::Widget
& /*widget*/, const Gdk::Rectangle
* /*cell_area*/, int* /*x_offset*/, int* /*y_offset*/, int* /*width*/, int* /*height*/) const
97 //cerr << "cell_renderer_pixbuf_toggle get_size" << endl;
102 CellRendererPixbufToggle::set_active_pixbuf(Glib::RefPtr
<Gdk::Pixbuf
> pixbuf
){
103 active_pixbuf
= pixbuf
;
107 CellRendererPixbufToggle::set_inactive_pixbuf(Glib::RefPtr
<Gdk::Pixbuf
> pixbuf
){
108 inactive_pixbuf
= pixbuf
;
111 CellRendererPixbufToggle::SignalToggled
&
112 CellRendererPixbufToggle::signal_toggled()
114 return signal_toggled_
;