diff options
Diffstat (limited to 'libs/gtkmm2/gdk/gdkmm/color.cc')
-rw-r--r-- | libs/gtkmm2/gdk/gdkmm/color.cc | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/libs/gtkmm2/gdk/gdkmm/color.cc b/libs/gtkmm2/gdk/gdkmm/color.cc new file mode 100644 index 0000000000..06c8e70cf5 --- /dev/null +++ b/libs/gtkmm2/gdk/gdkmm/color.cc @@ -0,0 +1,297 @@ +// Generated by gtkmmproc -- DO NOT MODIFY! + +#include <gdkmm/color.h> +#include <gdkmm/private/color_p.h> + +// -*- c++ -*- +/* $Id$ */ + +/* + * + * 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 Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library 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/gdkcolor.h> +#include <gdk/gdkrgb.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()); +} + +bool Color::parse(const Glib::ustring& spec) +{ + return set(spec); +} + +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; +} + +void Color::rgb_find_color(const Glib::RefPtr<Gdk::Colormap>& map) +{ + gdk_rgb_find_color(map->gobj(), gobj()); +} + +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; +} + + +} //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 + + |