STS.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:5k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #pragma once
  22. #include <afxtempl.h>
  23. #include <wxutil.h>
  24. #include "TextFile.h"
  25. #include "GFN.h"
  26. typedef enum {TIME, FRAME} tmode; // the meaning of STSEntry::start/end
  27. class STSStyle 
  28. {
  29. public:
  30. CRect marginRect; // measured from the sides
  31. int scrAlignment; // 1 - 9: as on the numpad, 0: default
  32. int borderStyle; // 0: outline, 1: opaque box
  33. double outlineWidth;
  34. double shadowDepth;
  35. COLORREF colors[4]; // usually: {primary, secondary, outline/background, shadow}
  36. BYTE alpha[4];
  37.     int charSet;
  38.     CString fontName;
  39. double fontSize; // height
  40. double fontScaleX, fontScaleY; // percent
  41. double fontSpacing; // +/- pixels
  42. int fontWeight;
  43. bool fItalic;
  44. bool fUnderline;
  45. bool fStrikeOut;
  46. bool fBlur;
  47. double fontAngleZ, fontAngleX, fontAngleY;
  48. int relativeTo; // 0: window, 1: video, 2: undefined (~window)
  49. STSStyle();
  50. void SetDefault();
  51. bool operator == (STSStyle& s);
  52. bool IsFontStyleEqual(STSStyle& s);
  53. void operator = (LOGFONT& lf);
  54. friend LOGFONTA& operator <<= (LOGFONTA& lfa, STSStyle& s);
  55. friend LOGFONTW& operator <<= (LOGFONTW& lfw, STSStyle& s);
  56. friend CString& operator <<= (CString& style, STSStyle& s);
  57. friend STSStyle& operator <<= (STSStyle& s, CString& style);
  58. };
  59. class CSTSStyleMap : public CMapStringToPtr
  60. {
  61. public:
  62. CSTSStyleMap() {}
  63. virtual ~CSTSStyleMap() {Free();}
  64. void Free();
  65. };
  66. typedef struct 
  67. {
  68. CStringW str;
  69. bool fUnicode;
  70. CString style, actor, effect;
  71. CRect marginRect;
  72. int layer;
  73. int start, end;
  74. int readorder;
  75. } STSEntry;
  76. typedef CArray<STSEntry> CSTSArray;
  77. typedef CArray<int> CSubArray;
  78. class STSSegment
  79. {
  80. public:
  81. int start, end;
  82. CSubArray subs;
  83. STSSegment() {};
  84. STSSegment(int s, int e) {start = s; end = e;}
  85. STSSegment(const STSSegment& stss) {*this = stss;}
  86. void operator = (const STSSegment& stss) {start = stss.start; end = stss.end; subs.Copy(stss.subs);}
  87. };
  88. typedef CArray<STSSegment> CSTSSegmentArray;
  89. class CSimpleTextSubtitle : public CSTSArray
  90. {
  91. friend class CSubtitleEditorDlg;
  92. protected:
  93. CSTSSegmentArray m_segments;
  94. virtual void OnChanged() {}
  95. public:
  96. CString m_name;
  97. tmode m_mode;
  98. CTextFile::enc m_encoding;
  99. CString m_path;
  100. CSize m_dstScreenSize;
  101. int m_defaultWrapStyle;
  102. int m_collisions;
  103. bool m_fScaledBAS;
  104. bool m_fUsingAutoGeneratedDefaultStyle;
  105. CSTSStyleMap m_styles;
  106. public:
  107. CSimpleTextSubtitle();
  108. virtual ~CSimpleTextSubtitle();
  109. virtual void Copy(CSimpleTextSubtitle& sts);
  110. virtual void Empty();
  111. void Sort(bool fRestoreReadorder = false);
  112. void CreateSegments();
  113. void Append(CSimpleTextSubtitle& sts, int timeoff = -1);
  114. bool Open(CString fn, int CharSet, CString name = _T(""));
  115. bool Open(CTextFile* f, int CharSet, CString name); 
  116. bool Open(BYTE* data, int len, int CharSet, CString name); 
  117. bool SaveAs(CString fn, exttype et, double fps = -1, CTextFile::enc = CTextFile::ASCII);
  118. void Add(CStringW str, bool fUnicode, int start, int end, CString style = _T("Default"), CString actor = _T(""), CString effect = _T(""), CRect marginRect = CRect(0,0,0,0), int layer = 0, int readorder = -1);
  119. void CreateDefaultStyle(int CharSet);
  120. void ChangeUnknownStylesToDefault();
  121. void AddStyle(CString name, STSStyle* style); // style will be stored and freed in Empty() later
  122. bool CopyStyles(const CSTSStyleMap& styles, bool fAppend = false);
  123. bool SetDefaultStyle(STSStyle& s);
  124. bool GetDefaultStyle(STSStyle& s);
  125. void ConvertToTimeBased(double fps);
  126. void ConvertToFrameBased(double fps);
  127. int TranslateStart(int i, double fps); 
  128. int TranslateEnd(int i, double fps);
  129. int SearchSub(int t, double fps);
  130. int TranslateSegmentStart(int i, double fps); 
  131. int TranslateSegmentEnd(int i, double fps);
  132. const STSSegment* SearchSubs(int t, double fps, /*[out]*/ int* iSegment = NULL, int* nSegments = NULL);
  133. const STSSegment* GetSegment(int iSegment) {return(iSegment >= 0 && iSegment < m_segments.GetSize() ? &m_segments[iSegment] : NULL);}
  134. STSStyle* GetStyle(int i);
  135. bool GetStyle(int i, STSStyle& stss);
  136. int GetCharSet(int i);
  137. bool IsEntryUnicode(int i);
  138. void ConvertUnicode(int i, bool fUnicode);
  139. CStringA GetStrA(int i, bool fSSA = false);
  140. CStringW GetStrW(int i, bool fSSA = false);
  141. CStringW GetStrWA(int i, bool fSSA = false);
  142. #ifdef UNICODE
  143. #define GetStr GetStrW
  144. #else
  145. #define GetStr GetStrA
  146. #endif
  147. void SetStr(int i, CStringA str, bool fUnicode /* ignored */);
  148. void SetStr(int i, CStringW str, bool fUnicode);
  149. };
  150. extern BYTE CharSetList[];
  151. extern TCHAR* CharSetNames[];
  152. extern int CharSetLen;
  153. class CHtmlColorMap : public CMapStringToPtr {public: CHtmlColorMap();};
  154. extern CHtmlColorMap g_colors;