00001 /********************************************************************************** 00002 * Copyright (c) 2003, Christoph Rueegg <opendev@cdrnet.ch> and Matthias Bader * 00003 * Partially based on ideas of Tim Weyrich <weyrich@inf.ethz.ch> * 00004 * and/or the Swiss Federal Institute of Technology http://www.ethz.ch * 00005 * All rights reserved. * 00006 * * 00007 * Project Website: http://www.cdrnet.net/projects/painter/ * 00008 * * 00009 * Redistribution and use in source and binary forms, with or without modification,* 00010 * are permitted provided that the following conditions are met: * 00011 * * 00012 * 1. Redistributions of source code must retain the above copyright notice, * 00013 * this list of conditions and the following disclaimer. * 00014 * * 00015 * 2. Redistributions in binary form must reproduce the above copyright notice, * 00016 * this list of conditions and the following disclaimer in the documentation * 00017 * and/or other materials provided with the distribution. * 00018 * * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * 00022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * 00023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 00024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * 00025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * 00026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * 00027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * 00028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * 00029 * THE POSSIBILITY OF SUCH DAMAGE. * 00030 **********************************************************************************/ 00031 00032 #ifndef __CONTAINER_H__ 00033 #define __CONTAINER_H__ 00034 00035 #include <GL/glut.h> 00036 #include "../image/alphaimage.h" 00037 #include "../image/rgbimage.h" 00038 #include "../image/filter.cpp" 00039 #include "../filter/filterblockfill.h" 00040 00041 /* 00042 #define HAVE_BIGENDIAN (*(unsigned short *)"12" == 0x3132) 00043 #define SWAP_UINT32(x) (( ((uint32)(x)) << 24) | \ 00044 ((((uint32)(x)) & 0x0000ff00UL) << 8) | \ 00045 ((((uint32)(x)) & 0x00ff0000UL) >> 8) | \ 00046 ( ((uint32)(x)) >> 24)) 00047 */ 00048 00049 class Container 00050 { 00051 private: 00052 static AlphaImage* currentimage; 00053 static RgbImage* currentrgbimage; 00054 static ChannelFilter<unsigned char>* currentfilter; 00055 static ChannelFilter<unsigned char>* currentredfilter; 00056 static ChannelFilter<unsigned char>* currentgreenfilter; 00057 static ChannelFilter<unsigned char>* currentbluefilter; 00058 static int windowid, channelmode; 00059 static double currentzoom; 00060 public: 00061 static void SetImage(AlphaImage* image); 00062 static void SetImage(RgbImage* image); 00063 static AlphaImage* GetImage(); 00064 static void DeleteImage(); 00065 static void SetFilter(ChannelFilter<unsigned char>* filter); 00066 static void DeleteFilter(); 00067 static void Init(); 00068 static void Dispose(); 00069 static void StartMainLoop(); 00070 static void Redisplay(); 00071 // GLUT Callback Functions 00072 static void KeyboardCallback(unsigned char key, int x, int y); 00073 static void SpecialKeyboardCallback(int key, int x, int y); 00074 static void MouseClickCallback(int button, int state, int x, int y); 00075 static void MouseMotionCallback(int x, int y); 00076 static void IdleCallback(); 00077 static void DrawCallback(); 00078 }; 00079 00080 #endif
1.3-rc2