8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White/*
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White * Authors:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White * Theodore Janeczko
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White *
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White * Copyright (C) Theodore Janeczko 2012 <flutterguy317@gmail.com>
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White *
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White * Released under GNU GPL, read the file 'COPYING' for more information
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White */
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
22d14efbd00c227bcdb169da6f3eca426471745cLiam P. White#ifdef HAVE_CONFIG_H
22d14efbd00c227bcdb169da6f3eca426471745cLiam P. White# include <config.h>
22d14efbd00c227bcdb169da6f3eca426471745cLiam P. White#endif
22d14efbd00c227bcdb169da6f3eca426471745cLiam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include "ui/widget/clipmaskicon.h"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include <gtkmm/icontheme.h>
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include "widgets/icon.h"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include "widgets/toolbox.h"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include "ui/icon-names.h"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#include "layertypeicon.h"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitenamespace Inkscape {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitenamespace UI {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitenamespace Widget {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. WhiteClipMaskIcon::ClipMaskIcon() :
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Glib::ObjectBase(typeid(ClipMaskIcon)),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf(),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _pixClipName(INKSCAPE_ICON("path-intersection")),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _pixInverseName(INKSCAPE_ICON("path-difference")),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _pixMaskName(INKSCAPE_ICON("mask-intersection")),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_active(*this, "active", 0),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_clip(*this, "pixbuf_on", Glib::RefPtr<Gdk::Pixbuf>(0)),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_inverse(*this, "pixbuf_on", Glib::RefPtr<Gdk::Pixbuf>(0)),
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_mask(*this, "pixbuf_off", Glib::RefPtr<Gdk::Pixbuf>(0))
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White phys = sp_icon_get_phys_size((int)Inkscape::ICON_SIZE_DECORATION);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Glib::RefPtr<Gtk::IconTheme> icon_theme = Gtk::IconTheme::get_default();
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (!icon_theme->has_icon(_pixClipName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixClipName.data()), Inkscape::ICON_SIZE_DECORATION );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (!icon_theme->has_icon(_pixInverseName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixInverseName.data()), Inkscape::ICON_SIZE_DECORATION );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (!icon_theme->has_icon(_pixMaskName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Inkscape::queueIconPrerender( INKSCAPE_ICON(_pixMaskName.data()), Inkscape::ICON_SIZE_DECORATION );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (icon_theme->has_icon(_pixClipName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_clip = icon_theme->load_icon(_pixClipName, phys, (Gtk::IconLookupFlags)0);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (icon_theme->has_icon(_pixInverseName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_inverse = icon_theme->load_icon(_pixInverseName, phys, (Gtk::IconLookupFlags)0);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (icon_theme->has_icon(_pixMaskName)) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White _property_pixbuf_mask = icon_theme->load_icon(_pixMaskName, phys, (Gtk::IconLookupFlags)0);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>(0);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#if WITH_GTKMM_3_0
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitevoid ClipMaskIcon::get_preferred_height_vfunc(Gtk::Widget& widget,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int& min_h,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int& nat_h) const
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf::get_preferred_height_vfunc(widget, min_h, nat_h);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (min_h) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White min_h += (min_h) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (nat_h) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White nat_h += (nat_h) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitevoid ClipMaskIcon::get_preferred_width_vfunc(Gtk::Widget& widget,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int& min_w,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int& nat_w) const
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf::get_preferred_width_vfunc(widget, min_w, nat_w);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (min_w) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White min_w += (min_w) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if (nat_w) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White nat_w += (nat_w) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#else
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitevoid ClipMaskIcon::get_size_vfunc(Gtk::Widget& widget,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle* cell_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int* x_offset,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int* y_offset,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int* width,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White int* height ) const
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if ( width ) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White *width = phys;//+= (*width) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White if ( height ) {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White *height =phys;//+= (*height) >> 1;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#endif
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#if WITH_GTKMM_3_0
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitevoid ClipMaskIcon::render_vfunc( const Cairo::RefPtr<Cairo::Context>& cr,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::Widget& widget,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle& background_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle& cell_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererState flags )
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#else
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. Whitevoid ClipMaskIcon::render_vfunc( const Glib::RefPtr<Gdk::Drawable>& window,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::Widget& widget,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle& background_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle& cell_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White const Gdk::Rectangle& expose_area,
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererState flags )
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#endif
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White switch (_property_active.get_value())
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White {
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White case 1:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_pixbuf() = _property_pixbuf_clip;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White break;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White case 2:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_pixbuf() = _property_pixbuf_mask;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White break;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White case 3:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_pixbuf() = _property_pixbuf_inverse;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White break;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White default:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White property_pixbuf() = Glib::RefPtr<Gdk::Pixbuf>(0);
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White break;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White }
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#if WITH_GTKMM_3_0
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#else
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags );
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White#endif
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruzbool ClipMaskIcon::activate_vfunc(GdkEvent* /*event*/,
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruz Gtk::Widget& /*widget*/,
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruz const Glib::ustring& /*path*/,
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruz const Gdk::Rectangle& /*background_area*/,
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruz const Gdk::Rectangle& /*cell_area*/,
777bbe32326f8cdbebf76ab0b898e65105e8ccf3Jon A. Cruz Gtk::CellRendererState /*flags*/)
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White{
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White return false;
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White}
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White} // namespace Widget
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White} // namespace UI
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White} // namespace Inkscape
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White/*
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White Local Variables:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White mode:c++
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White c-file-style:"stroustrup"
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White indent-tabs-mode:nil
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White fill-column:99
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White End:
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White*/
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White
8ba84881e79b6175868d04179ca86f4823a69ec0Liam P. White