ardour/libs/tk/ydkmm/color.cc

330 lines
6.2 KiB
C++

// Generated by gmmproc 2.45.3 -- DO NOT MODIFY!
#include <glibmm.h>
#include <gdkmm/color.h>
#include <gdkmm/private/color_p.h>
// -*- c++ -*-
/* $Id: color.ccg,v 1.4 2005/11/29 16:38:10 murrayc Exp $ */
/*
*
* Copyright 2002 The gtkmm Development Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <gdkmm/colormap.h>
#include <gdk/gdk.h>
namespace Gdk
{
Color::Color()
{
GdkColor tmp = { 0, 0, 0, 0, };
gobject_ = gdk_color_copy(&tmp);
}
Color::Color(const Glib::ustring& value)
{
GdkColor tmp = { 0, 0, 0, 0, };
gobject_ = gdk_color_copy(&tmp);
set(value);
}
void Color::set_grey(gushort value)
{
gobject_->red = gobject_->green = gobject_->blue = value;
}
void Color::set_grey_p(double g)
{
gobject_->red = gobject_->green = gobject_->blue = (gushort)(g * 65535.0);
}
void Color::set_rgb(gushort red_, gushort green_, gushort blue_)
{
gobject_->red = red_;
gobject_->green = green_;
gobject_->blue = blue_;
}
void Color::set_rgb_p(double red_, double green_, double blue_)
{
gobject_->red = (gushort)(red_ * 65535.0);
gobject_->green = (gushort)(green_ * 65535.0);
gobject_->blue = (gushort)(blue_ * 65535.0);
}
void Color::set_hsv(double h, double s, double v)
{
//TODO: Comments/Documentation. I have no idea what this code does. murrayc.
h /= 60.0;
int i = (int)h;
double p = v * (1 - s);
double q = v * (1 - s * (h - i));
double t = v * (1 - s * (1 - h + i));
switch(i)
{
case 0:
set_rgb_p(v, t, p);
break;
case 1:
set_rgb_p(q, v, p);
break;
case 2:
set_rgb_p(p, v, t);
break;
case 3:
set_rgb_p(p, q, v);
break;
case 4:
set_rgb_p(t, p, v);
break;
default:
set_rgb_p(v, p, q);
}
}
void Color::set_hsl(double h, double s, double l)
{
//TODO: Comments/Documentation. I have no idea what this code does. murrayc.
if(s == 0.0)
set_grey_p(l);
else
{
double t2 = (l < 0.5) ? l * (1.0 + s) : l + s - l * s;
double t1 = 2*l-t2;
h /= 360.0;
double tr = h + 1.0/3.0;
double tg = h;
double tb = h - 1.0/3.0;
if (tb < 0) tb += 1.0;
double r = 0.0, g = 0.0, b = 0.0;
if (tr < 1.0/6.0)
r = t1 +(t2-t1) * 6 * tr;
else if (tr < 1.0/2.0)
r = t2;
else if (tr < 2.0/3.0)
r = t1+(t2-t1)*(2.0/3.0 - tr) * 6.0;
if (tg < 1.0/6.0)
g = t1 + (t2 - t1) * 6 * tg;
else if (tg < 1.0/2.0)
g = t2;
else if (tg < 2.0/3.0)
g = t1+(t2-t1)*(2.0/3.0 - tg) * 6.0;
if (tb < 1.0/6.0)
b = t1 +(t2-t1) * 6 * tb;
else if (tb < 1.0/2.0)
b = t2;
else if (tb < 2.0/3.0)
b = t1+(t2-t1)*(2.0/3.0 - tb) * 6.0;
set_rgb_p(r, g, b);
}
}
bool Color::set(const Glib::ustring& value)
{
return gdk_color_parse(value.c_str(), gobj());
}
#ifndef GDKMM_DISABLE_DEPRECATED
bool Color::parse(const Glib::ustring& spec)
{
return set(spec);
}
#endif // GDKMM_DISABLE_DEPRECATED
gushort Color::get_red() const
{
return gobject_->red;
}
gushort Color::get_green() const
{
return gobject_->green;
}
gushort Color::get_blue() const
{
return gobject_->blue;
}
void Color::set_red(gushort value)
{
gobject_->red = value;
}
void Color::set_green(gushort value)
{
gobject_->green = value;
}
void Color::set_blue(gushort value)
{
gobject_->blue = value;
}
#ifndef GDKMM_DISABLE_DEPRECATED
void Color::rgb_find_color(const Glib::RefPtr<Gdk::Colormap>& map)
{
gdk_rgb_find_color(Glib::unwrap(map), gobj());
}
#endif // GDKMM_DISABLE_DEPRECATED
guint Color::get_pixel() const
{
return gobject_->pixel;
}
double Color::get_red_p() const
{
return gobject_->red / 65535.0;
}
double Color::get_green_p() const
{
return gobject_->green / 65535.0;
}
double Color::get_blue_p() const
{
return gobject_->blue / 65535.0;
}
Glib::ustring Color::to_string() const
{
return Glib::convert_return_gchar_ptr_to_ustring( gdk_color_to_string(gobject_) );
}
ColorTraits::CType ColorTraits::to_c_type(const CppType& obj)
{
return *obj.gobj();
}
ColorTraits::CType ColorTraits::to_c_type(const CType& obj)
{
return obj;
}
ColorTraits::CppType ColorTraits::to_cpp_type(const CType& obj)
{
return CppType(const_cast<CType*>(&obj), true);
}
void ColorTraits::release_c_type(const CType&)
{}
} //namespace Gdk
namespace
{
} // anonymous namespace
namespace Glib
{
Gdk::Color wrap(GdkColor* object, bool take_copy)
{
return Gdk::Color(object, take_copy);
}
} // namespace Glib
namespace Gdk
{
// static
GType Color::get_type()
{
return gdk_color_get_type();
}
Color::Color(const Color& other)
:
gobject_ ((other.gobject_) ? gdk_color_copy(other.gobject_) : 0)
{}
Color::Color(GdkColor* gobject, bool make_a_copy)
:
// For BoxedType wrappers, make_a_copy is true by default. The static
// BoxedType wrappers must always take a copy, thus make_a_copy = true
// ensures identical behaviour if the default argument is used.
gobject_ ((make_a_copy && gobject) ? gdk_color_copy(gobject) : gobject)
{}
Color& Color::operator=(const Color& other)
{
Color temp (other);
swap(temp);
return *this;
}
Color::~Color()
{
if(gobject_)
gdk_color_free(gobject_);
}
void Color::swap(Color& other)
{
GdkColor *const temp = gobject_;
gobject_ = other.gobject_;
other.gobject_ = temp;
}
GdkColor* Color::gobj_copy() const
{
return gdk_color_copy(gobject_);
}
bool operator==(const Color& lhs, const Color& rhs)
{
return (gdk_color_equal(lhs.gobj(), rhs.gobj()) != 0);
}
bool operator!=(const Color& lhs, const Color& rhs)
{
return (gdk_color_equal(lhs.gobj(), rhs.gobj()) == 0);
}
} // namespace Gdk