Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

562 lines
13 KiB

  1. //
  2. // propdata.cpp
  3. //
  4. #include "private.h"
  5. #include "propdata.h"
  6. #include "candutil.h"
  7. /*============================================================================*/
  8. /* */
  9. /* C P R O P B O O L */
  10. /* */
  11. /*============================================================================*/
  12. /* C P R O P B O O L */
  13. /*------------------------------------------------------------------------------
  14. ------------------------------------------------------------------------------*/
  15. CPropBool::CPropBool( void )
  16. {
  17. m_flag = FALSE;
  18. }
  19. /* ~ C P R O P B O O L */
  20. /*------------------------------------------------------------------------------
  21. ------------------------------------------------------------------------------*/
  22. CPropBool::~CPropBool( void )
  23. {
  24. }
  25. /* S E T */
  26. /*------------------------------------------------------------------------------
  27. ------------------------------------------------------------------------------*/
  28. HRESULT CPropBool::Set( BOOL flag )
  29. {
  30. if (m_flag == flag) {
  31. return S_FALSE;
  32. }
  33. m_flag = flag;
  34. return S_OK;
  35. }
  36. /* G E T */
  37. /*------------------------------------------------------------------------------
  38. ------------------------------------------------------------------------------*/
  39. HRESULT CPropBool::Get( BOOL *pflag )
  40. {
  41. if (pflag == NULL) {
  42. return E_INVALIDARG;
  43. }
  44. *pflag = m_flag;
  45. return S_OK;
  46. }
  47. /*============================================================================*/
  48. /* */
  49. /* C P R O P U I N T */
  50. /* */
  51. /*============================================================================*/
  52. /* C P R O P U I N T */
  53. /*------------------------------------------------------------------------------
  54. ------------------------------------------------------------------------------*/
  55. CPropUINT::CPropUINT( void )
  56. {
  57. m_val = 0;
  58. }
  59. /* ~ C P R O P U I N T */
  60. /*------------------------------------------------------------------------------
  61. ------------------------------------------------------------------------------*/
  62. CPropUINT::~CPropUINT( void )
  63. {
  64. }
  65. /* S E T */
  66. /*------------------------------------------------------------------------------
  67. ------------------------------------------------------------------------------*/
  68. HRESULT CPropUINT::Set( UINT val )
  69. {
  70. if (m_val == val) {
  71. return S_FALSE;
  72. }
  73. m_val = val;
  74. return S_OK;
  75. }
  76. /* G E T */
  77. /*------------------------------------------------------------------------------
  78. ------------------------------------------------------------------------------*/
  79. HRESULT CPropUINT::Get( UINT *pval )
  80. {
  81. if (pval == NULL) {
  82. return E_INVALIDARG;
  83. }
  84. *pval = m_val;
  85. return S_OK;
  86. }
  87. /*============================================================================*/
  88. /* */
  89. /* C P R O P L O N G */
  90. /* */
  91. /*============================================================================*/
  92. /* C P R O P L O N G */
  93. /*------------------------------------------------------------------------------
  94. ------------------------------------------------------------------------------*/
  95. CPropLong::CPropLong( void )
  96. {
  97. m_val = 0;
  98. }
  99. /* ~ C P R O P L O N G */
  100. /*------------------------------------------------------------------------------
  101. ------------------------------------------------------------------------------*/
  102. CPropLong::~CPropLong( void )
  103. {
  104. }
  105. /* S E T */
  106. /*------------------------------------------------------------------------------
  107. ------------------------------------------------------------------------------*/
  108. HRESULT CPropLong::Set( LONG val )
  109. {
  110. if (m_val == val) {
  111. return S_FALSE;
  112. }
  113. m_val = val;
  114. return S_OK;
  115. }
  116. /* G E T */
  117. /*------------------------------------------------------------------------------
  118. ------------------------------------------------------------------------------*/
  119. HRESULT CPropLong::Get( LONG *pval )
  120. {
  121. if (pval == NULL) {
  122. return E_INVALIDARG;
  123. }
  124. *pval = m_val;
  125. return S_OK;
  126. }
  127. /*============================================================================*/
  128. /* */
  129. /* C P R O P S I Z E */
  130. /* */
  131. /*============================================================================*/
  132. /* C P R O P S I Z E */
  133. /*------------------------------------------------------------------------------
  134. ------------------------------------------------------------------------------*/
  135. CPropSize::CPropSize( void )
  136. {
  137. m_size.cx = 0;
  138. m_size.cy = 0;
  139. }
  140. /* ~ C P R O P S I Z E */
  141. /*------------------------------------------------------------------------------
  142. ------------------------------------------------------------------------------*/
  143. CPropSize::~CPropSize( void )
  144. {
  145. }
  146. /* S E T */
  147. /*------------------------------------------------------------------------------
  148. ------------------------------------------------------------------------------*/
  149. HRESULT CPropSize::Set( SIZE *psize )
  150. {
  151. if (psize == NULL) {
  152. return E_INVALIDARG;
  153. }
  154. if (m_size.cx == psize->cx && m_size.cy == psize->cy) {
  155. return S_FALSE;
  156. }
  157. m_size = *psize;
  158. return S_OK;
  159. }
  160. /* G E T */
  161. /*------------------------------------------------------------------------------
  162. ------------------------------------------------------------------------------*/
  163. HRESULT CPropSize::Get( SIZE *psize )
  164. {
  165. if (psize == NULL) {
  166. return E_INVALIDARG;
  167. }
  168. *psize = m_size;
  169. return S_OK;
  170. }
  171. /*============================================================================*/
  172. /* */
  173. /* C P R O P P O I N T */
  174. /* */
  175. /*============================================================================*/
  176. /* C P R O P P O I N T */
  177. /*------------------------------------------------------------------------------
  178. ------------------------------------------------------------------------------*/
  179. CPropPoint::CPropPoint( void )
  180. {
  181. m_pt.x = 0;
  182. m_pt.y = 0;
  183. }
  184. /* ~ C P R O P P O I N T */
  185. /*------------------------------------------------------------------------------
  186. ------------------------------------------------------------------------------*/
  187. CPropPoint::~CPropPoint( void )
  188. {
  189. }
  190. /* S E T */
  191. /*------------------------------------------------------------------------------
  192. ------------------------------------------------------------------------------*/
  193. HRESULT CPropPoint::Set( POINT *ppt )
  194. {
  195. if (ppt == NULL) {
  196. return E_INVALIDARG;
  197. }
  198. if (m_pt.x == ppt->x && m_pt.y == ppt->y) {
  199. return S_FALSE;
  200. }
  201. m_pt = *ppt;
  202. return S_OK;
  203. }
  204. /* G E T */
  205. /*------------------------------------------------------------------------------
  206. ------------------------------------------------------------------------------*/
  207. HRESULT CPropPoint::Get( POINT *ppt )
  208. {
  209. if (ppt == NULL) {
  210. return E_INVALIDARG;
  211. }
  212. *ppt = m_pt;
  213. return S_OK;
  214. }
  215. /*============================================================================*/
  216. /* */
  217. /* C P R O P T E X T */
  218. /* */
  219. /*============================================================================*/
  220. /* C P R O P T E X T */
  221. /*------------------------------------------------------------------------------
  222. ------------------------------------------------------------------------------*/
  223. CPropText::CPropText( void )
  224. {
  225. m_pwch = NULL;
  226. }
  227. /* ~ C P R O P T E X T */
  228. /*------------------------------------------------------------------------------
  229. ------------------------------------------------------------------------------*/
  230. CPropText::~CPropText( void )
  231. {
  232. if (m_pwch != NULL) {
  233. delete m_pwch;
  234. m_pwch = NULL;
  235. }
  236. }
  237. /* S E T */
  238. /*------------------------------------------------------------------------------
  239. ------------------------------------------------------------------------------*/
  240. HRESULT CPropText::Set( BSTR bstr )
  241. {
  242. LPWSTR pwchNew = NULL;
  243. if (bstr != NULL) {
  244. int l = wcslen((LPCWSTR)bstr);
  245. pwchNew = new WCHAR[ l + 1 ];
  246. if (pwchNew == NULL) {
  247. return E_OUTOFMEMORY;
  248. }
  249. StringCchCopyW( pwchNew, l+1, (LPCWSTR)bstr );
  250. }
  251. if (m_pwch != NULL) {
  252. delete m_pwch;
  253. }
  254. m_pwch = pwchNew;
  255. return S_OK;
  256. }
  257. /* G E T */
  258. /*------------------------------------------------------------------------------
  259. ------------------------------------------------------------------------------*/
  260. HRESULT CPropText::Get( BSTR *pbstr )
  261. {
  262. if (pbstr == NULL) {
  263. return E_INVALIDARG;
  264. }
  265. *pbstr = SysAllocString( ((m_pwch == NULL) ? L"" : m_pwch) );
  266. return (*pbstr != NULL) ? S_OK : E_OUTOFMEMORY;
  267. }
  268. /*============================================================================*/
  269. /* */
  270. /* C P R O P F O N T */
  271. /* */
  272. /*============================================================================*/
  273. /* C P R O P F O N T */
  274. /*------------------------------------------------------------------------------
  275. ------------------------------------------------------------------------------*/
  276. CPropFont::CPropFont( void )
  277. {
  278. memset( &m_lf, 0, sizeof(m_lf) );
  279. m_ort = PROPFONTORT_DONTCARE;
  280. m_hFont = NULL;
  281. }
  282. /* ~ C P R O P F O N T */
  283. /*------------------------------------------------------------------------------
  284. ------------------------------------------------------------------------------*/
  285. CPropFont::~CPropFont( void )
  286. {
  287. if (m_hFont != NULL) {
  288. DeleteObject( m_hFont );
  289. }
  290. }
  291. /* S E T */
  292. /*------------------------------------------------------------------------------
  293. ------------------------------------------------------------------------------*/
  294. HRESULT CPropFont::Set( LOGFONTW *plf )
  295. {
  296. HFONT hFontNew;
  297. if (plf == NULL) {
  298. return E_INVALIDARG;
  299. }
  300. if ((memcmp( &m_lf, plf, sizeof(LOGFONTW)-LF_FACESIZE*sizeof(WCHAR) ) == 0)
  301. && wcscmp( m_lf.lfFaceName, plf->lfFaceName ) == 0) {
  302. return S_OK;
  303. }
  304. hFontNew = CreateFontProc( plf, m_ort );
  305. if (hFontNew == NULL) {
  306. return E_FAIL;
  307. }
  308. if (m_hFont) {
  309. DeleteObject( m_hFont );
  310. }
  311. m_lf = *plf;
  312. m_hFont = hFontNew;
  313. return S_OK;
  314. }
  315. /* G E T */
  316. /*------------------------------------------------------------------------------
  317. ------------------------------------------------------------------------------*/
  318. HRESULT CPropFont::Get( LOGFONTW *plf )
  319. {
  320. if (plf == NULL) {
  321. return E_INVALIDARG;
  322. }
  323. *plf = m_lf;
  324. return S_OK;
  325. }
  326. /* S E T O R I E N T A T I O N */
  327. /*------------------------------------------------------------------------------
  328. ------------------------------------------------------------------------------*/
  329. HRESULT CPropFont::SetOrientation( PROPFONTORIENTATION ort )
  330. {
  331. HFONT hFontNew;
  332. if (m_ort == ort) {
  333. return S_FALSE;
  334. }
  335. hFontNew = CreateFontProc( &m_lf, ort );
  336. if (hFontNew == NULL) {
  337. return E_FAIL;
  338. }
  339. if (m_hFont) {
  340. DeleteObject( m_hFont );
  341. }
  342. m_ort = ort;
  343. m_hFont = hFontNew;
  344. return S_OK;
  345. }
  346. /* C R E A T E F O N T P R O C */
  347. /*------------------------------------------------------------------------------
  348. ------------------------------------------------------------------------------*/
  349. HFONT CPropFont::CreateFontProc( const LOGFONTW *plf, PROPFONTORIENTATION ort )
  350. {
  351. LOGFONTW lf;
  352. lf = *plf;
  353. switch (ort) {
  354. case PROPFONTORT_DONTCARE: {
  355. break;
  356. }
  357. case PROPFONTORT_ORT0: {
  358. lf.lfEscapement = lf.lfOrientation = 0;
  359. break;
  360. }
  361. case PROPFONTORT_ORT90: {
  362. lf.lfEscapement = lf.lfOrientation = 900;
  363. break;
  364. }
  365. case PROPFONTORT_ORT180: {
  366. lf.lfEscapement = lf.lfOrientation = 1800;
  367. break;
  368. }
  369. case PROPFONTORT_ORT270: {
  370. lf.lfEscapement = lf.lfOrientation = 2700;
  371. break;
  372. }
  373. }
  374. return OurCreateFontIndirectW( &lf );
  375. }