3gppttrenderer.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:15k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2003 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */
  35. #ifndef _3GPPTTRENDERER_H_
  36. #define _3GPPTTRENDERER_H_
  37. /************************************************************************
  38.  *
  39.  * Defines:
  40.  */
  41. // /These are special-case font names that can be used in a FontTable entry:
  42. #define FONT_FAMILY_SERIF_STR       "Serif"
  43. #define FONT_FAMILY_SANS_SERIF_STR  "Sans-Serif"
  44. #define FONT_FAMILY_MONOSPACE_STR   "Monospace"
  45. #define MAX_3GPPTT_URL_LEN          (sizeof(UINT8))
  46. // /These are for drawing; it's possible that we want to set (1,0) (i.e.,
  47. // something other than (0,0) as the starting point for drawing text:
  48. #define INITIAL_CURSOR_X    0
  49. #define INITIAL_CURSOR_Y    0
  50. #if defined(_WINDOWS) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  51. #define USE_DIB_SECTION 1
  52. #endif // /_WINDOWS                                                            _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  53. #if defined(_SYMBIAN) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  54. #define HX_3GPPTT_DEFAULT_bits_PER_PIXEL  12 /* RGB444 native*/
  55. #if defined(HELIX_3GPPTT_SUPPORTS_TRANSPARENCY)  &&  (HX_3GPPTT_DEFAULT_bits_PER_PIXEL == 12)
  56. #error   this bit depth wont work with ARGB, dimwit
  57. #endif // /HELIX_3GPPTT_SUPPORTS_TRANSPARENCY
  58. #else // / not _SYMBIAN                                                        ------------------------------------
  59. #define HX_3GPPTT_DEFAULT_bits_PER_PIXEL  32
  60. #endif // /end else of if _SYMBIAN                                             _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  61. #if defined(_WINDOWS) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  62. #define HX_3GPPTT_FIXED_PITCH                     FIXED_PITCH
  63. #define HX_3GPPTT_DEFAULT_PITCH                   DEFAULT_PITCH
  64. #define HX_3GPPTT_FF_DONTCARE                     FF_DONTCARE
  65. #define HX_3GPPTT_FF_SANSSERIF_PROPORTIONAL_PITCH FF_SWISS
  66. #define HX_3GPPTT_FF_SERIF_PROPORTIONAL_PITCH     FF_ROMAN
  67. #define HX_3GPPTT_JUSTIFY_LEFT                    DT_LEFT
  68. #define HX_3GPPTT_JUSTIFY_HCENTER                 DT_CENTER
  69. #define HX_3GPPTT_JUSTIFY_RIGHT                   DT_RIGHT
  70. #define HX_3GPPTT_JUSTIFY_TOP                     DT_TOP
  71. #define HX_3GPPTT_JUSTIFY_VCENTER                 DT_VCENTER
  72. #define HX_3GPPTT_JUSTIFY_BOTTOM                  DT_BOTTOM
  73. #define HX_3GPPTT_INITIAL_TEXTFORMAT              DT_NOCLIP
  74. #else // / not _WINDOWS                                                        ------------------------------------
  75. #define HX_3GPPTT_DEFAULT_PITCH                   0x0
  76. #define HX_3GPPTT_FF_DONTCARE                     0x0
  77. #define HX_3GPPTT_FIXED_PITCH                     0x1
  78. #define HX_3GPPTT_FF_SANSSERIF_PROPORTIONAL_PITCH 0x0
  79. #define HX_3GPPTT_FF_SERIF_PROPORTIONAL_PITCH     0x2
  80. #define HX_3GPPTT_JUSTIFY_LEFT                    0x1
  81. #define HX_3GPPTT_JUSTIFY_HCENTER                 0x4
  82. #define HX_3GPPTT_JUSTIFY_RIGHT                   0x2
  83. #define HX_3GPPTT_JUSTIFY_TOP                     0x10
  84. #define HX_3GPPTT_JUSTIFY_VCENTER                 0x40
  85. #define HX_3GPPTT_JUSTIFY_BOTTOM                  0x20
  86. #define HX_3GPPTT_INITIAL_TEXTFORMAT              0x0
  87. #endif // /else of if _WINDOWS.                                                _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  88. /****************************************************************************
  89.  *
  90.  *  C3GPPTimedTextRenderer Class
  91.  *
  92.  *  3GPPTimedText implementation of a basic renderer.
  93.  */
  94. class C3GPPTimedTextRenderer : public IHXPlugin
  95.                              , public IHXRenderer
  96.                              , public IHXSiteUser
  97.                              , public CHXBaseCountingObject
  98. {
  99.   public:
  100.     /****** Public Class Methods ******************************************/
  101.     C3GPPTimedTextRenderer();
  102.     // /Clears out and deletes contents of m_pTextContainerList:
  103.     void ClearTextContainerLists(BOOL bDeleteListPtrWhenCleared);
  104.     BOOL OnMouseMove(INT16 fwKeys, INT16 xPos, INT16 yPos);
  105.     HX_RESULT HandleClick(INT16 fwKeys, INT16 xPos, INT16 yPos);
  106.     HX_RESULT UpdateDisplay(UINT32 ulTime);
  107.     HX_RESULT Draw(IHXVideoSurface *pVideoSurface);
  108.     HX_RESULT SetFont(const C3GPPTextSampleEntry* pCurTextSampleEntry,
  109.                       UINT16 uiFontID_override,
  110.                       const char* pCurFontFaceString,
  111.                       BOOL bIsBolded,
  112.                       BOOL bIsItalicized,
  113.                       BOOL bIsUnderlined,
  114.                       BOOL bIsStruckThrough,
  115.                       UINT32 ulScaledHeight
  116. #if defined(_WINDOWS) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  117.                       , DWORD fdwCharSet
  118. #endif // /_WINDOWS                                                            _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  119.                       );
  120.     UINT32 SetJustificationFlags(const C3GPPTextSampleEntry* pCurTextSampleEntry);
  121.     HX_RESULT FillRectangle(UINT32 ulRectColorARGB);
  122. #if defined(_WINDOWS) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  123.     HX_RESULT ConvertToOSRenderableChars(const C3GPPTextContainer* pTextCont,
  124.                                /*OUT*/ DWORD& fdwCharSet,
  125.                                /*OUT*/ char*& pszNativeString,
  126.                                /*OUT*/ INT32& lNativeStringLen);
  127.     HX_RESULT GetAppropriateCharset(wchar_t* pUTF16String,
  128.         INT32 lLenUTF16StrInWideChars,
  129.         /*OUT*/ DWORD& fdwCharSet, /*OUT*/UINT32& ulCodePage);
  130. #endif // /_WINDOWS                                                            _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  131.     C3GPPTextHyperTextBox* findActiveHyperlinkAtXY(
  132.             INT16 xPos, INT16 yPos);
  133.     UINT32 GetPacketContentTime(IHXPacket* pPacket);
  134.     HX_RESULT HandleNewText(IHXPacket* pNewPacket,
  135.                             LISTPOSITION& plistPosOfFirstTxtCntnr);
  136.     // /(Only) call this when new packet arrives:
  137.     HX_RESULT SetPriorPacketTCsEndTimes();
  138.     HX_RESULT InsertInRedrawListInTemporalOrder(
  139.             const C3GPPTextContainer* pTextContainer);
  140.     HX_RESULT RemoveFromRedrawList(const C3GPPTextContainer* pTextContainer);
  141.     /************************************************************************
  142.      *  IHXRenderer Interface Methods                       ref:    hxrendr.h
  143.      */
  144.     STDMETHOD(StartStream) (THIS_ IHXStream* pStream, IHXPlayer* pPlayer);
  145.     STDMETHOD(EndStream )  (THIS);
  146.     STDMETHOD(OnHeader  )  (THIS_ IHXValues* pStreamHeaderObj);
  147.     STDMETHOD(OnPacket  )  (THIS_ IHXPacket* pPacket, INT32 timeOffset);
  148.     STDMETHOD(OnTimeSync)  (THIS_ UINT32 currentPlayBackTime);
  149.     STDMETHOD(OnPreSeek )  (THIS_ UINT32 timeBefore, UINT32 timeAfter);
  150.     STDMETHOD(OnPostSeek)  (THIS_ UINT32 timeBefore, UINT32 timeAfter);
  151.     STDMETHOD(OnPause   )  (THIS_ UINT32 timeBeforePause);
  152.     STDMETHOD(OnBegin   )  (THIS_ UINT32 timeAfterBegin);
  153.     STDMETHOD(OnBuffering) (THIS_ UINT32 reason, UINT16 percentComplete);
  154.     STDMETHOD(GetRendererInfo)
  155.         (THIS_
  156.          REF(const char**) pStreamMimeTypes,
  157.          REF(UINT32)       initialGranularity
  158.         );
  159.     STDMETHOD(GetDisplayType)
  160.         (THIS_
  161.          REF(HX_DISPLAY_TYPE) displayType,
  162.          REF(IHXBuffer*)      pDisplayInfo
  163.         );
  164.     STDMETHOD(OnEndofPackets) (THIS);
  165.     /************************************************************************
  166.      *  IHXSiteUser Interface Methods                         ref:    hxwin.h
  167.      */
  168.     STDMETHOD(AttachSite)  (THIS_ IHXSite* pSite);
  169.     STDMETHOD(DetachSite)  (THIS);
  170.     STDMETHOD(HandleEvent) (THIS_ HXxEvent* pEvent);
  171.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  172.     
  173.     
  174.     /************************************************************************
  175.      *  IHXPlugin Interface Methods                         ref:    hxplugn.h
  176.      */
  177.     STDMETHOD(GetPluginInfo)
  178.         (THIS_ 
  179.           REF(BOOL)        bLoadMultiple,
  180.           REF(const char*) pDescription,
  181.           REF(const char*) pCopyright,
  182.           REF(const char*) pMoreInfoURL,
  183.           REF(UINT32)      versionNumber
  184.         );
  185.     STDMETHOD(InitPlugin) (THIS_ IUnknown* pContext);
  186.     /************************************************************************
  187.      *  IUnknown COM Interface Methods                          ref:  pncom.h
  188.      */
  189.     STDMETHOD (QueryInterface ) (THIS_ REFIID ID, void** ppInterfaceObj);
  190.     STDMETHOD_(UINT32, AddRef ) (THIS);
  191.     STDMETHOD_(UINT32, Release) (THIS);
  192.   private:
  193.     /****** Private Class Methods ******************************************/
  194.     HX_RESULT CreateOffscreenBuffer(HXxSize& hxsize);
  195.     void SetDrawOutputBuffer();
  196.     // /This recalculates the list of text containers that need to be drawn
  197.     // as well as those that don't need to be drawn based on new time:
  198.     HX_RESULT RecomputeTextContainerDrawList(UINT32 ulCurTime);
  199.     /****** Private Class Variables ****************************************/
  200.     INT32               m_lRefCount;
  201.     IUnknown*           m_pContext;
  202.     IHXStream*          m_pStream;
  203.     IHXPlayer*          m_pPlayer;
  204.     IHXValues*          m_pHeader;
  205.     IHXPacket*          m_pLatestPacket;
  206.     BOOL                m_bGotAllPacketsAlready;
  207.     UINT32              m_ulTimeOfLastTimeSync; // /Most-recent time sync
  208.     UINT32              m_ulLastPacketTime;
  209.     UINT32              m_ulLastRealPacketTime;
  210.     UINT32              m_ulNumberOfClicks;
  211.     BOOL                m_bIsSubscribed;
  212.     IHXHyperNavigate*   m_pHyperNavigate;
  213.     IHXBackChannel*     m_pBackChannel;
  214.     IHXASMStream*       m_pASMStream;
  215.     HXxSize             m_size;
  216.     IHXMultiInstanceSiteUserSupplier*   m_pMISUS;
  217.     IHXSite*                            m_pMISUSSite;
  218.     IHXCommonClassFactory*              m_pCommonClassFactory;
  219.     BOOL                m_bInSeekMode;
  220.     BOOL                m_bRTPPacketTested;
  221.     BOOL                m_bUsesRTPPackets;
  222.     UINT32              m_ulDuration;
  223.     // /This is the offset from video's origin (top left point):
  224.     HXxPoint            m_originTransformXY;
  225.     UINT32              m_ulNumTextSampleEntries;
  226.     IHXBuffer*          m_p3GPPTextSampleEntryPackedArray;
  227.     SimpleArray         m_textSampleEntries;
  228.     RuleToFlagMap*      m_pRuleToFlagMap;
  229.     CHXSimpleList*      m_pTextContainerList;
  230.     LISTPOSITION        m_pTextContainerListFutureTimePos;
  231.     // /This keeps track of T.C.s that need to be redrawn periodically due to
  232.     // scroll motion or blinking:
  233.     CHXSimpleList*      m_pTextContainerRedrawList;
  234.     INT16               m_nLastMouseMoveXPos;
  235.     INT16               m_nLastMouseMoveYPos;
  236.     HXxEvent*           m_pEvent;
  237.     // /In Symbian, this is just a pointer into m_pBitMap so
  238.     // DO NOT NEW OR DELETE in Symbian!:
  239.     BYTE*               m_pDrawOutputBuffer;
  240.     UINT32              m_ulDrawOutputBufferSizeInBytes;
  241.     UINT32              m_ulBitsPerPixel;
  242.     INT32               m_lXScrollOffset;
  243.     INT32               m_lYScrollOffset;
  244.     double              m_dScrollFactor;
  245.     BOOL                m_bDrawInNonTextScrollArea;
  246. #if defined(HELIX_3GPPTT_USE_STATUS_BAR)
  247.     IHXStatusMessage*   m_pStatusMessage;
  248.     BOOL                m_bStatusMsgWillNeedErasing;
  249.     char*               m_pszHLinkToDisplay;
  250. #endif /* HELIX_3GPPTT_USE_STATUS_BAR */
  251. #if defined(_WINDOWS) // /                                                     -----vvvvvvvvvvvvvvvvvvvvvvvvvv-----
  252.     BOOL                m_bNeedToSetHyperlinkHandCursor;
  253.     HCURSOR             m_hHyperlinkCursor;
  254.     HCURSOR             m_hPreHyperlinkCursor;
  255.     // /These are used for TextOut()s of text to blt to vid surface:
  256.     void*               m_pDeviceContextMemory;  //memory DC for textWindow.
  257.     HFONT               m_pFont;
  258.     HFONT               m_pFontOld;
  259.     
  260. #if defined(USE_DIB_SECTION)
  261.     HBITMAP             m_hBitmap;
  262.     HBITMAP             m_hOldBitmap;
  263.     LPBITMAPINFO        m_LPBITMAPINFO;
  264.     BITMAPINFOHEADER    m_BITMAPINFOHEADER;
  265.     BOOL                AllocNewLPBITMAPINFO(UINT32 ulNumBytes);
  266. #else
  267. #error: non-DIB-section version not implemented for Win32
  268. #endif /* USE_DIB_SECTION */
  269. #elif defined(_MACINTOSH)
  270.     CursHandle          m_hHyperlinkCursor;
  271.     typedef enum
  272.     {
  273.         CURSOR_ARROW,
  274.         CURSOR_HYPERLINK
  275.     }
  276.     CursorShapes;
  277.     CursorShapes        m_CurrentCursor;
  278.     CResourceLoader*    m_pResourceLoader;
  279.     // /For offscreen drawing of text: 
  280.     GWorldPtr           m_pOffScreenWorld;
  281. #elif defined(_UNIX) && (!(defined(_BEOS)))
  282.     Cursor              m_hHyperlinkCursor;
  283.     BOOL                m_bHandActivated;
  284.     Display*            m_pdisp;
  285.     Window              m_window;
  286.     GC                  m_gc;
  287. #elif defined(_SYMBIAN) // /                                                   ------------------------------------
  288.     CFbsBitmap*         m_pBitMap;
  289.     CFont*              m_pFont;
  290.     CFbsScreenDevice*   m_pScreenDevice;
  291.     CFbsBitGc*          m_pGCSite;
  292.     CFbsBitGc*          m_pGCOffscreen;
  293. #endif // /_WINDOWS -elif- _MACINTOSH -elif- (_UNIX && !_BEOS)                 _____^^^^^^^^^^^^^^^^^^^^^^^^^^_____
  294. #if !defined(_USE_DIB_SECTION)
  295.     HXBitmapInfoHeader m_BitmapInfoHeader;
  296. #endif
  297.     /****** Private Static Class Variables *********************************/
  298.     static const char* const  zm_pDescription;
  299.     static const char* const  zm_pCopyright;
  300.     static const char* const  zm_pMoreInfoURL;
  301.     static const char* const  zm_pStreamMimeTypes[];
  302.     /****** Private Class Methods ******************************************/
  303.     ~C3GPPTimedTextRenderer();
  304.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME       // Avoids GCC compiler warning
  305. };
  306. #endif /* ndef _3GPPTTRENDERER_H_*/