/* visual.h
 *
 * Copyright (C) 1998-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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include <glibmm/object.h>
#include <gdkmm/screen.h>
#include <gdkmm/types.h>

_DEFS(gdkmm,gdk)
_PINCLUDE(glibmm/private/object_p.h)


namespace Gdk
{

class Screen;

_WRAP_ENUM(VisualType, GdkVisualType)

/** A Gdk::Visual describes a particular video hardware display format.
 * It includes information about the number of bits used for each color, the way the bits are translated into an RGB value
 * for display, and the way the bits are stored in memory. For example, a piece of display hardware might support 24-bit
 * color, 16-bit color, or 8-bit color; meaning 24/16/8-bit pixel sizes. For a given pixel size, pixels can be in different
 * formats; for example the "red" element of an RGB pixel may be in the top 8 bits of the pixel, or may be in the lower 4
 * bits.
 *
 * There are several standard visuals. The visual returned by Gdk::Screen::get_system_visual() is the system's default visual.
 *
 * A number of methods are provided for determining the "best" available visual. For the purposes of making this
 * determination, higher bit depths are considered better, and for visuals of the same bit depth, GDK_VISUAL_PSEUDO_COLOR
 * is preferred at 8bpp, otherwise, the visual types are ranked in the order of (highest to lowest) GDK_VISUAL_DIRECT_COLOR,
 * GDK_VISUAL_TRUE_COLOR, GDK_VISUAL_PSEUDO_COLOR, GDK_VISUAL_STATIC_COLOR, GDK_VISUAL_GRAYSCALE, then
 * GDK_VISUAL_STATIC_GRAY.
 */
class Visual : public Glib::Object
{
  _CLASS_GOBJECT(Visual,GdkVisual,GDK_VISUAL,Glib::Object,GObject)
protected:

  _CTOR_DEFAULT

public:
   _WRAP_METHOD(Glib::RefPtr<Screen> get_screen(), gdk_visual_get_screen, refreturn)
   _WRAP_METHOD(Glib::RefPtr<const Screen> get_screen() const, gdk_visual_get_screen, refreturn, constversion)

   _WRAP_METHOD(VisualType get_visual_type() const, gdk_visual_get_visual_type)
   _WRAP_METHOD(int get_depth() const, gdk_visual_get_depth)
   _WRAP_METHOD(void get_red_pixel_details(guint32& mask, int& shift, int& precision) const, gdk_visual_get_red_pixel_details)
   _WRAP_METHOD(void get_green_pixel_details(guint32& mask, int& shift, int& precision) const, gdk_visual_get_green_pixel_details)
   _WRAP_METHOD(void get_blue_pixel_details(guint32& mask, int& shift, int& precision) const, gdk_visual_get_blue_pixel_details)
};

} //namespace Gdk
