FineKernelToolKit
2.8.10
|
00001 /**************************************************************************** 00002 * 00003 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, 00006 * with or without modification, are permitted provided that the 00007 * following conditions are met: 00008 * 00009 * - Redistributions of source code must retain the above 00010 * copyright notice, this list of conditions and the 00011 * following disclaimer. 00012 * 00013 * - Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the 00015 * following disclaimer in the documentation and/or 00016 * other materials provided with the distribution. 00017 * 00018 * - Neither the name of the copyright holders nor the names 00019 * of its contributors may be used to endorse or promote 00020 * products derived from this software without specific 00021 * prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00026 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00027 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00028 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00031 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 00032 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 00033 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00034 * POSSIBILITY OF SUCH DAMAGE. 00035 * 00036 ****************************************************************************/ 00037 /**************************************************************************** 00038 * 00039 * Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved. 00040 * 00041 * 本ソフトウェアおよびソースコードのライセンスは、基本的に 00042 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。 00043 * 00044 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、 00045 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。 00046 * 00047 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、 00048 * および下記免責条項を含めること。 00049 * 00050 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の 00051 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を 00052 * 含めること。 00053 * 00054 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の 00055 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または 00056 * コントリビューターの名前を使用してはならない。 00057 * 00058 * 本ソフトウェアは、著作権者およびコントリビューターによって「現 00059 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、 00060 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ 00061 * に限定されない、いかなる保証もないものとします。著作権者もコン 00062 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを 00063 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その 00064 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可 00065 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生 00066 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、 00067 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、 00068 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に 00069 * ついて、一切責任を負わないものとします。 00070 * 00071 ****************************************************************************/ 00072 #ifdef FK_D3D 00073 #include "./D3D/Window.h" 00074 #else 00075 00076 // fk_Window for OpenGL 00077 00078 #ifndef __FK_WINDOW_HEADER__ 00079 #define __FK_WINDOW_HEADER__ 00080 00081 #include <stdarg.h> 00082 00083 // for Graphics Header. 00084 #include <FL/Fl_Gl_Window.H> 00085 #include <FL/Fl_Multi_Browser.H> 00086 00087 // for FK Header. 00088 #include <FK/Engine.H> 00089 00090 // for Graphics Routine 00092 typedef unsigned int fk_FrameMode; 00093 00094 const fk_FrameMode FK_DEFAULT_FRAME = 0x0000; 00095 const fk_FrameMode FK_WAIT_FRAME = 0x0001; 00096 const fk_FrameMode FK_SKIP_FRAME = 0x0002; 00097 00099 enum fk_SpecialKey { 00100 FK_SHIFT_R, 00101 FK_SHIFT_L, 00102 FK_CTRL_R, 00103 FK_CTRL_L, 00104 FK_ALT_R, 00105 FK_ALT_L, 00106 FK_ENTER, 00107 FK_BACKSPACE, 00108 FK_DELETE, 00109 FK_CAPS_LOCK, 00110 FK_TAB, 00111 FK_PAGE_UP, 00112 FK_PAGE_DOWN, 00113 FK_HOME, 00114 FK_END, 00115 FK_INSERT, 00116 FK_LEFT, 00117 FK_RIGHT, 00118 FK_UP, 00119 FK_DOWN, 00120 FK_F1, 00121 FK_F2, 00122 FK_F3, 00123 FK_F4, 00124 FK_F5, 00125 FK_F6, 00126 FK_F7, 00127 FK_F8, 00128 FK_F9, 00129 FK_F10, 00130 FK_F11, 00131 FK_F12 00132 }; 00133 00135 enum fk_MouseButton { 00136 FK_MOUSE1, 00137 FK_MOUSE2, 00138 FK_MOUSE3 00139 }; 00140 00142 enum fk_PutStrMode { 00143 FK_PUTSTR_NONE, 00144 FK_PUTSTR_CONSOLE, 00145 FK_PUTSTR_ERR_CONSOLE, 00146 FK_PUTSTR_BROWSER, 00147 FK_PUTSTR_FILE 00148 }; 00149 00150 00152 00187 class fk_Window : public Fl_Gl_Window, public fk_BaseObject { 00188 00189 private: 00190 00191 fk_GraphicsEngine engine; 00192 00193 fk_Image snapBuffer; 00194 00195 bool winOpenFlag; 00196 int GLWinWSize; 00197 int GLWinHSize; 00198 int GLWinXPosition; 00199 int GLWinYPosition; 00200 char lastKey; 00201 00202 fk_FrameMode frameMode; 00203 unsigned long frameTime, prevTime; 00204 unsigned long frameInterval; 00205 int skipCount; 00206 00207 bool stereoMode; 00208 00209 static Fl_Window *putWin; 00210 static Fl_Multi_Browser *browser; 00211 static fk_PutStrMode putStrMode; 00212 static FILE *putStrFP; 00213 static int winNum; 00214 00215 void SetPickViewPort(int &, int &); 00216 bool IsInsideWindow(void); 00217 Fl_Group * GetInhParentWindow(void); 00218 void GetPickData(bool, fk_PickData *, int, int, int); 00219 00220 void draw(); // virtual Function from Fl_Gl_Window class 00221 00222 static void PutBrowser(const std::string &); 00223 00224 #ifdef WIN32 00225 bool SnapImageGDI(fk_Image *); 00226 #endif 00227 00228 public: 00229 00231 00238 fk_Window(int x = 0, int y = 0, 00239 int w = 300, int h = 300, std::string name = "FK Window"); 00240 00242 virtual ~fk_Window(); 00243 00244 00246 //@( 00247 00249 00254 void setScene(fk_Scene *scene); 00255 //@) 00256 00258 //@( 00260 00275 int drawWindow(bool drawFlag = true); 00276 00278 00287 bool winOpenStatus(void); 00288 00290 00298 void resizeWindow(int x, int y, int w, int h); 00299 00301 00334 bool getKeyStatus(char key, bool insideFlag = true); 00335 00337 00372 bool getSpecialKeyStatus(fk_SpecialKey key, bool insideFlag = true); 00373 00375 00393 char getLastKey(void); 00394 00396 00425 void getMousePosition(int *x, int *y, bool insideFlag = true); 00426 00428 00452 bool getMouseStatus(fk_MouseButton button, bool insideFlag = true); 00453 00455 00469 int getMouseWheelStatus(void); 00470 00472 00493 void getPickModel(fk_PickData *data, int pixel); 00494 00496 00517 void getPickModel(fk_PickData *data, int pixel, int x, int y); 00518 //@) 00519 00521 //@( 00522 00524 00550 void setFrameMode(fk_FrameMode mode); 00551 00553 00560 fk_FrameMode getFrameMode(void); 00561 00563 00579 void setFrameInterval(int ms); 00580 00582 00589 int getFrameInterval(void); 00590 00592 00601 int getSkipFrame(void); 00602 //@) 00603 00605 //@( 00606 00608 00626 bool getProjectPosition(double x, double y, 00627 fk_Plane *plane, fk_Vector *pos); 00628 00630 00644 bool getProjectPosition(double x, double y, 00645 double dist, fk_Vector *pos); 00646 00648 00664 bool getWindowPosition(fk_Vector pos_3D, fk_Vector *pos_2D); 00665 //@) 00666 00668 //@( 00670 00688 void setOGLPointerMode(bool mode); 00689 00691 00705 bool getOGLPointerMode(void); 00706 00708 00726 void setOGLTextureBindMode(bool mode); 00727 00729 00743 bool getOGLTextureBindMode(void); 00744 00746 00758 void clearTextureMemory(void); 00759 00761 00777 unsigned long getUsingTextureMemory(void); 00778 00780 00790 virtual void preInit(void) {} 00791 00793 00803 virtual void postInit(void) {} 00804 00806 00814 virtual void preDraw(void) {} 00815 00817 00825 virtual void postDraw(void) {} 00826 //@) 00827 00829 //@( 00830 00832 00848 bool snapImage(std::string fileName, 00849 fk_ImageType format = FK_IMAGE_BMP, 00850 fk_SnapProcMode mode = FK_SNAP_GL_FRONT); 00851 00853 00866 bool snapImage(fk_Image *image, 00867 fk_SnapProcMode mode = FK_SNAP_GL_FRONT); 00868 //@) 00869 00871 //@( 00872 00874 00888 static unsigned long getNow(void); 00889 //@) 00890 00892 //@( 00893 00895 00919 static void setPutStrMode(const fk_PutStrMode mode); 00920 00922 00929 static fk_PutStrMode getPutStrMode(void); 00930 00932 00950 static bool setPutFile(const std::string &fileName); 00951 00953 00968 static void putString(const std::string &str); 00969 00971 00986 static void printf(const char *format, ...); 00987 00989 01003 static void clearBrowser(void); 01004 //@) 01005 01007 //@( 01009 01029 void setOGLStereoMode(bool mode); 01030 01032 01045 bool getOGLStereoMode(void); 01046 //@) 01047 01048 }; 01049 01050 01051 #endif /* !__FK_WINDOW_HEADER__ */ 01052 01053 #endif /* !D3D_BRANCH */