Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(399)

Side by Side Diff: xfa/src/fdp/src/fde/fde_gedevice.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/src/fdp/src/fde/fde_gedevice.h ('k') | xfa/src/fdp/src/fde/fde_geobject.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../foxitlib.h" 7 #include "../../../foxitlib.h"
8 #include "fde_gedevice.h" 8 #include "fde_gedevice.h"
9 #include "fde_geobject.h" 9 #include "fde_geobject.h"
10 #include "fde_devbasic.h" 10 #include "fde_devbasic.h"
11 #ifndef _FDEPLUS 11 #ifndef _FDEPLUS
12 #ifdef _cplusplus 12 #ifdef _cplusplus
13 exten "C" { 13 exten "C" {
14 #endif 14 #endif
15 FX_BOOL FDE_GetStockHatchMask(FX_INT32 iHatchStyle, CFX_DIBitmap & hatchMask ) 15 FX_BOOL FDE_GetStockHatchMask(int32_t iHatchStyle, CFX_DIBitmap & hatchMask)
16 { 16 {
17 FDE_LPCHATCHDATA pData = FDE_DEVGetHatchData(iHatchStyle); 17 FDE_LPCHATCHDATA pData = FDE_DEVGetHatchData(iHatchStyle);
18 if (!pData) { 18 if (!pData) {
19 return FALSE; 19 return FALSE;
20 } 20 }
21 hatchMask.Create(pData->iWidth, pData->iHeight, FXDIB_1bppMask); 21 hatchMask.Create(pData->iWidth, pData->iHeight, FXDIB_1bppMask);
22 FXSYS_memcpy(hatchMask.GetBuffer(), pData->MaskBits, hatchMask.GetPitch( ) * pData->iHeight); 22 FXSYS_memcpy(hatchMask.GetBuffer(), pData->MaskBits, hatchMask.GetPitch( ) * pData->iHeight);
23 return TRUE; 23 return TRUE;
24 } 24 }
25 #ifdef _cplusplus 25 #ifdef _cplusplus
(...skipping 30 matching lines...) Expand all
56 } 56 }
57 CFDE_FxgeDevice::~CFDE_FxgeDevice() 57 CFDE_FxgeDevice::~CFDE_FxgeDevice()
58 { 58 {
59 if (m_pCharPos != NULL) { 59 if (m_pCharPos != NULL) {
60 FDE_Free(m_pCharPos); 60 FDE_Free(m_pCharPos);
61 } 61 }
62 if (m_bOwnerDevice && m_pDevice) { 62 if (m_bOwnerDevice && m_pDevice) {
63 delete m_pDevice; 63 delete m_pDevice;
64 } 64 }
65 } 65 }
66 FX_INT32 CFDE_FxgeDevice::GetWidth() const 66 int32_t CFDE_FxgeDevice::GetWidth() const
67 { 67 {
68 return m_pDevice->GetWidth(); 68 return m_pDevice->GetWidth();
69 } 69 }
70 FX_INT32 CFDE_FxgeDevice::GetHeight() const 70 int32_t CFDE_FxgeDevice::GetHeight() const
71 { 71 {
72 return m_pDevice->GetHeight(); 72 return m_pDevice->GetHeight();
73 } 73 }
74 FDE_HDEVICESTATE CFDE_FxgeDevice::SaveState() 74 FDE_HDEVICESTATE CFDE_FxgeDevice::SaveState()
75 { 75 {
76 m_pDevice->SaveState(); 76 m_pDevice->SaveState();
77 return NULL; 77 return NULL;
78 } 78 }
79 void CFDE_FxgeDevice::RestoreState(FDE_HDEVICESTATE hState) 79 void CFDE_FxgeDevice::RestoreState(FDE_HDEVICESTATE hState)
80 { 80 {
81 m_pDevice->RestoreState(); 81 m_pDevice->RestoreState();
82 const FX_RECT &rt = m_pDevice->GetClipBox(); 82 const FX_RECT &rt = m_pDevice->GetClipBox();
83 m_rtClip.Set((FX_FLOAT)rt.left, (FX_FLOAT)rt.top, (FX_FLOAT)rt.Width(), (FX_ FLOAT)rt.Height()); 83 m_rtClip.Set((FX_FLOAT)rt.left, (FX_FLOAT)rt.top, (FX_FLOAT)rt.Width(), (FX_ FLOAT)rt.Height());
84 } 84 }
85 FX_BOOL CFDE_FxgeDevice::SetClipRect(const CFX_RectF &rtClip) 85 FX_BOOL CFDE_FxgeDevice::SetClipRect(const CFX_RectF &rtClip)
86 { 86 {
87 m_rtClip = rtClip; 87 m_rtClip = rtClip;
88 FX_RECT rt((FX_INT32)FXSYS_floor(rtClip.left), (FX_INT32)FXSYS_floor(rtClip. top), 88 FX_RECT rt((int32_t)FXSYS_floor(rtClip.left), (int32_t)FXSYS_floor(rtClip.to p),
89 (FX_INT32)FXSYS_ceil(rtClip.right()), (FX_INT32)FXSYS_ceil(rtClip .bottom())); 89 (int32_t)FXSYS_ceil(rtClip.right()), (int32_t)FXSYS_ceil(rtClip.b ottom()));
90 return m_pDevice->SetClip_Rect(&rt); 90 return m_pDevice->SetClip_Rect(&rt);
91 } 91 }
92 const CFX_RectF& CFDE_FxgeDevice::GetClipRect() 92 const CFX_RectF& CFDE_FxgeDevice::GetClipRect()
93 { 93 {
94 return m_rtClip; 94 return m_rtClip;
95 } 95 }
96 FX_BOOL CFDE_FxgeDevice::SetClipPath(const IFDE_Path *pClip) 96 FX_BOOL CFDE_FxgeDevice::SetClipPath(const IFDE_Path *pClip)
97 { 97 {
98 return FALSE; 98 return FALSE;
99 } 99 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 dib2fxdev.f = dstRect.bottom(); 133 dib2fxdev.f = dstRect.bottom();
134 if (pDevMatrix) { 134 if (pDevMatrix) {
135 dib2fxdev.Concat(*pDevMatrix); 135 dib2fxdev.Concat(*pDevMatrix);
136 } 136 }
137 FX_LPVOID handle = NULL; 137 FX_LPVOID handle = NULL;
138 m_pDevice->StartDIBits(pDib, 255, 0, (const CFX_AffineMatrix*)&dib2fxdev, 0, handle); 138 m_pDevice->StartDIBits(pDib, 255, 0, (const CFX_AffineMatrix*)&dib2fxdev, 0, handle);
139 while (m_pDevice->ContinueDIBits(handle, NULL)) { } 139 while (m_pDevice->ContinueDIBits(handle, NULL)) { }
140 m_pDevice->CancelDIBits(handle); 140 m_pDevice->CancelDIBits(handle);
141 return handle != NULL; 141 return handle != NULL;
142 } 142 }
143 FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush *pBrush, IFX_Font *pFont, const F XTEXT_CHARPOS *pCharPos, FX_INT32 iCount, FX_FLOAT fFontSize, const CFX_Matrix * pMatrix) 143 FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush *pBrush, IFX_Font *pFont, const F XTEXT_CHARPOS *pCharPos, int32_t iCount, FX_FLOAT fFontSize, const CFX_Matrix *p Matrix)
144 { 144 {
145 FXSYS_assert(pBrush != NULL && pFont != NULL && pCharPos != NULL && iCount > 0); 145 FXSYS_assert(pBrush != NULL && pFont != NULL && pCharPos != NULL && iCount > 0);
146 CFX_FontCache *pCache = CFX_GEModule::Get()->GetFontCache(); 146 CFX_FontCache *pCache = CFX_GEModule::Get()->GetFontCache();
147 CFX_Font *pFxFont = (CFX_Font*)pFont->GetDevFont(); 147 CFX_Font *pFxFont = (CFX_Font*)pFont->GetDevFont();
148 switch (pBrush->GetType()) { 148 switch (pBrush->GetType()) {
149 case FDE_BRUSHTYPE_Solid: { 149 case FDE_BRUSHTYPE_Solid: {
150 FX_ARGB argb = ((IFDE_SolidBrush*)pBrush)->GetColor(); 150 FX_ARGB argb = ((IFDE_SolidBrush*)pBrush)->GetColor();
151 if ((pFont->GetFontStyles() & FX_FONTSTYLE_Italic) != 0 && !pFxF ont->IsItalic()) { 151 if ((pFont->GetFontStyles() & FX_FONTSTYLE_Italic) != 0 && !pFxF ont->IsItalic()) {
152 FXTEXT_CHARPOS *pCP = (FXTEXT_CHARPOS*)pCharPos; 152 FXTEXT_CHARPOS *pCP = (FXTEXT_CHARPOS*)pCharPos;
153 FX_FLOAT *pAM; 153 FX_FLOAT *pAM;
154 for (FX_INT32 i = 0; i < iCount; ++i) { 154 for (int32_t i = 0; i < iCount; ++i) {
155 static const FX_FLOAT mc = 0.267949f; 155 static const FX_FLOAT mc = 0.267949f;
156 pAM = pCP->m_AdjustMatrix; 156 pAM = pCP->m_AdjustMatrix;
157 pAM[2] = mc * pAM[0] + pAM[2]; 157 pAM[2] = mc * pAM[0] + pAM[2];
158 pAM[3] = mc * pAM[1] + pAM[3]; 158 pAM[3] = mc * pAM[1] + pAM[3];
159 pCP ++; 159 pCP ++;
160 } 160 }
161 } 161 }
162 FXTEXT_CHARPOS *pCP = (FXTEXT_CHARPOS*)pCharPos; 162 FXTEXT_CHARPOS *pCP = (FXTEXT_CHARPOS*)pCharPos;
163 IFX_Font *pCurFont = NULL; 163 IFX_Font *pCurFont = NULL;
164 IFX_Font *pSTFont = NULL; 164 IFX_Font *pSTFont = NULL;
165 FXTEXT_CHARPOS *pCurCP = NULL; 165 FXTEXT_CHARPOS *pCurCP = NULL;
166 FX_INT32 iCurCount = 0; 166 int32_t iCurCount = 0;
167 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 167 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
168 FX_DWORD dwFontStyle = pFont->GetFontStyles(); 168 FX_DWORD dwFontStyle = pFont->GetFontStyles();
169 CFX_Font FxFont; 169 CFX_Font FxFont;
170 CFX_SubstFont SubstFxFont; 170 CFX_SubstFont SubstFxFont;
171 FxFont.m_pSubstFont = &SubstFxFont; 171 FxFont.m_pSubstFont = &SubstFxFont;
172 SubstFxFont.m_Weight = dwFontStyle & FX_FONTSTYLE_Bold ? 700 : 4 00; 172 SubstFxFont.m_Weight = dwFontStyle & FX_FONTSTYLE_Bold ? 700 : 4 00;
173 SubstFxFont.m_WeightCJK = SubstFxFont.m_Weight; 173 SubstFxFont.m_WeightCJK = SubstFxFont.m_Weight;
174 SubstFxFont.m_ItalicAngle = dwFontStyle & FX_FONTSTYLE_Italic ? -12 : 0; 174 SubstFxFont.m_ItalicAngle = dwFontStyle & FX_FONTSTYLE_Italic ? -12 : 0;
175 SubstFxFont.m_bItlicCJK = dwFontStyle & FX_FONTSTYLE_Italic ? TR UE : FALSE; 175 SubstFxFont.m_bItlicCJK = dwFontStyle & FX_FONTSTYLE_Italic ? TR UE : FALSE;
176 #endif 176 #endif
177 for (FX_INT32 i = 0; i < iCount; ++i) { 177 for (int32_t i = 0; i < iCount; ++i) {
178 pSTFont = pFont->GetSubstFont((FX_INT32)pCP->m_GlyphIndex); 178 pSTFont = pFont->GetSubstFont((int32_t)pCP->m_GlyphIndex);
179 pCP->m_GlyphIndex &= 0x00FFFFFF; 179 pCP->m_GlyphIndex &= 0x00FFFFFF;
180 pCP->m_bFontStyle = FALSE; 180 pCP->m_bFontStyle = FALSE;
181 if (pCurFont != pSTFont) { 181 if (pCurFont != pSTFont) {
182 if (pCurFont != NULL) { 182 if (pCurFont != NULL) {
183 pFxFont = (CFX_Font*)pCurFont->GetDevFont(); 183 pFxFont = (CFX_Font*)pCurFont->GetDevFont();
184 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ 184 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
185 FxFont.m_Face = pFxFont->m_Face; 185 FxFont.m_Face = pFxFont->m_Face;
186 m_pDevice->DrawNormalText(iCurCount, pCurCP, &FxFont , pCache, -fFontSize, (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE); 186 m_pDevice->DrawNormalText(iCurCount, pCurCP, &FxFont , pCache, -fFontSize, (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE);
187 #else 187 #else
188 m_pDevice->DrawNormalText(iCurCount, pCurCP, pFxFont , pCache, -fFontSize, (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE); 188 m_pDevice->DrawNormalText(iCurCount, pCurCP, pFxFont , pCache, -fFontSize, (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 dashArray.Add(1); 333 dashArray.Add(1);
334 dashArray.Add(1); 334 dashArray.Add(1);
335 dashArray.Add(1); 335 dashArray.Add(1);
336 dashArray.Add(1); 336 dashArray.Add(1);
337 dashArray.Add(1); 337 dashArray.Add(1);
338 break; 338 break;
339 case FDE_DASHSTYLE_Customized: 339 case FDE_DASHSTYLE_Customized:
340 pPen->GetDashArray(dashArray); 340 pPen->GetDashArray(dashArray);
341 break; 341 break;
342 } 342 }
343 FX_INT32 iDashCount = dashArray.GetSize(); 343 int32_t iDashCount = dashArray.GetSize();
344 if (iDashCount > 0) { 344 if (iDashCount > 0) {
345 graphState.SetDashCount(iDashCount); 345 graphState.SetDashCount(iDashCount);
346 for (FX_INT32 i = 0; i < iDashCount; ++i) { 346 for (int32_t i = 0; i < iDashCount; ++i) {
347 graphState.m_DashArray[i] = dashArray[i] * fPenWidth; 347 graphState.m_DashArray[i] = dashArray[i] * fPenWidth;
348 } 348 }
349 } 349 }
350 return TRUE; 350 return TRUE;
351 } 351 }
352 typedef FX_BOOL (CFDE_FxgeDevice::*pfFillPath)(IFDE_Brush *pBrush, const CFX_Pat hData *pPath, const CFX_Matrix *pMatrix); 352 typedef FX_BOOL (CFDE_FxgeDevice::*pfFillPath)(IFDE_Brush *pBrush, const CFX_Pat hData *pPath, const CFX_Matrix *pMatrix);
353 static const pfFillPath gs_FillPath[] = { 353 static const pfFillPath gs_FillPath[] = {
354 &CFDE_FxgeDevice::FillSolidPath, 354 &CFDE_FxgeDevice::FillSolidPath,
355 &CFDE_FxgeDevice::FillHatchPath, 355 &CFDE_FxgeDevice::FillHatchPath,
356 &CFDE_FxgeDevice::FillTexturePath, 356 &CFDE_FxgeDevice::FillTexturePath,
357 &CFDE_FxgeDevice::FillLinearGradientPath, 357 &CFDE_FxgeDevice::FillLinearGradientPath,
358 }; 358 };
359 FX_BOOL CFDE_FxgeDevice::FillPath(IFDE_Brush *pBrush, const IFDE_Path *pPath, co nst CFX_Matrix *pMatrix) 359 FX_BOOL CFDE_FxgeDevice::FillPath(IFDE_Brush *pBrush, const IFDE_Path *pPath, co nst CFX_Matrix *pMatrix)
360 { 360 {
361 CFDE_Path *pGePath = (CFDE_Path*)pPath; 361 CFDE_Path *pGePath = (CFDE_Path*)pPath;
362 if (pGePath == NULL) { 362 if (pGePath == NULL) {
363 return FALSE; 363 return FALSE;
364 } 364 }
365 if (pBrush == NULL) { 365 if (pBrush == NULL) {
366 return FALSE; 366 return FALSE;
367 } 367 }
368 FX_INT32 iType = pBrush->GetType(); 368 int32_t iType = pBrush->GetType();
369 if (iType < 0 || iType > FDE_BRUSHTYPE_MAX) { 369 if (iType < 0 || iType > FDE_BRUSHTYPE_MAX) {
370 return FALSE; 370 return FALSE;
371 } 371 }
372 return (this->*gs_FillPath[iType])(pBrush, &pGePath->m_Path, pMatrix); 372 return (this->*gs_FillPath[iType])(pBrush, &pGePath->m_Path, pMatrix);
373 } 373 }
374 FX_BOOL CFDE_FxgeDevice::FillSolidPath(IFDE_Brush *pBrush, const CFX_PathData *p Path, const CFX_Matrix *pMatrix) 374 FX_BOOL CFDE_FxgeDevice::FillSolidPath(IFDE_Brush *pBrush, const CFX_PathData *p Path, const CFX_Matrix *pMatrix)
375 { 375 {
376 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Solid); 376 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Solid);
377 IFDE_SolidBrush *pSolidBrush = (IFDE_SolidBrush*)pBrush; 377 IFDE_SolidBrush *pSolidBrush = (IFDE_SolidBrush*)pBrush;
378 return m_pDevice->DrawPath(pPath, (const CFX_AffineMatrix*)pMatrix, NULL, pS olidBrush->GetColor(), 0, FXFILL_WINDING); 378 return m_pDevice->DrawPath(pPath, (const CFX_AffineMatrix*)pMatrix, NULL, pS olidBrush->GetColor(), 0, FXFILL_WINDING);
379 } 379 }
380 FX_BOOL CFDE_FxgeDevice::FillHatchPath(IFDE_Brush *pBrush, const CFX_PathData *p Path, const CFX_Matrix *pMatrix) 380 FX_BOOL CFDE_FxgeDevice::FillHatchPath(IFDE_Brush *pBrush, const CFX_PathData *p Path, const CFX_Matrix *pMatrix)
381 { 381 {
382 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Hatch); 382 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Hatch);
383 IFDE_HatchBrush *pHatchBrush = (IFDE_HatchBrush*)pBrush; 383 IFDE_HatchBrush *pHatchBrush = (IFDE_HatchBrush*)pBrush;
384 FX_INT32 iStyle = pHatchBrush->GetHatchStyle(); 384 int32_t iStyle = pHatchBrush->GetHatchStyle();
385 if (iStyle < FDE_HATCHSTYLE_Min || iStyle > FDE_HATCHSTYLE_Max) { 385 if (iStyle < FDE_HATCHSTYLE_Min || iStyle > FDE_HATCHSTYLE_Max) {
386 return FALSE; 386 return FALSE;
387 } 387 }
388 CFX_DIBitmap mask; 388 CFX_DIBitmap mask;
389 if (!FDE_GetStockHatchMask(iStyle, mask)) { 389 if (!FDE_GetStockHatchMask(iStyle, mask)) {
390 return FALSE; 390 return FALSE;
391 } 391 }
392 FX_ARGB dwForeColor = pHatchBrush->GetColor(TRUE); 392 FX_ARGB dwForeColor = pHatchBrush->GetColor(TRUE);
393 FX_ARGB dwBackColor = pHatchBrush->GetColor(FALSE); 393 FX_ARGB dwBackColor = pHatchBrush->GetColor(FALSE);
394 CFX_FloatRect rectf = pPath->GetBoundingBox(); 394 CFX_FloatRect rectf = pPath->GetBoundingBox();
395 if (pMatrix) { 395 if (pMatrix) {
396 rectf.Transform((const CFX_AffineMatrix*)pMatrix); 396 rectf.Transform((const CFX_AffineMatrix*)pMatrix);
397 } 397 }
398 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), 398 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top),
399 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); 399 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom));
400 m_pDevice->SaveState(); 400 m_pDevice->SaveState();
401 m_pDevice->StartRendering(); 401 m_pDevice->StartRendering();
402 m_pDevice->SetClip_PathFill(pPath, (const CFX_AffineMatrix*)pMatrix, FXFILL_ WINDING); 402 m_pDevice->SetClip_PathFill(pPath, (const CFX_AffineMatrix*)pMatrix, FXFILL_ WINDING);
403 m_pDevice->FillRect(&rect, dwBackColor); 403 m_pDevice->FillRect(&rect, dwBackColor);
404 for (FX_INT32 j = rect.bottom; j < rect.top; j += mask.GetHeight()) 404 for (int32_t j = rect.bottom; j < rect.top; j += mask.GetHeight())
405 for (FX_INT32 i = rect.left; i < rect.right; i += mask.GetWidth()) { 405 for (int32_t i = rect.left; i < rect.right; i += mask.GetWidth()) {
406 m_pDevice->SetBitMask(&mask, i, j, dwForeColor); 406 m_pDevice->SetBitMask(&mask, i, j, dwForeColor);
407 } 407 }
408 m_pDevice->EndRendering(); 408 m_pDevice->EndRendering();
409 m_pDevice->RestoreState(); 409 m_pDevice->RestoreState();
410 return TRUE; 410 return TRUE;
411 } 411 }
412 FX_BOOL CFDE_FxgeDevice::FillTexturePath(IFDE_Brush *pBrush, const CFX_PathData *pPath, const CFX_Matrix *pMatrix) 412 FX_BOOL CFDE_FxgeDevice::FillTexturePath(IFDE_Brush *pBrush, const CFX_PathData *pPath, const CFX_Matrix *pMatrix)
413 { 413 {
414 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Texture); 414 FXSYS_assert(pPath && pBrush && pBrush->GetType() == FDE_BRUSHTYPE_Texture);
415 IFDE_TextureBrush *pTextureBrush = (IFDE_TextureBrush*)pBrush; 415 IFDE_TextureBrush *pTextureBrush = (IFDE_TextureBrush*)pBrush;
416 IFDE_Image *pImage = (IFDE_Image*)pTextureBrush->GetImage(); 416 IFDE_Image *pImage = (IFDE_Image*)pTextureBrush->GetImage();
417 if (pImage == NULL) { 417 if (pImage == NULL) {
418 return FALSE; 418 return FALSE;
419 } 419 }
420 CFX_Size size; 420 CFX_Size size;
421 size.Set(pImage->GetImageWidth(), pImage->GetImageHeight()); 421 size.Set(pImage->GetImageWidth(), pImage->GetImageHeight());
422 CFX_DIBitmap bmp; 422 CFX_DIBitmap bmp;
423 bmp.Create(size.x, size.y, FXDIB_Argb); 423 bmp.Create(size.x, size.y, FXDIB_Argb);
424 if (!pImage->StartLoadImage(&bmp, 0, 0, size.x, size.y, 0, 0, size.x, size.y )) { 424 if (!pImage->StartLoadImage(&bmp, 0, 0, size.x, size.y, 0, 0, size.x, size.y )) {
425 return FALSE; 425 return FALSE;
426 } 426 }
427 if (pImage->DoLoadImage() < 100) { 427 if (pImage->DoLoadImage() < 100) {
428 return FALSE; 428 return FALSE;
429 } 429 }
430 pImage->StopLoadImage(); 430 pImage->StopLoadImage();
431 return WrapTexture(pTextureBrush->GetWrapMode(), &bmp, pPath, pMatrix); 431 return WrapTexture(pTextureBrush->GetWrapMode(), &bmp, pPath, pMatrix);
432 } 432 }
433 FX_BOOL CFDE_FxgeDevice::WrapTexture(FX_INT32 iWrapMode, const CFX_DIBitmap *pBi tmap, const CFX_PathData *pPath, const CFX_Matrix *pMatrix) 433 FX_BOOL CFDE_FxgeDevice::WrapTexture(int32_t iWrapMode, const CFX_DIBitmap *pBit map, const CFX_PathData *pPath, const CFX_Matrix *pMatrix)
434 { 434 {
435 CFX_FloatRect rectf = pPath->GetBoundingBox(); 435 CFX_FloatRect rectf = pPath->GetBoundingBox();
436 if (pMatrix) { 436 if (pMatrix) {
437 rectf.Transform((const CFX_AffineMatrix*)pMatrix); 437 rectf.Transform((const CFX_AffineMatrix*)pMatrix);
438 } 438 }
439 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top), 439 FX_RECT rect(FXSYS_round(rectf.left), FXSYS_round(rectf.top),
440 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom)); 440 FXSYS_round(rectf.right), FXSYS_round(rectf.bottom));
441 rect.Normalize(); 441 rect.Normalize();
442 if (rect.IsEmpty()) { 442 if (rect.IsEmpty()) {
443 return FALSE; 443 return FALSE;
444 } 444 }
445 m_pDevice->SaveState(); 445 m_pDevice->SaveState();
446 m_pDevice->StartRendering(); 446 m_pDevice->StartRendering();
447 m_pDevice->SetClip_PathFill(pPath, (const CFX_AffineMatrix*)pMatrix, FXFILL_ WINDING); 447 m_pDevice->SetClip_PathFill(pPath, (const CFX_AffineMatrix*)pMatrix, FXFILL_ WINDING);
448 switch (iWrapMode) { 448 switch (iWrapMode) {
449 case FDE_WRAPMODE_Tile: 449 case FDE_WRAPMODE_Tile:
450 case FDE_WRAPMODE_TileFlipX: 450 case FDE_WRAPMODE_TileFlipX:
451 case FDE_WRAPMODE_TileFlipY: 451 case FDE_WRAPMODE_TileFlipY:
452 case FDE_WRAPMODE_TileFlipXY: { 452 case FDE_WRAPMODE_TileFlipXY: {
453 FX_BOOL bFlipX = iWrapMode == FDE_WRAPMODE_TileFlipXY || iWrapMo de == FDE_WRAPMODE_TileFlipX; 453 FX_BOOL bFlipX = iWrapMode == FDE_WRAPMODE_TileFlipXY || iWrapMo de == FDE_WRAPMODE_TileFlipX;
454 FX_BOOL bFlipY = iWrapMode == FDE_WRAPMODE_TileFlipXY || iWrapMo de == FDE_WRAPMODE_TileFlipY; 454 FX_BOOL bFlipY = iWrapMode == FDE_WRAPMODE_TileFlipXY || iWrapMo de == FDE_WRAPMODE_TileFlipY;
455 const CFX_DIBitmap *pFlip[2][2]; 455 const CFX_DIBitmap *pFlip[2][2];
456 pFlip[0][0] = pBitmap; 456 pFlip[0][0] = pBitmap;
457 pFlip[0][1] = bFlipX ? pBitmap->FlipImage(TRUE, FALSE) : pBitmap ; 457 pFlip[0][1] = bFlipX ? pBitmap->FlipImage(TRUE, FALSE) : pBitmap ;
458 pFlip[1][0] = bFlipY ? pBitmap->FlipImage(FALSE, TRUE) : pBitmap ; 458 pFlip[1][0] = bFlipY ? pBitmap->FlipImage(FALSE, TRUE) : pBitmap ;
459 pFlip[1][1] = (bFlipX || bFlipY) ? pBitmap->FlipImage(bFlipX, bF lipY) : pBitmap; 459 pFlip[1][1] = (bFlipX || bFlipY) ? pBitmap->FlipImage(bFlipX, bF lipY) : pBitmap;
460 FX_INT32 iCounterY = 0; 460 int32_t iCounterY = 0;
461 for (FX_INT32 j = rect.top; j < rect.bottom; j += pBitmap->GetHe ight()) { 461 for (int32_t j = rect.top; j < rect.bottom; j += pBitmap->GetHei ght()) {
462 FX_INT32 indexY = iCounterY++ % 2; 462 int32_t indexY = iCounterY++ % 2;
463 FX_INT32 iCounterX = 0; 463 int32_t iCounterX = 0;
464 for (FX_INT32 i = rect.left; i < rect.right; i += pBitmap->G etWidth()) { 464 for (int32_t i = rect.left; i < rect.right; i += pBitmap->Ge tWidth()) {
465 FX_INT32 indexX = iCounterX++ % 2; 465 int32_t indexX = iCounterX++ % 2;
466 m_pDevice->SetDIBits(pFlip[indexY][indexX], i, j); 466 m_pDevice->SetDIBits(pFlip[indexY][indexX], i, j);
467 } 467 }
468 } 468 }
469 if (pFlip[0][1] != pFlip[0][0]) { 469 if (pFlip[0][1] != pFlip[0][0]) {
470 delete pFlip[0][1]; 470 delete pFlip[0][1];
471 } 471 }
472 if (pFlip[1][0] != pFlip[0][0]) { 472 if (pFlip[1][0] != pFlip[0][0]) {
473 delete pFlip[1][0]; 473 delete pFlip[1][0];
474 } 474 }
475 if (pFlip[1][1] != pFlip[0][0]) { 475 if (pFlip[1][1] != pFlip[0][0]) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 FX_FLOAT b0 = FXARGB_B(cr0); 509 FX_FLOAT b0 = FXARGB_B(cr0);
510 FX_FLOAT da = (FXARGB_A(cr1) - a0) / fSteps; 510 FX_FLOAT da = (FXARGB_A(cr1) - a0) / fSteps;
511 FX_FLOAT dr = (FXARGB_R(cr1) - r0) / fSteps; 511 FX_FLOAT dr = (FXARGB_R(cr1) - r0) / fSteps;
512 FX_FLOAT dg = (FXARGB_G(cr1) - g0) / fSteps; 512 FX_FLOAT dg = (FXARGB_G(cr1) - g0) / fSteps;
513 FX_FLOAT db = (FXARGB_B(cr1) - b0) / fSteps; 513 FX_FLOAT db = (FXARGB_B(cr1) - b0) / fSteps;
514 CFX_DIBitmap bmp; 514 CFX_DIBitmap bmp;
515 bmp.Create(FXSYS_round(FXSYS_fabs(fDiagonal.x)), FXSYS_round(FXSYS_fabs(fDia gonal.y)), FXDIB_Argb); 515 bmp.Create(FXSYS_round(FXSYS_fabs(fDiagonal.x)), FXSYS_round(FXSYS_fabs(fDia gonal.y)), FXDIB_Argb);
516 CFX_FxgeDevice dev; 516 CFX_FxgeDevice dev;
517 dev.Attach(&bmp); 517 dev.Attach(&bmp);
518 pt1 = pt0; 518 pt1 = pt0;
519 FX_INT32 iSteps = FXSYS_round(FXSYS_ceil(fSteps)); 519 int32_t iSteps = FXSYS_round(FXSYS_ceil(fSteps));
520 while (--iSteps >= 0) { 520 while (--iSteps >= 0) {
521 cr0 = ArgbEncode(FXSYS_round(a0), FXSYS_round(r0), FXSYS_round(g0), FXSY S_round(b0)); 521 cr0 = ArgbEncode(FXSYS_round(a0), FXSYS_round(r0), FXSYS_round(g0), FXSY S_round(b0));
522 dev.DrawCosmeticLine(pt0.x, pt0.y, pt1.x, pt1.y, cr0); 522 dev.DrawCosmeticLine(pt0.x, pt0.y, pt1.x, pt1.y, cr0);
523 pt1.x += dx; 523 pt1.x += dx;
524 pt0.y += dy; 524 pt0.y += dy;
525 a0 += da; 525 a0 += da;
526 r0 += dr; 526 r0 += dr;
527 g0 += dg; 527 g0 += dg;
528 b0 += db; 528 b0 += db;
529 } 529 }
530 return WrapTexture(pLinearBrush->GetWrapMode(), &bmp, pPath, pMatrix); 530 return WrapTexture(pLinearBrush->GetWrapMode(), &bmp, pPath, pMatrix);
531 } 531 }
532 #endif 532 #endif
OLDNEW
« no previous file with comments | « xfa/src/fdp/src/fde/fde_gedevice.h ('k') | xfa/src/fdp/src/fde/fde_geobject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698