llwindow.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llwindow.h
  3.  * @brief Basic graphical window class
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLWINDOW_H
  33. #define LL_LLWINDOW_H
  34. #include "llrect.h"
  35. #include "llcoord.h"
  36. #include "llstring.h"
  37. #include "llcursortypes.h"
  38. #include "llsd.h"
  39. class LLSplashScreen;
  40. class LLPreeditor;
  41. class LLWindowCallbacks;
  42. // Refer to llwindow_test in test/common/llwindow for usage example
  43. class LLWindow
  44. {
  45. public:
  46. struct LLWindowResolution
  47. {
  48. S32 mWidth;
  49. S32 mHeight;
  50. };
  51. enum ESwapMethod
  52. {
  53. SWAP_METHOD_UNDEFINED,
  54. SWAP_METHOD_EXCHANGE,
  55. SWAP_METHOD_COPY
  56. };
  57. enum EFlags
  58. {
  59. // currently unused
  60. };
  61. public:
  62. virtual void show() = 0;
  63. virtual void hide() = 0;
  64. virtual void close() = 0;
  65. virtual BOOL getVisible() = 0;
  66. virtual BOOL getMinimized() = 0;
  67. virtual BOOL getMaximized() = 0;
  68. virtual BOOL maximize() = 0;
  69. virtual void minimize() = 0;
  70. virtual void restore() = 0;
  71. BOOL getFullscreen() { return mFullscreen; };
  72. virtual BOOL getPosition(LLCoordScreen *position) = 0;
  73. virtual BOOL getSize(LLCoordScreen *size) = 0;
  74. virtual BOOL getSize(LLCoordWindow *size) = 0;
  75. virtual BOOL setPosition(LLCoordScreen position) = 0;
  76. virtual BOOL setSize(LLCoordScreen size) = 0;
  77. virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0;
  78. virtual BOOL setCursorPosition(LLCoordWindow position) = 0;
  79. virtual BOOL getCursorPosition(LLCoordWindow *position) = 0;
  80. virtual void showCursor() = 0;
  81. virtual void hideCursor() = 0;
  82. virtual BOOL isCursorHidden() = 0;
  83. virtual void showCursorFromMouseMove() = 0;
  84. virtual void hideCursorUntilMouseMove() = 0;
  85. // These two functions create a way to make a busy cursor instead
  86. // of an arrow when someone's busy doing something. Draw an
  87. // arrow/hour if busycount > 0.
  88. virtual void incBusyCount();
  89. virtual void decBusyCount();
  90. virtual void resetBusyCount();
  91. virtual S32 getBusyCount() const;
  92. // Sets cursor, may set to arrow+hourglass
  93. virtual void setCursor(ECursorType cursor) = 0;
  94. virtual ECursorType getCursor() const;
  95. virtual void captureMouse() = 0;
  96. virtual void releaseMouse() = 0;
  97. virtual void setMouseClipping( BOOL b ) = 0;
  98. virtual BOOL isClipboardTextAvailable() = 0;
  99. virtual BOOL pasteTextFromClipboard(LLWString &dst) = 0;
  100. virtual BOOL copyTextToClipboard(const LLWString &src) = 0;
  101. virtual BOOL isPrimaryTextAvailable();
  102. virtual BOOL pasteTextFromPrimary(LLWString &dst);
  103. virtual BOOL copyTextToPrimary(const LLWString &src);
  104.  
  105. virtual void flashIcon(F32 seconds) = 0;
  106. virtual F32 getGamma() = 0;
  107. virtual BOOL setGamma(const F32 gamma) = 0; // Set the gamma
  108. virtual void setFSAASamples(const U32 fsaa_samples) = 0; //set number of FSAA samples
  109. virtual U32  getFSAASamples() = 0;
  110. virtual BOOL restoreGamma() = 0; // Restore original gamma table (before updating gamma)
  111. virtual ESwapMethod getSwapMethod() { return mSwapMethod; }
  112. virtual void processMiscNativeEvents();
  113. virtual void gatherInput() = 0;
  114. virtual void delayInputProcessing() = 0;
  115. virtual void swapBuffers() = 0;
  116. virtual void bringToFront() = 0;
  117. virtual void focusClient() { }; // this may not have meaning or be required on other platforms, therefore, it's not abstract
  118. // handy coordinate space conversion routines
  119. // NB: screen to window and vice verse won't work on width/height coordinate pairs,
  120. // as the conversion must take into account left AND right border widths, etc.
  121. virtual BOOL convertCoords( LLCoordScreen from, LLCoordWindow *to) = 0;
  122. virtual BOOL convertCoords( LLCoordWindow from, LLCoordScreen *to) = 0;
  123. virtual BOOL convertCoords( LLCoordWindow from, LLCoordGL *to) = 0;
  124. virtual BOOL convertCoords( LLCoordGL from, LLCoordWindow *to) = 0;
  125. virtual BOOL convertCoords( LLCoordScreen from, LLCoordGL *to) = 0;
  126. virtual BOOL convertCoords( LLCoordGL from, LLCoordScreen *to) = 0;
  127. // query supported resolutions
  128. virtual LLWindowResolution* getSupportedResolutions(S32 &num_resolutions) = 0;
  129. virtual F32 getNativeAspectRatio() = 0;
  130. virtual F32 getPixelAspectRatio() = 0;
  131. virtual void setNativeAspectRatio(F32 aspect) = 0;
  132. virtual void beforeDialog() {}; // prepare to put up an OS dialog (if special measures are required, such as in fullscreen mode)
  133. virtual void afterDialog() {}; // undo whatever was done in beforeDialog()
  134. // opens system default color picker, modally
  135. // Returns TRUE if valid color selected
  136. virtual BOOL dialogColorPicker(F32 *r, F32 *g, F32 *b);
  137. // return a platform-specific window reference (HWND on Windows, WindowRef on the Mac, Gtk window on Linux)
  138. virtual void *getPlatformWindow() = 0;
  139. // return the platform-specific window reference we use to initialize llmozlib (HWND on Windows, WindowRef on the Mac, Gtk window on Linux)
  140. virtual void *getMediaWindow();
  141. // control platform's Language Text Input mechanisms.
  142. virtual void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) {}
  143. virtual void setLanguageTextInput( const LLCoordGL & pos ) {};
  144. virtual void updateLanguageTextInputArea() {}
  145. virtual void interruptLanguageTextInput() {}
  146. virtual void spawnWebBrowser(const std::string& escaped_url) {};
  147. static std::vector<std::string> getDynamicFallbackFontList();
  148. // Provide native key event data
  149. virtual LLSD getNativeKeyData() { return LLSD::emptyMap(); }
  150. protected:
  151. LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags);
  152. virtual ~LLWindow();
  153. // Defaults to true
  154. virtual BOOL isValid();
  155. // Defaults to true
  156. virtual BOOL canDelete();
  157. protected:
  158. LLWindowCallbacks* mCallbacks;
  159. BOOL mPostQuit; // should this window post a quit message when destroyed?
  160. BOOL mFullscreen;
  161. S32 mFullscreenWidth;
  162. S32 mFullscreenHeight;
  163. S32 mFullscreenBits;
  164. S32 mFullscreenRefresh;
  165. LLWindowResolution* mSupportedResolutions;
  166. S32 mNumSupportedResolutions;
  167. ECursorType mCurrentCursor;
  168. BOOL mCursorHidden;
  169. S32 mBusyCount; // how deep is the "cursor busy" stack?
  170. BOOL mIsMouseClipping;  // Is this window currently clipping the mouse
  171. ESwapMethod mSwapMethod;
  172. BOOL mHideCursorPermanent;
  173. U32 mFlags;
  174. U16 mHighSurrogate;
  175.   // Handle a UTF-16 encoding unit received from keyboard.
  176.   // Converting the series of UTF-16 encoding units to UTF-32 data,
  177.   // this method passes the resulting UTF-32 data to mCallback's
  178.   // handleUnicodeChar.  The mask should be that to be passed to the
  179.   // callback.  This method uses mHighSurrogate as a dedicated work
  180.   // variable.
  181. void handleUnicodeUTF16(U16 utf16, MASK mask);
  182. friend class LLWindowManager;
  183. };
  184. // LLSplashScreen
  185. // A simple, OS-specific splash screen that we can display
  186. // while initializing the application and before creating a GL
  187. // window
  188. class LLSplashScreen
  189. {
  190. public:
  191. LLSplashScreen() { };
  192. virtual ~LLSplashScreen() { };
  193. // Call to display the window.
  194. static LLSplashScreen * create();
  195. static void show();
  196. static void hide();
  197. static void update(const std::string& string);
  198. static bool isVisible();
  199. protected:
  200. // These are overridden by the platform implementation
  201. virtual void showImpl() = 0;
  202. virtual void updateImpl(const std::string& string) = 0;
  203. virtual void hideImpl() = 0;
  204. static BOOL sVisible;
  205. };
  206. // Platform-neutral for accessing the platform specific message box
  207. S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type);
  208. const U32 OSMB_OK = 0;
  209. const U32 OSMB_OKCANCEL = 1;
  210. const U32 OSMB_YESNO = 2;
  211. const S32 OSBTN_YES = 0;
  212. const S32 OSBTN_NO = 1;
  213. const S32 OSBTN_OK = 2;
  214. const S32 OSBTN_CANCEL = 3;
  215. //
  216. // LLWindowManager
  217. // Manages window creation and error checking
  218. class LLWindowManager
  219. {
  220. public:
  221. static LLWindow *createWindow(
  222. LLWindowCallbacks* callbacks,
  223. const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
  224. U32 flags = 0,
  225. BOOL fullscreen = FALSE,
  226. BOOL clearBg = FALSE,
  227. BOOL disable_vsync = TRUE,
  228. BOOL use_gl = TRUE,
  229. BOOL ignore_pixel_depth = FALSE,
  230. U32 fsaa_samples = 0);
  231. static BOOL destroyWindow(LLWindow* window);
  232. static BOOL isWindowValid(LLWindow *window);
  233. };
  234. //
  235. // helper funcs
  236. //
  237. extern BOOL gDebugWindowProc;
  238. // Protocols, like "http" and "https" we support in URLs
  239. extern const S32 gURLProtocolWhitelistCount;
  240. extern const std::string gURLProtocolWhitelist[];
  241. extern const std::string gURLProtocolWhitelistHandler[];
  242. void simpleEscapeString ( std::string& stringIn  );
  243. #endif // _LL_window_h_