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

Side by Side Diff: core/src/fxge/win32/fx_win32_gdipext.cpp

Issue 1252613002: FX_BOOL considered harmful. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Manual edits. Created 5 years, 5 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 | « core/src/fxge/win32/fx_win32_dwrite.cpp ('k') | core/src/fxge/win32/fx_win32_print.cpp » ('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 "../../../include/fxge/fx_ge.h" 7 #include "../../../include/fxge/fx_ge.h"
8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ 8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_
9 #include <windows.h> 9 #include <windows.h>
10 #include <algorithm> 10 #include <algorithm>
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 #define CallFunc(funcname) ((FuncType_##funcname)GdiplusExt.m_Functions[FuncId_# #funcname]) 267 #define CallFunc(funcname) ((FuncType_##funcname)GdiplusExt.m_Functions[FuncId_# #funcname])
268 typedef HANDLE (__stdcall *FuncType_GdiAddFontMemResourceEx)(PVOID pbFont, DWO RD cbFont, PVOID pdv, DWORD *pcFonts); 268 typedef HANDLE (__stdcall *FuncType_GdiAddFontMemResourceEx)(PVOID pbFont, DWO RD cbFont, PVOID pdv, DWORD *pcFonts);
269 typedef BOOL (__stdcall *FuncType_GdiRemoveFontMemResourceEx)(HANDLE handle) ; 269 typedef BOOL (__stdcall *FuncType_GdiRemoveFontMemResourceEx)(HANDLE handle) ;
270 void* CGdiplusExt::GdiAddFontMemResourceEx(void *pFontdata, FX_DWORD size, void* pdv, FX_DWORD* num_face) 270 void* CGdiplusExt::GdiAddFontMemResourceEx(void *pFontdata, FX_DWORD size, void* pdv, FX_DWORD* num_face)
271 { 271 {
272 if (m_pGdiAddFontMemResourceEx) { 272 if (m_pGdiAddFontMemResourceEx) {
273 return ((FuncType_GdiAddFontMemResourceEx)m_pGdiAddFontMemResourceEx)((P VOID)pFontdata, (DWORD)size, (PVOID)pdv, (DWORD*)num_face); 273 return ((FuncType_GdiAddFontMemResourceEx)m_pGdiAddFontMemResourceEx)((P VOID)pFontdata, (DWORD)size, (PVOID)pdv, (DWORD*)num_face);
274 } 274 }
275 return NULL; 275 return NULL;
276 } 276 }
277 FX_BOOL CGdiplusExt::GdiRemoveFontMemResourceEx(void* handle) 277 bool CGdiplusExt::GdiRemoveFontMemResourceEx(void* handle)
278 { 278 {
279 if (m_pGdiRemoveFontMemResourseEx) { 279 if (m_pGdiRemoveFontMemResourseEx) {
280 return ((FuncType_GdiRemoveFontMemResourceEx)m_pGdiRemoveFontMemResourse Ex)((HANDLE)handle); 280 return ((FuncType_GdiRemoveFontMemResourceEx)m_pGdiRemoveFontMemResourse Ex)((HANDLE)handle);
281 } 281 }
282 return FALSE; 282 return false;
283 } 283 }
284 static GpBrush* _GdipCreateBrush(DWORD argb) 284 static GpBrush* _GdipCreateBrush(DWORD argb)
285 { 285 {
286 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 286 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
287 GpSolidFill* solidBrush = NULL; 287 GpSolidFill* solidBrush = NULL;
288 CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush); 288 CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush);
289 return solidBrush; 289 return solidBrush;
290 } 290 }
291 static CFX_DIBitmap* _StretchMonoToGray(int dest_width, int dest_height, 291 static CFX_DIBitmap* _StretchMonoToGray(int dest_width, int dest_height,
292 const CFX_DIBitmap* pSource, FX_RECT* pC lipRect) 292 const CFX_DIBitmap* pSource, FX_RECT* pC lipRect)
293 { 293 {
294 FX_BOOL bFlipX = dest_width < 0; 294 bool bFlipX = dest_width < 0;
295 if (bFlipX) { 295 if (bFlipX) {
296 dest_width = -dest_width; 296 dest_width = -dest_width;
297 } 297 }
298 FX_BOOL bFlipY = dest_height < 0; 298 bool bFlipY = dest_height < 0;
299 if (bFlipY) { 299 if (bFlipY) {
300 dest_height = -dest_height; 300 dest_height = -dest_height;
301 } 301 }
302 int result_width = pClipRect->Width(); 302 int result_width = pClipRect->Width();
303 int result_height = pClipRect->Height(); 303 int result_height = pClipRect->Height();
304 int result_pitch = (result_width + 3) / 4 * 4; 304 int result_pitch = (result_width + 3) / 4 * 4;
305 CFX_DIBitmap* pStretched = new CFX_DIBitmap; 305 CFX_DIBitmap* pStretched = new CFX_DIBitmap;
306 if (!pStretched->Create(result_width, result_height, FXDIB_8bppRgb)) { 306 if (!pStretched->Create(result_width, result_height, FXDIB_8bppRgb)) {
307 delete pStretched; 307 delete pStretched;
308 return NULL; 308 return NULL;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 FX_RECT image_clip = image_rect; 375 FX_RECT image_clip = image_rect;
376 image_clip.Intersect(*pClipRect); 376 image_clip.Intersect(*pClipRect);
377 if (image_clip.IsEmpty()) { 377 if (image_clip.IsEmpty()) {
378 return; 378 return;
379 } 379 }
380 image_clip.Offset(-image_rect.left, -image_rect.top); 380 image_clip.Offset(-image_rect.left, -image_rect.top);
381 CFX_DIBitmap* pStretched = NULL; 381 CFX_DIBitmap* pStretched = NULL;
382 if (src_width * src_height > 10000) { 382 if (src_width * src_height > 10000) {
383 pStretched = _StretchMonoToGray(dest_width, dest_height, pBitmap, &i mage_clip); 383 pStretched = _StretchMonoToGray(dest_width, dest_height, pBitmap, &i mage_clip);
384 } else { 384 } else {
385 pStretched = pBitmap->StretchTo(dest_width, dest_height, FALSE, &ima ge_clip); 385 pStretched = pBitmap->StretchTo(dest_width, dest_height, false, &ima ge_clip);
386 } 386 }
387 GpBitmap* bitmap; 387 GpBitmap* bitmap;
388 CallFunc(GdipCreateBitmapFromScan0)(image_clip.Width(), image_clip.Heigh t(), 388 CallFunc(GdipCreateBitmapFromScan0)(image_clip.Width(), image_clip.Heigh t(),
389 (image_clip.Width() + 3) / 4 * 4, Pi xelFormat8bppIndexed, pStretched->GetBuffer(), &bitmap); 389 (image_clip.Width() + 3) / 4 * 4, Pi xelFormat8bppIndexed, pStretched->GetBuffer(), &bitmap);
390 int a, r, g, b; 390 int a, r, g, b;
391 ArgbDecode(argb, a, r, g, b); 391 ArgbDecode(argb, a, r, g, b);
392 UINT pal[258]; 392 UINT pal[258];
393 pal[0] = 0; 393 pal[0] = 0;
394 pal[1] = 256; 394 pal[1] = 256;
395 for (int i = 0; i < 256; i ++) { 395 for (int i = 0; i < 256; i ++) {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 return pCollection; 529 return pCollection;
530 } 530 }
531 CallFunc(GdipDeletePrivateFontCollection)(&pCollection); 531 CallFunc(GdipDeletePrivateFontCollection)(&pCollection);
532 return NULL; 532 return NULL;
533 } 533 }
534 void CGdiplusExt::DeleteMemFont(LPVOID pCollection) 534 void CGdiplusExt::DeleteMemFont(LPVOID pCollection)
535 { 535 {
536 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 536 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
537 CallFunc(GdipDeletePrivateFontCollection)((GpFontCollection**)&pCollection); 537 CallFunc(GdipDeletePrivateFontCollection)((GpFontCollection**)&pCollection);
538 } 538 }
539 FX_BOOL CGdiplusExt::GdipCreateBitmap(CFX_DIBitmap* pBitmap, void**bitmap) 539 bool CGdiplusExt::GdipCreateBitmap(CFX_DIBitmap* pBitmap, void**bitmap)
540 { 540 {
541 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 541 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
542 PixelFormat format; 542 PixelFormat format;
543 switch (pBitmap->GetFormat()) { 543 switch (pBitmap->GetFormat()) {
544 case FXDIB_Rgb: 544 case FXDIB_Rgb:
545 format = PixelFormat24bppRGB; 545 format = PixelFormat24bppRGB;
546 break; 546 break;
547 case FXDIB_Rgb32: 547 case FXDIB_Rgb32:
548 format = PixelFormat32bppRGB; 548 format = PixelFormat32bppRGB;
549 break; 549 break;
550 case FXDIB_Argb: 550 case FXDIB_Argb:
551 format = PixelFormat32bppARGB; 551 format = PixelFormat32bppARGB;
552 break; 552 break;
553 default: 553 default:
554 return FALSE; 554 return false;
555 } 555 }
556 GpStatus status = CallFunc(GdipCreateBitmapFromScan0)(pBitmap->GetWidth(), p Bitmap->GetHeight(), 556 GpStatus status = CallFunc(GdipCreateBitmapFromScan0)(pBitmap->GetWidth(), p Bitmap->GetHeight(),
557 pBitmap->GetPitch(), format, pBitmap->GetBuffer(), (GpBitm ap**)bitmap); 557 pBitmap->GetPitch(), format, pBitmap->GetBuffer(), (GpBitm ap**)bitmap);
558 if (status == Ok) { 558 if (status == Ok) {
559 return TRUE; 559 return true;
560 } 560 }
561 return FALSE; 561 return false;
562 } 562 }
563 FX_BOOL CGdiplusExt::GdipCreateFromImage(void* bitmap, void** graphics) 563 bool CGdiplusExt::GdipCreateFromImage(void* bitmap, void** graphics)
564 { 564 {
565 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 565 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
566 GpStatus status = CallFunc(GdipGetImageGraphicsContext)((GpBitmap*)bitmap, ( GpGraphics**)graphics); 566 GpStatus status = CallFunc(GdipGetImageGraphicsContext)((GpBitmap*)bitmap, ( GpGraphics**)graphics);
567 if (status == Ok) { 567 if (status == Ok) {
568 return TRUE; 568 return true;
569 } 569 }
570 return FALSE; 570 return false;
571 } 571 }
572 FX_BOOL CGdiplusExt::GdipCreateFontFamilyFromName(const FX_WCHAR* name, void* pF ontCollection, void**pFamily) 572 bool CGdiplusExt::GdipCreateFontFamilyFromName(const FX_WCHAR* name, void* pFont Collection, void**pFamily)
573 { 573 {
574 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 574 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
575 GpStatus status = CallFunc(GdipCreateFontFamilyFromName)((GDIPCONST WCHAR *) name, (GpFontCollection*)pFontCollection, (GpFontFamily**)pFamily); 575 GpStatus status = CallFunc(GdipCreateFontFamilyFromName)((GDIPCONST WCHAR *) name, (GpFontCollection*)pFontCollection, (GpFontFamily**)pFamily);
576 if (status == Ok) { 576 if (status == Ok) {
577 return TRUE; 577 return true;
578 } 578 }
579 return FALSE; 579 return false;
580 } 580 }
581 FX_BOOL CGdiplusExt::GdipCreateFontFromFamily(void* pFamily, FX_FLOAT font_size, int fontstyle, int flag, void** pFont) 581 bool CGdiplusExt::GdipCreateFontFromFamily(void* pFamily, FX_FLOAT font_size, in t fontstyle, int flag, void** pFont)
582 { 582 {
583 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 583 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
584 GpStatus status = CallFunc(GdipCreateFont)((GpFontFamily*)pFamily, font_size , fontstyle, Unit(flag), (GpFont**)pFont); 584 GpStatus status = CallFunc(GdipCreateFont)((GpFontFamily*)pFamily, font_size , fontstyle, Unit(flag), (GpFont**)pFont);
585 if (status == Ok) { 585 if (status == Ok) {
586 return TRUE; 586 return true;
587 } 587 }
588 return FALSE; 588 return false;
589 } 589 }
590 void CGdiplusExt::GdipGetFontSize(void *pFont, FX_FLOAT *size) 590 void CGdiplusExt::GdipGetFontSize(void *pFont, FX_FLOAT *size)
591 { 591 {
592 REAL get_size; 592 REAL get_size;
593 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 593 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
594 GpStatus status = CallFunc(GdipGetFontSize)((GpFont *)pFont, (REAL*)&get_siz e); 594 GpStatus status = CallFunc(GdipGetFontSize)((GpFont *)pFont, (REAL*)&get_siz e);
595 if (status == Ok) { 595 if (status == Ok) {
596 *size = (FX_FLOAT)get_size; 596 *size = (FX_FLOAT)get_size;
597 } else { 597 } else {
598 *size = 0; 598 *size = 0;
599 } 599 }
600 } 600 }
601 void CGdiplusExt::GdipSetTextRenderingHint(void* graphics, int mode) 601 void CGdiplusExt::GdipSetTextRenderingHint(void* graphics, int mode)
602 { 602 {
603 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 603 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
604 CallFunc(GdipSetTextRenderingHint)((GpGraphics*)graphics, (TextRenderingHint )mode); 604 CallFunc(GdipSetTextRenderingHint)((GpGraphics*)graphics, (TextRenderingHint )mode);
605 } 605 }
606 void CGdiplusExt::GdipSetPageUnit(void* graphics, FX_DWORD unit) 606 void CGdiplusExt::GdipSetPageUnit(void* graphics, FX_DWORD unit)
607 { 607 {
608 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 608 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
609 CallFunc(GdipSetPageUnit)((GpGraphics*)graphics, (GpUnit)unit); 609 CallFunc(GdipSetPageUnit)((GpGraphics*)graphics, (GpUnit)unit);
610 } 610 }
611 FX_BOOL CGdiplusExt::GdipDrawDriverString(void *graphics, unsigned short *text, int length, 611 bool CGdiplusExt::GdipDrawDriverString(void *graphics, unsigned short *text, in t length,
612 void *font, void* brush, void *positions, int flags, const void *matrix) 612 void *font, void* brush, void *positions, int flags, const void *matrix)
613 { 613 {
614 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 614 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
615 GpStatus status = CallFunc(GdipDrawDriverString)((GpGraphics*)graphics, (GDI PCONST UINT16 *)text, (INT)length, (GDIPCONST GpFont *)font, (GDIPCONST GpBrush* )brush, 615 GpStatus status = CallFunc(GdipDrawDriverString)((GpGraphics*)graphics, (GDI PCONST UINT16 *)text, (INT)length, (GDIPCONST GpFont *)font, (GDIPCONST GpBrush* )brush,
616 (GDIPCONST PointF *)positions, (INT)flags, (GDIPCONST GpMa trix *)matrix); 616 (GDIPCONST PointF *)positions, (INT)flags, (GDIPCONST GpMa trix *)matrix);
617 if (status == Ok) { 617 if (status == Ok) {
618 return TRUE; 618 return true;
619 } 619 }
620 return FALSE; 620 return false;
621 } 621 }
622 void CGdiplusExt::GdipCreateBrush(FX_DWORD fill_argb, void** pBrush) 622 void CGdiplusExt::GdipCreateBrush(FX_DWORD fill_argb, void** pBrush)
623 { 623 {
624 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 624 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
625 CallFunc(GdipCreateSolidFill)((ARGB)fill_argb, (GpSolidFill**)pBrush); 625 CallFunc(GdipCreateSolidFill)((ARGB)fill_argb, (GpSolidFill**)pBrush);
626 } 626 }
627 void CGdiplusExt::GdipDeleteBrush(void* pBrush) 627 void CGdiplusExt::GdipDeleteBrush(void* pBrush)
628 { 628 {
629 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 629 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
630 CallFunc(GdipDeleteBrush)((GpSolidFill*)pBrush); 630 CallFunc(GdipDeleteBrush)((GpSolidFill*)pBrush);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 void CGdiplusExt::GdipDisposeImage(void* bitmap) 677 void CGdiplusExt::GdipDisposeImage(void* bitmap)
678 { 678 {
679 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 679 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
680 CallFunc(GdipDisposeImage)((GpBitmap*)bitmap); 680 CallFunc(GdipDisposeImage)((GpBitmap*)bitmap);
681 } 681 }
682 void CGdiplusExt::GdipDeleteGraphics(void* graphics) 682 void CGdiplusExt::GdipDeleteGraphics(void* graphics)
683 { 683 {
684 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 684 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
685 CallFunc(GdipDeleteGraphics)((GpGraphics*)graphics); 685 CallFunc(GdipDeleteGraphics)((GpGraphics*)graphics);
686 } 686 }
687 FX_BOOL CGdiplusExt::StretchBitMask(HDC hDC, BOOL bMonoDevice, const CFX_DIBitma p* pBitmap, int dest_left, int dest_top, 687 bool CGdiplusExt::StretchBitMask(HDC hDC, BOOL bMonoDevice, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
688 int dest_width, int dest_height, FX_DWORD ar gb, const FX_RECT* pClipRect, int flags) 688 int dest_width, int dest_height, FX_DWORD ar gb, const FX_RECT* pClipRect, int flags)
689 { 689 {
690 ASSERT(pBitmap->GetBPP() == 1); 690 ASSERT(pBitmap->GetBPP() == 1);
691 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 691 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
692 GpGraphics* pGraphics = NULL; 692 GpGraphics* pGraphics = NULL;
693 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics); 693 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
694 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel); 694 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
695 if (flags & FXDIB_NOSMOOTH) { 695 if (flags & FXDIB_NOSMOOTH) {
696 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNe ighbor); 696 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNe ighbor);
697 } else { 697 } else {
698 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuali ty); 698 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuali ty);
699 } 699 }
700 OutputImageMask(pGraphics, bMonoDevice, pBitmap, dest_left, dest_top, dest_w idth, dest_height, argb, pClipRect); 700 OutputImageMask(pGraphics, bMonoDevice, pBitmap, dest_left, dest_top, dest_w idth, dest_height, argb, pClipRect);
701 CallFunc(GdipDeleteGraphics)(pGraphics); 701 CallFunc(GdipDeleteGraphics)(pGraphics);
702 return TRUE; 702 return true;
703 } 703 }
704 FX_BOOL CGdiplusExt::StretchDIBits(HDC hDC, const CFX_DIBitmap* pBitmap, int des t_left, int dest_top, 704 bool CGdiplusExt::StretchDIBits(HDC hDC, const CFX_DIBitmap* pBitmap, int dest_l eft, int dest_top,
705 int dest_width, int dest_height, const FX_REC T* pClipRect, int flags) 705 int dest_width, int dest_height, const FX_REC T* pClipRect, int flags)
706 { 706 {
707 GpGraphics* pGraphics; 707 GpGraphics* pGraphics;
708 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 708 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
709 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics); 709 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
710 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel); 710 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
711 if (flags & FXDIB_NOSMOOTH) { 711 if (flags & FXDIB_NOSMOOTH) {
712 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNe ighbor); 712 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNe ighbor);
713 } else if (pBitmap->GetWidth() > abs(dest_width) / 2 || pBitmap->GetHeight() > abs(dest_height) / 2) { 713 } else if (pBitmap->GetWidth() > abs(dest_width) / 2 || pBitmap->GetHeight() > abs(dest_height) / 2) {
714 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuali ty); 714 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuali ty);
715 } else { 715 } else {
716 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeBilinear) ; 716 CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeBilinear) ;
717 } 717 }
718 FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()); 718 FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
719 OutputImage(pGraphics, pBitmap, &src_rect, dest_left, dest_top, dest_width, dest_height); 719 OutputImage(pGraphics, pBitmap, &src_rect, dest_left, dest_top, dest_width, dest_height);
720 CallFunc(GdipDeleteGraphics)(pGraphics); 720 CallFunc(GdipDeleteGraphics)(pGraphics);
721 CallFunc(GdipDeleteGraphics)(pGraphics); 721 CallFunc(GdipDeleteGraphics)(pGraphics);
722 return TRUE; 722 return true;
723 } 723 }
724 static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState, const CFX_Af fineMatrix* pMatrix, DWORD argb, FX_BOOL bTextMode = FALSE) 724 static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState, const CFX_Af fineMatrix* pMatrix, DWORD argb, bool bTextMode = false)
725 { 725 {
726 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 726 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
727 FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f; 727 FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f;
728 if (!bTextMode) { 728 if (!bTextMode) {
729 FX_FLOAT unit = pMatrix == NULL ? 1.0f : FXSYS_Div(1.0f, (pMatrix->GetXU nit() + pMatrix->GetYUnit()) / 2); 729 FX_FLOAT unit = pMatrix == NULL ? 1.0f : FXSYS_Div(1.0f, (pMatrix->GetXU nit() + pMatrix->GetYUnit()) / 2);
730 if (width < unit) { 730 if (width < unit) {
731 width = unit; 731 width = unit;
732 } 732 }
733 } 733 }
734 GpPen* pPen = NULL; 734 GpPen* pPen = NULL;
735 CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen); 735 CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen);
736 LineCap lineCap; 736 LineCap lineCap;
737 DashCap dashCap = DashCapFlat; 737 DashCap dashCap = DashCapFlat;
738 FX_BOOL bDashExtend = FALSE; 738 bool bDashExtend = false;
739 switch(pGraphState->m_LineCap) { 739 switch(pGraphState->m_LineCap) {
740 case CFX_GraphStateData::LineCapButt: 740 case CFX_GraphStateData::LineCapButt:
741 lineCap = LineCapFlat; 741 lineCap = LineCapFlat;
742 break; 742 break;
743 case CFX_GraphStateData::LineCapRound: 743 case CFX_GraphStateData::LineCapRound:
744 lineCap = LineCapRound; 744 lineCap = LineCapRound;
745 dashCap = DashCapRound; 745 dashCap = DashCapRound;
746 bDashExtend = TRUE; 746 bDashExtend = true;
747 break; 747 break;
748 case CFX_GraphStateData::LineCapSquare: 748 case CFX_GraphStateData::LineCapSquare:
749 lineCap = LineCapSquare; 749 lineCap = LineCapSquare;
750 bDashExtend = TRUE; 750 bDashExtend = true;
751 break; 751 break;
752 } 752 }
753 CallFunc(GdipSetPenLineCap197819)(pPen, lineCap, lineCap, dashCap); 753 CallFunc(GdipSetPenLineCap197819)(pPen, lineCap, lineCap, dashCap);
754 LineJoin lineJoin; 754 LineJoin lineJoin;
755 switch(pGraphState->m_LineJoin) { 755 switch(pGraphState->m_LineJoin) {
756 case CFX_GraphStateData::LineJoinMiter: 756 case CFX_GraphStateData::LineJoinMiter:
757 lineJoin = LineJoinMiterClipped; 757 lineJoin = LineJoinMiterClipped;
758 break; 758 break;
759 case CFX_GraphStateData::LineJoinRound: 759 case CFX_GraphStateData::LineJoinRound:
760 lineJoin = LineJoinRound; 760 lineJoin = LineJoinRound;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 if (pMatrix) { 832 if (pMatrix) {
833 pMatrix->Transform(x1, y1); 833 pMatrix->Transform(x1, y1);
834 pMatrix->Transform(x2, y2); 834 pMatrix->Transform(x2, y2);
835 } 835 }
836 FX_FLOAT dx = x1 - x2; 836 FX_FLOAT dx = x1 - x2;
837 FX_FLOAT dy = y1 - y2; 837 FX_FLOAT dy = y1 - y2;
838 FX_FLOAT distance_square = FXSYS_Mul(dx, dx) + FXSYS_Mul(dy, dy); 838 FX_FLOAT distance_square = FXSYS_Mul(dx, dx) + FXSYS_Mul(dy, dy);
839 if (distance_square < (1.0f * 2 + 1.0f / 4)) { 839 if (distance_square < (1.0f * 2 + 1.0f / 4)) {
840 v1 = i; 840 v1 = i;
841 v2 = pair1; 841 v2 = pair1;
842 return TRUE; 842 return true;
843 } 843 }
844 } 844 }
845 return FALSE; 845 return false;
846 } 846 }
847 BOOL CGdiplusExt::DrawPath(HDC hDC, const CFX_PathData* pPathData, 847 BOOL CGdiplusExt::DrawPath(HDC hDC, const CFX_PathData* pPathData,
848 const CFX_AffineMatrix* pObject2Device, 848 const CFX_AffineMatrix* pObject2Device,
849 const CFX_GraphStateData* pGraphState, 849 const CFX_GraphStateData* pGraphState,
850 FX_DWORD fill_argb, 850 FX_DWORD fill_argb,
851 FX_DWORD stroke_argb, 851 FX_DWORD stroke_argb,
852 int fill_mode 852 int fill_mode
853 ) 853 )
854 { 854 {
855 int nPoints = pPathData->GetPointCount(); 855 int nPoints = pPathData->GetPointCount();
856 if (nPoints == 0) { 856 if (nPoints == 0) {
857 return TRUE; 857 return true;
858 } 858 }
859 FX_PATHPOINT* pPoints = pPathData->GetPoints(); 859 FX_PATHPOINT* pPoints = pPathData->GetPoints();
860 GpGraphics* pGraphics = NULL; 860 GpGraphics* pGraphics = NULL;
861 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 861 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
862 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics); 862 CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
863 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel); 863 CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
864 CallFunc(GdipSetPixelOffsetMode)(pGraphics, PixelOffsetModeHalf); 864 CallFunc(GdipSetPixelOffsetMode)(pGraphics, PixelOffsetModeHalf);
865 GpMatrix* pMatrix = NULL; 865 GpMatrix* pMatrix = NULL;
866 if (pObject2Device) { 866 if (pObject2Device) {
867 CallFunc(GdipCreateMatrix2)(pObject2Device->a, pObject2Device->b, pObjec t2Device->c, pObject2Device->d, pObject2Device->e, pObject2Device->f, &pMatrix); 867 CallFunc(GdipCreateMatrix2)(pObject2Device->a, pObject2Device->b, pObjec t2Device->c, pObject2Device->d, pObject2Device->e, pObject2Device->f, &pMatrix);
868 CallFunc(GdipSetWorldTransform)(pGraphics, pMatrix); 868 CallFunc(GdipSetWorldTransform)(pGraphics, pMatrix);
869 } 869 }
870 PointF *points = FX_Alloc(PointF, nPoints); 870 PointF *points = FX_Alloc(PointF, nPoints);
871 BYTE * types = FX_Alloc(BYTE, nPoints); 871 BYTE * types = FX_Alloc(BYTE, nPoints);
872 int nSubPathes = 0; 872 int nSubPathes = 0;
873 FX_BOOL bSubClose = FALSE; 873 bool bSubClose = false;
874 int pos_subclose = 0; 874 int pos_subclose = 0;
875 FX_BOOL bSmooth = FALSE; 875 bool bSmooth = false;
876 int startpoint = 0; 876 int startpoint = 0;
877 for(int i = 0; i < nPoints; i++) { 877 for(int i = 0; i < nPoints; i++) {
878 points[i].X = pPoints[i].m_PointX; 878 points[i].X = pPoints[i].m_PointX;
879 points[i].Y = pPoints[i].m_PointY; 879 points[i].Y = pPoints[i].m_PointY;
880 FX_FLOAT x, y; 880 FX_FLOAT x, y;
881 if (pObject2Device) { 881 if (pObject2Device) {
882 pObject2Device->Transform(pPoints[i].m_PointX, pPoints[i].m_PointY, x, y); 882 pObject2Device->Transform(pPoints[i].m_PointX, pPoints[i].m_PointY, x, y);
883 } else { 883 } else {
884 x = pPoints[i].m_PointX; 884 x = pPoints[i].m_PointX;
885 y = pPoints[i].m_PointY; 885 y = pPoints[i].m_PointY;
886 } 886 }
887 if (x > 50000 * 1.0f) { 887 if (x > 50000 * 1.0f) {
888 points[i].X = 50000 * 1.0f; 888 points[i].X = 50000 * 1.0f;
889 } 889 }
890 if (x < -50000 * 1.0f) { 890 if (x < -50000 * 1.0f) {
891 points[i].X = -50000 * 1.0f; 891 points[i].X = -50000 * 1.0f;
892 } 892 }
893 if (y > 50000 * 1.0f) { 893 if (y > 50000 * 1.0f) {
894 points[i].Y = 50000 * 1.0f; 894 points[i].Y = 50000 * 1.0f;
895 } 895 }
896 if (y < -50000 * 1.0f) { 896 if (y < -50000 * 1.0f) {
897 points[i].Y = -50000 * 1.0f; 897 points[i].Y = -50000 * 1.0f;
898 } 898 }
899 int point_type = pPoints[i].m_Flag & FXPT_TYPE; 899 int point_type = pPoints[i].m_Flag & FXPT_TYPE;
900 if(point_type == FXPT_MOVETO) { 900 if(point_type == FXPT_MOVETO) {
901 types[i] = PathPointTypeStart; 901 types[i] = PathPointTypeStart;
902 nSubPathes ++; 902 nSubPathes ++;
903 bSubClose = FALSE; 903 bSubClose = false;
904 startpoint = i; 904 startpoint = i;
905 } else if (point_type == FXPT_LINETO) { 905 } else if (point_type == FXPT_LINETO) {
906 types[i] = PathPointTypeLine; 906 types[i] = PathPointTypeLine;
907 if (pPoints[i - 1].m_Flag == FXPT_MOVETO && (i == nPoints - 1 || pPo ints[i + 1].m_Flag == FXPT_MOVETO) && 907 if (pPoints[i - 1].m_Flag == FXPT_MOVETO && (i == nPoints - 1 || pPo ints[i + 1].m_Flag == FXPT_MOVETO) &&
908 points[i].Y == points[i - 1].Y && points[i].X == points[i - 1].X) { 908 points[i].Y == points[i - 1].Y && points[i].X == points[i - 1].X) {
909 points[i].X += 0.01f; 909 points[i].X += 0.01f;
910 continue; 910 continue;
911 } 911 }
912 if (!bSmooth && points[i].X != points[i - 1].X && points[i].Y != poi nts[i - 1].Y) { 912 if (!bSmooth && points[i].X != points[i - 1].X && points[i].Y != poi nts[i - 1].Y) {
913 bSmooth = TRUE; 913 bSmooth = true;
914 } 914 }
915 } else if (point_type == FXPT_BEZIERTO) { 915 } else if (point_type == FXPT_BEZIERTO) {
916 types[i] = PathPointTypeBezier; 916 types[i] = PathPointTypeBezier;
917 bSmooth = TRUE; 917 bSmooth = true;
918 } 918 }
919 if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) { 919 if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) {
920 if (bSubClose) { 920 if (bSubClose) {
921 types[pos_subclose] &= ~PathPointTypeCloseSubpath; 921 types[pos_subclose] &= ~PathPointTypeCloseSubpath;
922 } else { 922 } else {
923 bSubClose = TRUE; 923 bSubClose = true;
924 } 924 }
925 pos_subclose = i; 925 pos_subclose = i;
926 types[i] |= PathPointTypeCloseSubpath; 926 types[i] |= PathPointTypeCloseSubpath;
927 if (!bSmooth && points[i].X != points[startpoint].X && points[i].Y ! = points[startpoint].Y) { 927 if (!bSmooth && points[i].X != points[startpoint].X && points[i].Y ! = points[startpoint].Y) {
928 bSmooth = TRUE; 928 bSmooth = true;
929 } 929 }
930 } 930 }
931 } 931 }
932 if (fill_mode & FXFILL_NOPATHSMOOTH) { 932 if (fill_mode & FXFILL_NOPATHSMOOTH) {
933 bSmooth = FALSE; 933 bSmooth = false;
934 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone); 934 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone);
935 } else if (!(fill_mode & FXFILL_FULLCOVER)) { 935 } else if (!(fill_mode & FXFILL_FULLCOVER)) {
936 if (!bSmooth && (fill_mode & 3)) { 936 if (!bSmooth && (fill_mode & 3)) {
937 bSmooth = TRUE; 937 bSmooth = true;
938 } 938 }
939 if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) { 939 if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) {
940 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias); 940 CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias);
941 } 941 }
942 } 942 }
943 int new_fill_mode = fill_mode & 3; 943 int new_fill_mode = fill_mode & 3;
944 if (nPoints == 4 && pGraphState == NULL) { 944 if (nPoints == 4 && pGraphState == NULL) {
945 int v1, v2; 945 int v1, v2;
946 if (IsSmallTriangle(points, pObject2Device, v1, v2)) { 946 if (IsSmallTriangle(points, pObject2Device, v1, v2)) {
947 GpPen* pPen = NULL; 947 GpPen* pPen = NULL;
948 CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen); 948 CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen);
949 CallFunc(GdipDrawLineI)(pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y), 949 CallFunc(GdipDrawLineI)(pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y),
950 FXSYS_round(points[v2].X), FXSYS_round(point s[v2].Y)); 950 FXSYS_round(points[v2].X), FXSYS_round(point s[v2].Y));
951 CallFunc(GdipDeletePen)(pPen); 951 CallFunc(GdipDeletePen)(pPen);
952 return TRUE; 952 return true;
953 } 953 }
954 } 954 }
955 GpPath* pGpPath = NULL; 955 GpPath* pGpPath = NULL;
956 CallFunc(GdipCreatePath2)(points, types, nPoints, GdiFillType2Gdip(new_fill_ mode), &pGpPath); 956 CallFunc(GdipCreatePath2)(points, types, nPoints, GdiFillType2Gdip(new_fill_ mode), &pGpPath);
957 if (!pGpPath) { 957 if (!pGpPath) {
958 if (pMatrix) { 958 if (pMatrix) {
959 CallFunc(GdipDeleteMatrix)(pMatrix); 959 CallFunc(GdipDeleteMatrix)(pMatrix);
960 } 960 }
961 FX_Free(points); 961 FX_Free(points);
962 FX_Free(types); 962 FX_Free(types);
963 CallFunc(GdipDeleteGraphics)(pGraphics); 963 CallFunc(GdipDeleteGraphics)(pGraphics);
964 return FALSE; 964 return false;
965 } 965 }
966 if (new_fill_mode) { 966 if (new_fill_mode) {
967 GpBrush* pBrush = _GdipCreateBrush(fill_argb); 967 GpBrush* pBrush = _GdipCreateBrush(fill_argb);
968 CallFunc(GdipSetPathFillMode)(pGpPath, GdiFillType2Gdip(new_fill_mode)); 968 CallFunc(GdipSetPathFillMode)(pGpPath, GdiFillType2Gdip(new_fill_mode));
969 CallFunc(GdipFillPath)(pGraphics, pBrush, pGpPath); 969 CallFunc(GdipFillPath)(pGraphics, pBrush, pGpPath);
970 CallFunc(GdipDeleteBrush)(pBrush); 970 CallFunc(GdipDeleteBrush)(pBrush);
971 } 971 }
972 if (pGraphState && stroke_argb) { 972 if (pGraphState && stroke_argb) {
973 GpPen* pPen = _GdipCreatePen(pGraphState, pObject2Device, stroke_argb, f ill_mode & FX_STROKE_TEXT_MODE); 973 GpPen* pPen = _GdipCreatePen(pGraphState, pObject2Device, stroke_argb, f ill_mode & FX_STROKE_TEXT_MODE);
974 if (nSubPathes == 1) { 974 if (nSubPathes == 1) {
(...skipping 12 matching lines...) Expand all
987 } 987 }
988 CallFunc(GdipDeletePen)(pPen); 988 CallFunc(GdipDeletePen)(pPen);
989 } 989 }
990 if (pMatrix) { 990 if (pMatrix) {
991 CallFunc(GdipDeleteMatrix)(pMatrix); 991 CallFunc(GdipDeleteMatrix)(pMatrix);
992 } 992 }
993 FX_Free(points); 993 FX_Free(points);
994 FX_Free(types); 994 FX_Free(types);
995 CallFunc(GdipDeletePath)(pGpPath); 995 CallFunc(GdipDeletePath)(pGpPath);
996 CallFunc(GdipDeleteGraphics)(pGraphics); 996 CallFunc(GdipDeleteGraphics)(pGraphics);
997 return TRUE; 997 return true;
998 } 998 }
999 class GpStream final : public IStream 999 class GpStream final : public IStream
1000 { 1000 {
1001 LONG m_RefCount; 1001 LONG m_RefCount;
1002 int m_ReadPos; 1002 int m_ReadPos;
1003 CFX_ByteTextBuf m_InterStream; 1003 CFX_ByteTextBuf m_InterStream;
1004 public: 1004 public:
1005 GpStream() 1005 GpStream()
1006 { 1006 {
1007 m_RefCount = 1; 1007 m_RefCount = 1;
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1222 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt; 1222 CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatform Data())->m_GdiplusExt;
1223 CallFunc(GdipBitmapUnlockBits)(pInfo->pBitmap, pInfo->pBitmapData); 1223 CallFunc(GdipBitmapUnlockBits)(pInfo->pBitmap, pInfo->pBitmapData);
1224 CallFunc(GdipDisposeImage)(pInfo->pBitmap); 1224 CallFunc(GdipDisposeImage)(pInfo->pBitmap);
1225 FX_Free(pInfo->pBitmapData); 1225 FX_Free(pInfo->pBitmapData);
1226 FX_Free((LPBYTE)pInfo->pbmi); 1226 FX_Free((LPBYTE)pInfo->pbmi);
1227 if (pInfo->pStream) { 1227 if (pInfo->pStream) {
1228 pInfo->pStream->Release(); 1228 pInfo->pStream->Release();
1229 } 1229 }
1230 FX_Free(pInfo); 1230 FX_Free(pInfo);
1231 } 1231 }
1232 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, FX_BOOL bAlpha); 1232 CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, bool bA lpha);
1233 CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args) 1233 CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args)
1234 { 1234 {
1235 PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args); 1235 PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args);
1236 if (pInfo == NULL) { 1236 if (pInfo == NULL) {
1237 return NULL; 1237 return NULL;
1238 } 1238 }
1239 int height = abs(pInfo->pbmi->bmiHeader.biHeight); 1239 int height = abs(pInfo->pbmi->bmiHeader.biHeight);
1240 int width = pInfo->pbmi->bmiHeader.biWidth; 1240 int width = pInfo->pbmi->bmiHeader.biWidth;
1241 int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4; 1241 int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
1242 LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height); 1242 LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height);
1243 if (dest_pitch == pInfo->Stride) { 1243 if (dest_pitch == pInfo->Stride) {
1244 FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height); 1244 FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height);
1245 } else { 1245 } else {
1246 for (int i = 0; i < height; i ++) { 1246 for (int i = 0; i < height; i ++) {
1247 FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, dest_pitch); 1247 FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, dest_pitch);
1248 } 1248 }
1249 } 1249 }
1250 CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf(pInfo->pbmi, pData, pIn fo->pbmi->bmiHeader.biBitCount == 32); 1250 CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf(pInfo->pbmi, pData, pIn fo->pbmi->bmiHeader.biBitCount == 32);
1251 FX_Free(pData); 1251 FX_Free(pData);
1252 FreeDIBitmap(pInfo); 1252 FreeDIBitmap(pInfo);
1253 return pDIBitmap; 1253 return pDIBitmap;
1254 } 1254 }
1255 #endif 1255 #endif
OLDNEW
« no previous file with comments | « core/src/fxge/win32/fx_win32_dwrite.cpp ('k') | core/src/fxge/win32/fx_win32_print.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698