/* * Copyright (c) 2007, ai-chan * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the ASSDraw3 Team nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY AI-CHAN ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AI-CHAN BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WX_AGG_PIXEL_FORMAT_CONVERTOR_H #define WX_AGG_PIXEL_FORMAT_CONVERTOR_H #include "agg_pixfmt_rgb.h" #include "agg_pixfmt_rgba.h" namespace { /// Given a particular combination of channel type, bits per pixel and /// channel indices, return the AGG format that matches. /// The actual template specializations that follow give the actual types, /// and using a combination of parameters that are not listed will give /// a compile-time error. template struct wxWidgetsToAGGHelper { //empty }; /// 24-bit RGB template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_rgb24 format; }; /// 24-bit BGR template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_bgr24 format; }; /// 32-bit RGB, alpha unused but stored as ARGB. template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_argb32 format; }; /// 32-bit RGB, alpha unused but stored as RGBA. template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_rgba32 format; }; /// 32-bit BGR, alpha unused but stored as ABGR. template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_abgr32 format; }; /// 32-bit BGR, alpha unused but stored as BGRA. template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_bgra32 format; }; /// 32-bit RGBA template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_rgba32 format; }; /// 32-bit BGRA template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_bgra32 format; }; /// 32-bit ARGB template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_argb32 format; }; /// 32-bit ABGR template <> struct wxWidgetsToAGGHelper { typedef agg::pixfmt_abgr32 format; }; } namespace GUI { /// Convert between a wxWidgets pixel format class and an AGG pixel format class. /// Usage examples: /// PixelFormatConvertor::AGGType or /// PixelFormatConvertor::AGGType. template class PixelFormatConvertor { public: typedef wxWidgetsPixelFormat wxWidgetsType; // Break out the wxWidgets parameters and feed to the helper class. typedef typename wxWidgetsToAGGHelper::format AGGType; }; } #endif