ObjLayer.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * Copyright (C) =USTC= Fu Li
  3. *
  4. * Author : Fu Li
  5. * Create : 2003-3-30
  6. * Home : http://www.crazy-bit.com/
  7. * Mail : crazybit@263.net
  8. * History :
  9. */
  10. #ifndef __PCL_OBJECT_LAYER__2003_03_30__H__
  11. #define __PCL_OBJECT_LAYER__2003_03_30__H__
  12. #include "ObjImage.h"
  13. class FCMemoLayer ;
  14. class FCMemoTextLayer ;
  15. class FCObjLayer ; // image layer
  16. class FCObjTextLayer ; // text image layer
  17. //=============================================================================
  18. /// Layer object's property.
  19. struct PACK_Layer
  20. {
  21. /// layer's visible flag.
  22. int m_bLayerVisible ;
  23. /// layer's limit flag.
  24. int m_bLayerLimited ;
  25. /// layer's transparency percentage.
  26. int m_nAlphaPercent ;
  27. };
  28. /// Layer's memo.
  29. class FCMemoLayer : public PACK_Layer
  30. {
  31. public:
  32. enum MEMO_TYPE
  33. {
  34. MEMO_LAYER_NORMAL,
  35. MEMO_LAYER_TEXT,
  36. };
  37. virtual MEMO_TYPE GetMemoType() const {return MEMO_LAYER_NORMAL;}
  38. };
  39. /**
  40. * Layer object.
  41. * layer's bpp must be 32bit.
  42. */
  43. class FCObjLayer : public FCObjImage
  44. {
  45. public:
  46. /// Constructor
  47. FCObjLayer()
  48. {
  49. m_LayerProp.m_bLayerVisible = true ;
  50. m_LayerProp.m_bLayerLimited = false ;
  51. m_LayerProp.m_nAlphaPercent = 100 ;
  52. }
  53. FCObjLayer& operator= (const FCObjLayer& layer)
  54. {
  55. FCObjImage::operator= (layer) ;
  56. m_LayerProp = layer.m_LayerProp ;
  57. return *this ;
  58. }
  59. virtual int Serialize (bool bSave, BYTE* pSave)
  60. {
  61. const BYTE * pStartBak = pSave ;
  62. bSave ? ( *(PACK_Layer*)pSave = m_LayerProp )
  63. : ( m_LayerProp = *(PACK_Layer*)pSave ) ;
  64. pSave += sizeof(PACK_Layer);
  65. pSave += FCObjImage::Serialize (bSave, pSave) ;
  66. return pSave - pStartBak ;
  67. }
  68. /**
  69. * @name memo exchange.
  70. */
  71. //@{
  72. /// Create a FCMemoLayer object. you must use <B>delete</B> to delete it. high recommend using <B>std::auto_ptr</B> to wrap it.
  73. virtual FCMemoLayer* CreateMemoObj() const
  74. {
  75. FCMemoLayer * pMemo = new FCMemoLayer ;
  76. *(PACK_Layer*)pMemo = m_LayerProp ;
  77. return pMemo ;
  78. }
  79. /// Set layer's property.
  80. virtual void SetMemoObj (const FCMemoLayer* pMemo)
  81. {
  82. if (pMemo)
  83. m_LayerProp = *(const PACK_Layer*)pMemo ;
  84. }
  85. //@}
  86. /** Is layer visible. */
  87. bool IsLayerVisible() const {return m_LayerProp.m_bLayerVisible ? true : false;}
  88. /** Layer's transparent percent. [0..100] */
  89. int GetLayerTransparent() const {return m_LayerProp.m_nAlphaPercent;}
  90. /** Is layer limited. */
  91. bool IsLayerLimited() const {return m_LayerProp.m_bLayerLimited ? true : false;}
  92. /// Get/Set layer's name.
  93. std::string& LayerName() {return m_strLayerName;}
  94. protected:
  95. PACK_Layer m_LayerProp ;
  96. std::string m_strLayerName ;
  97. };
  98. //=============================================================================
  99. /// Text layer object's property.
  100. struct PACK_TextLayer
  101. {
  102. std::string m_strText ;
  103. std::string m_strFace ;
  104. int m_nFontSize ;
  105. RGBQUAD m_crFont ;
  106. bool m_bAntiAliased ;
  107. bool m_bBold ;
  108. bool m_bItalic ;
  109. bool m_bAddShadow ; // 是否加阴影
  110. SHADOWDATA m_ShadowData ; // 阴影参数
  111. bool m_bToolEdited ; // 被别的tool编辑过的图层不能通过create创建了,蜕变为普通图层
  112. };
  113. /// Text layer's memo.
  114. class FCMemoTextLayer : public FCMemoLayer,
  115. public PACK_TextLayer
  116. {
  117. virtual MEMO_TYPE GetMemoType() const {return MEMO_LAYER_TEXT;}
  118. };
  119. //-----------------------------------------------------------------------------
  120. /**
  121. * Text layer object.
  122. * the layer initialized to limited when constructor.
  123. */
  124. class FCObjTextLayer : public FCObjLayer
  125. {
  126. public:
  127. /// Constructor
  128. FCObjTextLayer()
  129. {
  130. m_TxtLayerProp.m_bBold = false ;
  131. m_TxtLayerProp.m_bItalic = false ;
  132. m_TxtLayerProp.m_bAntiAliased = true ;
  133. m_TxtLayerProp.m_nFontSize = 24 ;
  134. m_TxtLayerProp.m_crFont = FCColor::crWhite() ;
  135. m_TxtLayerProp.m_bAddShadow = false ;
  136. m_LayerProp.m_bLayerLimited = true ; // init text-layer is limited
  137. m_TxtLayerProp.m_bToolEdited = false ;
  138. m_sizeToOldPos.cx = m_sizeToOldPos.cy = 0 ;
  139. }
  140. FCObjTextLayer& operator= (const FCObjTextLayer& layer)
  141. {
  142. FCObjLayer::operator= (layer) ;
  143. m_TxtLayerProp = layer.m_TxtLayerProp ;
  144. m_sizeToOldPos = layer.m_sizeToOldPos ;
  145. return *this ;
  146. }
  147. virtual FCMemoLayer* CreateMemoObj() const
  148. {
  149. FCMemoTextLayer * pMemo = new FCMemoTextLayer ;
  150. // set basic property
  151. std::auto_ptr<FCMemoLayer> pLM (FCObjLayer::CreateMemoObj()) ;
  152. *static_cast<FCMemoLayer*>(pMemo) = *pLM ;
  153. *static_cast<PACK_TextLayer*>(pMemo) = m_TxtLayerProp ;
  154. return pMemo ;
  155. }
  156. virtual void SetMemoObj (const FCMemoLayer* pMemo)
  157. {
  158. FCObjLayer::SetMemoObj (pMemo) ;
  159. if (pMemo->GetMemoType() != FCMemoLayer::MEMO_LAYER_TEXT)
  160. {
  161. assert(false) ;
  162. return ;
  163. }
  164. const FCMemoTextLayer * pTxt = (const FCMemoTextLayer*)pMemo ;
  165. m_TxtLayerProp = *(const PACK_TextLayer*)pTxt ;
  166. }
  167. bool& ToolEditFlag() {return m_TxtLayerProp.m_bToolEdited;}
  168. private:
  169. PACK_TextLayer m_TxtLayerProp ;
  170. SIZE m_sizeToOldPos ;
  171. friend class FCWin32 ;
  172. };
  173. //=============================================================================
  174. // inline Implement
  175. //=============================================================================
  176. #endif