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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llmediactrl.h
  3.  * @brief Web browser UI control
  4.  *
  5.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2006-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_LLMediaCtrl_H
  33. #define LL_LLMediaCtrl_H
  34. #include "llviewermedia.h"
  35. #include "lluictrl.h"
  36. #include "llframetimer.h"
  37. class LLViewBorder;
  38. class LLUICtrlFactory;
  39. ////////////////////////////////////////////////////////////////////////////////
  40. //
  41. class LLMediaCtrl :
  42. public LLPanel,
  43. public LLViewerMediaObserver,
  44. public LLViewerMediaEventEmitter
  45. {
  46. LOG_CLASS(LLMediaCtrl);
  47. public:
  48. struct Params : public LLInitParam::Block<Params, LLPanel::Params> 
  49. {
  50. Optional<std::string> start_url;
  51. Optional<bool> border_visible,
  52. ignore_ui_scale,
  53. hide_loading,
  54. decouple_texture_size;
  55. Optional<S32> texture_width,
  56. texture_height;
  57. Optional<LLUIColor> caret_color;
  58. Params();
  59. };
  60. protected:
  61. LLMediaCtrl(const Params&);
  62. friend class LLUICtrlFactory;
  63. public:
  64. virtual ~LLMediaCtrl();
  65. void setBorderVisible( BOOL border_visible );
  66. // For the tutorial window, we don't want to take focus on clicks,
  67. // as the examples include how to move around with the arrow
  68. // keys.  Thus we keep focus on the app by setting this false.
  69. // Defaults to true.
  70. void setTakeFocusOnClick( bool take_focus );
  71. // handle mouse related methods
  72. virtual BOOL handleHover( S32 x, S32 y, MASK mask );
  73. virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
  74. virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
  75. virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
  76. virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
  77. virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
  78. virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
  79. // navigation
  80. void navigateTo( std::string url_in, std::string mime_type = "");
  81. void navigateBack();
  82. void navigateHome();
  83. void navigateForward();
  84. void navigateToLocalPage( const std::string& subdir, const std::string& filename_in );
  85. bool canNavigateBack();
  86. bool canNavigateForward();
  87. void setOpenInExternalBrowser( bool valIn );
  88. void setOpenInInternalBrowser( bool valIn );
  89. std::string getCurrentNavUrl();
  90. // By default, we do not handle "secondlife:///app/" SLURLs, because
  91. // those can cause teleports, open windows, etc.  We cannot be sure
  92. // that each "click" is actually due to a user action, versus 
  93. // Javascript or some other mechanism.  However, we need the search
  94. // floater and login page to handle these URLs.  Those are safe
  95. // because we control the page content.  See DEV-9530.  JC.
  96. void setTrusted( bool valIn );
  97. void setHomePageUrl( const std::string urlIn );
  98. std::string getHomePageUrl();
  99. // set/clear URL to visit when a 404 page is reached
  100. void set404RedirectUrl( std::string redirect_url );
  101. void clr404RedirectUrl();
  102. // Clear the browser cache when the instance gets loaded
  103. void clearCache();
  104. // accessor/mutator for flag that indicates if frequent updates to texture happen
  105. bool getFrequentUpdates() { return mFrequentUpdates; };
  106. void setFrequentUpdates( bool frequentUpdatesIn ) {  mFrequentUpdates = frequentUpdatesIn; };
  107. void setIgnoreUIScale(bool ignore) { mIgnoreUIScale = ignore; }
  108. bool getIgnoreUIScale() { return mIgnoreUIScale; }
  109. void setAlwaysRefresh(bool refresh) { mAlwaysRefresh = refresh; }
  110. bool getAlwaysRefresh() { return mAlwaysRefresh; }
  111. void setForceUpdate(bool force_update) { mForceUpdate = force_update; }
  112. bool getForceUpdate() { return mForceUpdate; }
  113. bool ensureMediaSourceExists();
  114. void unloadMediaSource();
  115. LLPluginClassMedia* getMediaPlugin();
  116. bool setCaretColor( unsigned int red, unsigned int green, unsigned int blue );
  117. void setDecoupleTextureSize(bool decouple) { mDecoupleTextureSize = decouple; }
  118. bool getDecoupleTextureSize() { return mDecoupleTextureSize; }
  119. void setTextureSize(S32 width, S32 height);
  120. // over-rides
  121. virtual BOOL handleKeyHere( KEY key, MASK mask);
  122. virtual void handleVisibilityChange ( BOOL new_visibility );
  123. virtual BOOL handleUnicodeCharHere(llwchar uni_char);
  124. virtual void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE);
  125. virtual void draw();
  126. virtual BOOL postBuild();
  127. // focus overrides
  128. void onFocusLost();
  129. void onFocusReceived();
  130. // Incoming media event dispatcher
  131. virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
  132. // handlers for individual events (could be done inside the switch in handleMediaEvent, they're just individual functions for clarity)
  133. void onClickLinkHref( LLPluginClassMedia* self );
  134. void onClickLinkNoFollow( LLPluginClassMedia* self );
  135. protected:
  136. void convertInputCoords(S32& x, S32& y);
  137. private:
  138. void onVisibilityChange ( const LLSD& new_visibility );
  139. static bool onClickLinkExternalTarget( const LLSD&, const LLSD& );
  140. static void clickLinkWithTarget(const std::string& url, const S32& target_type );
  141. const S32 mTextureDepthBytes;
  142. LLUUID mMediaTextureID;
  143. LLViewBorder* mBorder;
  144. bool mFrequentUpdates;
  145. bool mForceUpdate;
  146. bool mOpenLinksInExternalBrowser;
  147. bool mOpenLinksInInternalBrowser;
  148. bool mTrusted;
  149. std::string mHomePageUrl;
  150. std::string mCurrentNavUrl;
  151. bool mIgnoreUIScale;
  152. bool mAlwaysRefresh;
  153. viewer_media_t mMediaSource;
  154. bool mTakeFocusOnClick;
  155. bool mStretchToFill;
  156. bool mMaintainAspectRatio;
  157. bool mHideLoading;
  158. bool mHidingInitialLoad;
  159. bool mDecoupleTextureSize;
  160. S32 mTextureWidth;
  161. S32 mTextureHeight;
  162. bool mClearCache;
  163. };
  164. #endif // LL_LLMediaCtrl_H