3gppttstructs.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:19k
源码类别:

Symbian

开发平台:

Visual 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 _3GPPTTSTRUCTS_H_
  36. #define _3GPPTTSTRUCTS_H_
  37. /****************************************************************************
  38.  *  Includes
  39.  */
  40. #include "hxtypes.h"
  41. #include "hxresult.h"
  42. #include "hxassert.h"
  43. #include "3gppttutils.h"
  44. // /These are individual flag bits in C3GPPTextSampleEntry::m_ulDisplayFlags :
  45. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_IN          0x00000020
  46. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_OUT         0x00000040
  47. // /8th bit set means horizontal motion (else vertical), 9th bit set means
  48. // from top or left, (else from bottom or right):
  49. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_DIR_MASK    0x00000180
  50. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_DIR_UP      0x00000000
  51. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_DIR_RTOL    0x00000080
  52. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_DIR_DOWN    0x00000100
  53. #define HX_3GPPTT_DISPLAYFLAGS_SCROLL_DIR_LTOR    0x00000180
  54. // /Non-scroll display flags:
  55. #define HX_3GPPTT_DISPLAYFLAGS_CONTINUOUS_KARAOKE 0x00000800
  56. #define HX_3GPPTT_DISPLAYFLAGS_WRITE_VERTICALLY   0x00020000
  57. #define HX_3GPPTT_JUSTIFICATION_LEFT              0
  58. #define HX_3GPPTT_JUSTIFICATION_TOP               0
  59. #define HX_3GPPTT_JUSTIFICATION_CENTER            1 /* Horiz or vert */
  60. #define HX_3GPPTT_JUSTIFICATION_RIGHT             (-1)
  61. #define HX_3GPPTT_JUSTIFICATION_BOTTOM            (-1)
  62. // /Single-bit FaceStyle flags:
  63. #define HX_3GPPTT_FACE_STYLE_PLAIN                0
  64. #define HX_3GPPTT_FACE_STYLE_BOLD                 1
  65. #define HX_3GPPTT_FACE_STYLE_ITALIC               2
  66. #define HX_3GPPTT_FACE_STYLE_UNDERLINE            4
  67. #define HX_3GPPTT_HYPERLINK_RGB_COLOR       0x00FF0000 /* Red */
  68. #define HX_3GPPTT_FULLY_TRANSPARENT         0xFF000000
  69. // /box-type 4-cc codes
  70. #define HX_3GPPTT_4CC_LEN   4
  71. #define HX_3GPPTT_STYL_4CC  "styl"
  72. #define HX_3GPPTT_HLIT_4CC  "hlit"
  73. #define HX_3GPPTT_HCLR_4CC  "hclr"
  74. #define HX_3GPPTT_KROK_4CC  "krok"
  75. #define HX_3GPPTT_DLAY_4CC  "dlay"
  76. #define HX_3GPPTT_HREF_4CC  "href"
  77. #define HX_3GPPTT_TBOX_4CC  "tbox"
  78. #define HX_3GPPTT_BLNK_4CC  "blnk"
  79. #define HX_3GPPTT_INVALID_INDEX   ((UINT16)-1)
  80. #define HX_3GPPTT_MAX_CHAR_OFFSET (((UINT16)-1)-1)
  81. #define HX_3GPPTT_INVALID_TIME    ((UINT32)-1)
  82. #define HX_3GPPTT_INVALID_INT16   (-1)
  83. #define HX_3GPPTT_BLINK_HALFINTERVAL_TIME   1000 /* in milliseconds */
  84. //TBOX
  85. class C3GPPTextboxBox
  86. {
  87. public:
  88.     C3GPPTextboxBox() : m_top(0), m_left(0), m_bottom(0), m_right(0) {}
  89.     HX_RESULT Build(const UINT8*& pData);
  90.     INT16 Top() const { return m_top; }
  91.     INT16 Left() const { return m_left; }
  92.     INT16 Bottom() const { return m_bottom; }
  93.     INT16 Right() const { return m_right; }
  94. private:
  95.     INT16 m_top;
  96.     INT16 m_left;
  97.     INT16 m_bottom;
  98.     INT16 m_right;
  99. };
  100. //STYL
  101. class C3GPPStyleRecord
  102. {
  103. public:
  104.     C3GPPStyleRecord() 
  105.         : m_uiStartCharOffset(0)
  106.         , m_uiEndCharOffset(0)
  107.         , m_uiFontID(0)
  108.         , m_uFaceStyleFlags(0)
  109.         , m_uFontSize(0)
  110.         , m_textColor(0) {}
  111.     HX_RESULT Build(const UINT8*& pData);
  112.     UINT16 GetStartOffset() const { return m_uiStartCharOffset;}
  113.     UINT16 GetEndOffset() const { return m_uiEndCharOffset;}
  114.     UINT16 GetFontID() const { return m_uiFontID;}
  115.     UINT8 GetFaceStyleFlags() const { return m_uFaceStyleFlags; }
  116.     UINT8 GetFontSize() const { return m_uFontSize; }
  117.     UINT32 GetTextColor() const { return m_textColor; }
  118. private:
  119.     UINT16 m_uiStartCharOffset;
  120.     UINT16 m_uiEndCharOffset;
  121.     UINT16 m_uiFontID;
  122.     UINT8  m_uFaceStyleFlags; // /FACE_STYLE + {_PLAIN, _BOLD, _ITALIC, _UNDERLINE}.
  123.     UINT8  m_uFontSize;
  124.     UINT32  m_textColor; // argb
  125. };
  126. //FTAB entry
  127. class C3GPPFontRecord
  128. {
  129. public:
  130.     C3GPPFontRecord() : m_uiFontID(0) {}
  131.     HX_RESULT Build(const UINT8*& pData);
  132.     UINT16 GetFontID() const { return m_uiFontID; }
  133.     const char* GetFontName() const { return m_strFont; }
  134. private:
  135.     UINT16 m_uiFontID;
  136.     SimpleString m_strFont;
  137.  
  138. };
  139. //FTAB
  140. class C3GPPFontTableBox
  141. {
  142. public:
  143.     C3GPPFontTableBox() : m_ulFontTableSizeInBytes(0) {}
  144.     ~C3GPPFontTableBox();
  145.     HX_RESULT Build(const UINT8*& pData);
  146.     UINT32 GetFontTableSize() const { return m_ulFontTableSizeInBytes;}
  147.     UINT16 GetEntryCount() const { return (UINT16)m_entries.GetCount(); }
  148.     const C3GPPFontRecord* GetFontRecord(UINT16 idx) const
  149.     { 
  150.         HX_ASSERT(idx < m_entries.GetCount());
  151.         return (C3GPPFontRecord*)(m_entries.GetItem(idx));
  152.     }
  153. private:
  154.     void CleanUp();
  155. private:
  156.     UINT32          m_ulFontTableSizeInBytes;
  157.     SimpleArray     m_entries;
  158. };
  159. enum TextSampleScrollDirection
  160. {
  161.       scrollDirNone
  162.     , scrollDirUp
  163.     , scrollDirRightToLeft
  164.     , scrollDirDown
  165.     , scrollDirLeftToRight
  166. };
  167. // /From MP4 stsd atom class:
  168. class C3GPPArrayEntry
  169. {
  170. public:
  171.     HX_RESULT Build(const UINT8*& pData)
  172.     {
  173.         // we don't use any of this data (just skip)
  174.         pData += 16;
  175.         return HXR_OK;
  176.     }
  177.     //UINT8 pSize[4];
  178.     //UINT8 pDataFormat[4];
  179.     //UINT8 pReserved[6];
  180.     //UINT8 pDataRefIdx[2];
  181. };
  182. //TX3G
  183. class C3GPPTextSampleEntry 
  184. : public C3GPPArrayEntry 
  185. {
  186. public:
  187.     C3GPPTextSampleEntry();
  188.     HX_RESULT Build(const UINT8*& pData);
  189. public:
  190.     BOOL hasScrollIn() const  { return (m_ulDisplayFlags & HX_3GPPTT_DISPLAYFLAGS_SCROLL_IN); }
  191.     BOOL hasScrollOut() const { return (m_ulDisplayFlags & HX_3GPPTT_DISPLAYFLAGS_SCROLL_OUT); }
  192.     BOOL hasContinuousKaraoke() const { return (m_ulDisplayFlags & HX_3GPPTT_DISPLAYFLAGS_CONTINUOUS_KARAOKE); }
  193.     BOOL hasWriteVertically()  const { return (m_ulDisplayFlags & HX_3GPPTT_DISPLAYFLAGS_WRITE_VERTICALLY); }
  194.     TextSampleScrollDirection getScrollDirection() const;
  195.     INT8 GetHorJust() const { return m_horizontalJustification; }
  196.     INT8 GetVerJust() const { return m_verticalJustification; }
  197.     UINT32 GetBGColor() const { return m_bgColor; }
  198.     const C3GPPTextboxBox& GetDefaultTextBox() const { return m_defaultTextBox; }
  199.     const C3GPPStyleRecord& GetDefaultStyle() const { return m_defaultStyle; }
  200.     const C3GPPFontTableBox& GetFontTable() const { return m_fontTable; }
  201. private:
  202.     UINT32            m_ulDisplayFlags;
  203.     INT8              m_horizontalJustification; // /JUSTIFICATION_LEFT, ...etc.
  204.     INT8              m_verticalJustification;   // /JUSTIFICATION_TOP, ...etc.
  205.     UINT32            m_bgColor;
  206.     C3GPPTextboxBox   m_defaultTextBox;
  207.     C3GPPStyleRecord  m_defaultStyle;
  208.     C3GPPFontTableBox m_fontTable;
  209. };
  210. class C3GPPTextSampleModifierBox // /extends Box(type)
  211. {
  212.   public:
  213.     enum ModifierType
  214.     {
  215.         STYL,
  216.         HLIT,
  217.         HCLR,
  218.         KROK,
  219.         DLAY,
  220.         HREF,
  221.         TBOX,
  222.         BLNK,
  223.         UNKNOWN
  224.     };
  225.     C3GPPTextSampleModifierBox() : m_ulSize(0), m_type(UNKNOWN), m_pData(0) {}
  226.     HX_RESULT Build(const UINT8*& pData);
  227.     const UINT8* GetData() const { return m_pData; }
  228.     ModifierType GetType() const { return m_type; }
  229.     UINT32 GetTotalSize() const { return m_ulSize; }
  230.     UINT32 GetDataSize() const { HX_ASSERT(m_ulSize >= 8); return m_ulSize - 8; }
  231.   private:
  232.     C3GPPTextSampleModifierBox::ModifierType ReadType(const UINT8*& pData);
  233.     UINT32 m_ulSize; 
  234.     ModifierType m_type;
  235.     const UINT8* m_pData;
  236. };
  237. inline
  238. HX_RESULT C3GPPTextSampleModifierBox::Build(const UINT8*& pData)
  239. {
  240.     m_ulSize = ReadUL32(pData);
  241.     m_type = ReadType(pData);
  242.     m_pData = pData;
  243.     return HXR_OK;
  244. }
  245. class C3GPPTextSample
  246. {
  247. public:      
  248.     
  249.     C3GPPTextSample(IHXBuffer* pIHXBuff);
  250.     ~C3GPPTextSample() { HX_RELEASE(m_pIHXBuff); }
  251.     const char* GetText() const { return m_pText; }
  252.     UINT16 GetTextLenInBytes() const { return m_uiTextLengthInBytes; }
  253.     const UINT8* GetModifierData() const { return m_pTextModifierData; }
  254.     UINT16 GetModifierDataSize() const { return m_uiTextModifiersTotalSize;}
  255. private:
  256.     HX_RESULT Init(IHXBuffer* pIHXBuff);
  257. private:
  258.     UINT16                      m_uiTextLengthInBytes;
  259.     const char*                 m_pText;
  260.     IHXBuffer*                  m_pIHXBuff;
  261.     //  0 or more of these
  262.     const UINT8*                m_pTextModifierData;   
  263.     UINT16                      m_uiTextModifiersTotalSize;
  264. };
  265. //STYL
  266. class C3GPPTextStyleBox
  267. {
  268. public:
  269.     
  270.     ~C3GPPTextStyleBox();
  271.     HX_RESULT Build(const UINT8*& pData);
  272.     UINT16 GetEntryCount() const { return  (UINT16)m_entries.GetCount(); }
  273.     const C3GPPStyleRecord* GetStyleRecord(UINT16 uiEntry) const
  274.     {
  275.         HX_ASSERT(uiEntry < m_entries.GetCount());
  276.         return (const C3GPPStyleRecord*)m_entries.GetItem(uiEntry);
  277.     }
  278. private:
  279.     void CleanUp();
  280. private:
  281.     SimpleArray m_entries;
  282. };
  283. //HLIT
  284. class C3GPPTextHighlightBox
  285. {
  286.   public:
  287.       C3GPPTextHighlightBox() : m_uiStartCharOffset(0), m_uiEndCharOffset(0) {};
  288.       HX_RESULT Build(const UINT8*& pData)
  289.       {
  290.           m_uiStartCharOffset = ReadUI16(pData);
  291.           m_uiEndCharOffset = ReadUI16(pData);
  292.           return HXR_OK;
  293.       }
  294.       UINT16 GetStartOffset() const { return m_uiStartCharOffset;}
  295.       UINT16 GetEndOffset() const { return m_uiEndCharOffset;}
  296.   private:
  297.     UINT16  m_uiStartCharOffset;
  298.     UINT16  m_uiEndCharOffset;
  299. };
  300. //HCLR
  301. class C3GPPTextHilightColorBox
  302. {
  303.   public:
  304.       C3GPPTextHilightColorBox() : m_HighlightColorRGBA(0) {}
  305.       HX_RESULT Build(const UINT8*& pData)
  306.       {
  307.           m_HighlightColorRGBA = ReadARGB(pData);
  308.           return HXR_OK;
  309.       }
  310.       UINT32 GetHighlightColor() const { return m_HighlightColorRGBA; }
  311.   private:
  312.       // /Specifies entire sample's highlight (incl. karaoke) color:
  313.       UINT32 m_HighlightColorRGBA;
  314. };
  315. //KROK
  316. class C3GPPTextKaraokeBox
  317. {
  318. public:
  319.     //KROK entry
  320.     class C3GPPTextKaraokeControlEntry
  321.     {
  322.     public:
  323.         C3GPPTextKaraokeControlEntry() 
  324.         : m_ulHighlightEndTime(0)
  325.         , m_uiStartCharOffset(0)
  326.         , m_uiEndCharOffset(0) {}
  327.            
  328.         HX_RESULT Build(const UINT8*& pData);
  329.         UINT16 GetStartOffset() const {return m_uiStartCharOffset; }
  330.         UINT16 GetEndOffset() const {return m_uiEndCharOffset;}
  331.         UINT32 GetHighlightEndTime() const {return m_ulHighlightEndTime;}
  332.     private:
  333.         UINT32  m_ulHighlightEndTime;
  334.         UINT16  m_uiStartCharOffset;
  335.         UINT16  m_uiEndCharOffset;
  336.     };
  337.   public:
  338.     /*C3GPPTextKaraokeBox() 
  339.         : m_ul1stHighlightStartTime(0) {};*/
  340.     ~C3GPPTextKaraokeBox();
  341.     HX_RESULT Build(const UINT8*& pData);
  342.     UINT32 Get1stHighlightStartTime() const {return m_ul1stHighlightStartTime;}
  343.     UINT16 GetEntryCount() const { return (UINT16)m_entries.GetCount(); }
  344.     const C3GPPTextKaraokeControlEntry* GetKaraokeControlEntry(UINT16 uiEntry) const
  345.     {
  346.         HX_ASSERT(uiEntry < m_entries.GetCount());
  347.         return (C3GPPTextKaraokeControlEntry*)m_entries.GetItem(uiEntry);
  348.     }
  349. private:
  350.     void CleanUp();
  351. private:
  352.     UINT32 m_ul1stHighlightStartTime;
  353.     SimpleArray m_entries;
  354. };
  355. //DLAY
  356. class C3GPPTextScrollDelayBox 
  357. {
  358. public:
  359.     C3GPPTextScrollDelayBox() : m_ulScrollDelay(0) {}
  360.     HX_RESULT Build(const UINT8*& pData)
  361.     {
  362.         m_ulScrollDelay = ReadUL32(pData);
  363.         return HXR_OK;
  364.     }
  365.     UINT32 GetScrollDelay() const { return m_ulScrollDelay; }
  366. private:
  367.     UINT32  m_ulScrollDelay; // /=delay after a Scroll In &/or before Scroll Out
  368. };
  369. // HREF
  370. class C3GPPTextHyperTextBox
  371. {
  372. public:
  373.     C3GPPTextHyperTextBox() : m_uiStartCharOffset(0), m_uiEndCharOffset(0) {}
  374.     HX_RESULT Build(const UINT8*& pData);
  375.     const char* GetURL() const { return m_strURL;}
  376.     const char* GetAltURL() const { return m_strAltURL;}
  377.     bool HasURL() const { return !m_strURL.Length(); }
  378.     bool HasAltURL() const { return !m_strAltURL.Length(); }
  379.     const UINT16 GetStartOffset() const { return m_uiStartCharOffset;}
  380.     const UINT16 GetEndOffset() const { return m_uiEndCharOffset;}
  381. private:
  382.     UINT16  m_uiStartCharOffset;
  383.     UINT16  m_uiEndCharOffset;
  384.     SimpleString m_strURL;
  385.     SimpleString m_strAltURL;
  386. };
  387. //BLNK
  388. class C3GPPTextBlinkBox
  389. {
  390. public:
  391.     C3GPPTextBlinkBox() : m_uiStartCharOffset(0), m_uiEndCharOffset(0) {}
  392.     HX_RESULT Build(const UINT8*& pData)
  393.     {
  394.         m_uiStartCharOffset = ReadUI16(pData);
  395.         m_uiEndCharOffset = ReadUI16(pData);
  396.         return HXR_OK;
  397.     }
  398.     const UINT16 GetStartOffset() const { return m_uiStartCharOffset; }
  399.     const UINT16 GetEndOffset() const { return m_uiEndCharOffset; }
  400. private:
  401.     UINT16  m_uiStartCharOffset;
  402.     UINT16  m_uiEndCharOffset;
  403. };
  404. class C3GPPTextContainer
  405. {
  406.   public:
  407.     C3GPPTextContainer();
  408.     ~C3GPPTextContainer();
  409.     HX_RESULT Init(
  410.         IHXPacket* pPacket,
  411.         UINT32 ulPacketContentsBeginTime,
  412.         UINT32 ulMaxEndTime,
  413.         UINT16 uiStartCharOffset, 
  414.         /*OUT*/ UINT16& uiREFIndexOfLastChar);
  415.     UINT16 GetTextByteLength() const
  416.     {
  417.         HX_ASSERT(!m_pTextSample  ||  m_pTextSample->GetTextLenInBytes() >
  418.                 m_uiUnpackedStartCharOffset);
  419.         return ( (HX_3GPPTT_INVALID_INDEX == m_uiUnpackedEndCharOffset  ||
  420.                 HX_3GPPTT_MAX_CHAR_OFFSET == m_uiUnpackedEndCharOffset) ?
  421.                         (m_pTextSample?  m_pTextSample->GetTextLenInBytes() -
  422.                          m_uiUnpackedStartCharOffset   :   0)
  423.                     :
  424.                         // /it's not, apparently, endpoint inclusive (and it is
  425.                         // *not* NULL-terminated)
  426.                         m_uiUnpackedEndCharOffset - m_uiUnpackedStartCharOffset);
  427.     }
  428.     BOOL IsHyperlinked() const { return (m_pTextHyperTextBox != NULL); }
  429.     BOOL ContainsPoint(INT16 iX, INT16 iY) const;
  430.     HX_RESULT UpdateLowestPotentialNextTCStartOffset(
  431.             UINT16 uiCurStartCharOffset, UINT16 uiCurEndCharOffset,
  432.             UINT16& /*REF IN-&-OUT*/ uiLowestPotentialNextTCStartOffsetFound,
  433.             BOOL&   /*REF OUT*/ bAssignBoxToCurrent);
  434.     // /m_pPacket pass-through methods:
  435.     //IHXBuffer*  GetBuffer() {return (m_pPacket? m_pPacket->GetBuffer():NULL); }
  436.     UINT32 GetBeginTime() const { return m_ulBeginTime; }
  437.     UINT32 GetEndTime() const { return m_ulEndTime; }
  438.     UINT32 GetDuration() const { return m_ulEndTime - m_ulBeginTime; }
  439.     UINT32 GetNextActivityTime() const; // /Next time draw or erase or move happens
  440.     UINT32 GetPrevActivityTime()const ; // /Previous time draw or erase or move happened
  441.     void SetPrevActivityTime(UINT32 ulAbsoluteTime); // /Converts to offset (local time)
  442.     UINT32 GetASMRuleNumber() const { return m_pPacket? m_pPacket->GetASMRuleNumber() : 0; }
  443.     // /All data members are unpacked and NULL-terminated where appropriate:
  444.     IHXPacket*       m_pPacket;
  445.     C3GPPTextSample* m_pTextSample;
  446.     UINT16           m_uiUnpackedStartCharOffset;
  447.     UINT16           m_uiUnpackedEndCharOffset;
  448.     UINT16           m_uiTextStyleBoxIndex;
  449.     UINT16           m_uiTextKaraokeBoxIndex;
  450.     HXxRect          m_BoundingRectOfInitialDraw;
  451.     C3GPPTextStyleBox*        m_pTextStyleBox;
  452.     C3GPPTextHighlightBox*    m_pTextHighlightBox;
  453.     C3GPPTextHilightColorBox* m_pTextHilightColorBox;
  454.     C3GPPTextKaraokeBox*      m_pTextKaraokeBox;
  455.     C3GPPTextScrollDelayBox*  m_pTextScrollDelayBox;
  456.     C3GPPTextHyperTextBox*    m_pTextHyperTextBox;
  457.     C3GPPTextboxBox*          m_pTextboxBox;
  458.     C3GPPTextBlinkBox*        m_pTextBlinkBox;
  459.     UINT32                    m_ulBeginTime;
  460.     // /End time is the start time of the next packet (if any):
  461.     UINT32                    m_ulEndTime;
  462.     // /For blinking or scrolling text, this is set to a non-invalid time
  463.     // (i.e., not HX_3GPPTT_INVALID_TIME) and is the next time this's text
  464.     // needs to be redrawn at another location (scroll) or on/off toggle
  465.     // (for blinking):
  466.     UINT32                    m_ulNextDrawUpdateTimeOffset;
  467.     // /Used for scrolling text, this is when the last draw (if any) was done;
  468.     // if it hasn't been drawn yet, this is set to HX_3GPPTT_INVALID_TIME:
  469.     UINT32                    m_ulPrevDrawUpdateTimeOffset;
  470.     // /A T.C. may contain one or more newline chars at its start; this keeps
  471.     // track of how many were found (if any); init'd to HX_3GPPTT_INVALID_INT16
  472.     // which can be used to determine if such counting was performed:
  473.     INT16                     m_lNumUTF16NewlineCharsAtStart;
  474.     // /This keeps track of how many newlines there are, which might equal
  475.     // the above but may be less if there are any CRLF's which are two
  476.     // newline chars that count as only 1 newline:
  477.     INT16                     m_lNumUTF16NewlinesAtStart;
  478. private:
  479.     HX_RESULT BuildSampleModifiers(BOOL& bNeedToBreakTCsUpAtNewlines);
  480.     HX_RESULT BuildSTYL(const UINT8*& pData, 
  481.       UINT16& uiLowestPotentialNextTCStartOffsetFound,
  482.       BOOL& bNeedToBreakTCsUpAtNewlines,
  483.       UINT16& curEndCharOffset);
  484.     HX_RESULT BuildHLIT(const UINT8*& pData, 
  485.       UINT16& uiLowestPotentialNextTCStartOffsetFound,
  486.       BOOL& bNeedToBreakTCsUpAtNewlines,
  487.       UINT16& curEndCharOffset);
  488.     HX_RESULT BuildKROK(const UINT8*& pData, 
  489.       UINT16& uiLowestPotentialNextTCStartOffsetFound,
  490.       BOOL& bNeedToBreakTCsUpAtNewlines,
  491.       UINT16& curEndCharOffset);
  492.     HX_RESULT BuildHREF(const UINT8*& pData, 
  493.       UINT16& uiLowestPotentialNextTCStartOffsetFound,
  494.       BOOL& bNeedToBreakTCsUpAtNewlines,
  495.       UINT16& curEndCharOffset);
  496.     HX_RESULT BuildBLNK(const UINT8*& pData, 
  497.       UINT16& uiLowestPotentialNextTCStartOffsetFound, 
  498.       BOOL& bNeedToBreakTCsUpAtNewlines,
  499.       UINT16& curEndCharOffset);
  500.     HX_RESULT BuildTBOX(const UINT8*& pData);
  501.     HX_RESULT BuildHCLR(const UINT8*& pData);
  502.     HX_RESULT BuildDLAY(const UINT8*& pData);
  503. };
  504. #endif  // _3GPPTTSTRUCTS_H_