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

Side by Side Diff: core/fxge/agg/fx_agg_driver.cpp

Issue 2163103002: Use smart pointers for graphics device classes (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: fix all platforms Created 4 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/fxge/agg/fx_agg_driver.h ('k') | core/fxge/apple/fx_quartz_device.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 "core/fxge/agg/fx_agg_driver.h" 7 #include "core/fxge/agg/fx_agg_driver.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "core/fxcodec/include/fx_codec.h" 11 #include "core/fxcodec/include/fx_codec.h"
12 #include "core/fxcrt/include/fx_memory.h"
12 #include "core/fxge/dib/dib_int.h" 13 #include "core/fxge/dib/dib_int.h"
13 #include "core/fxge/ge/fx_text_int.h" 14 #include "core/fxge/ge/fx_text_int.h"
14 #include "core/fxge/include/fx_ge.h" 15 #include "core/fxge/include/fx_ge.h"
15 #include "core/fxge/include/ifx_renderdevicedriver.h" 16 #include "core/fxge/include/ifx_renderdevicedriver.h"
16 #include "third_party/agg23/agg_conv_dash.h" 17 #include "third_party/agg23/agg_conv_dash.h"
17 #include "third_party/agg23/agg_conv_stroke.h" 18 #include "third_party/agg23/agg_conv_stroke.h"
18 #include "third_party/agg23/agg_curves.h" 19 #include "third_party/agg23/agg_curves.h"
19 #include "third_party/agg23/agg_path_storage.h" 20 #include "third_party/agg23/agg_path_storage.h"
20 #include "third_party/agg23/agg_pixfmt_gray.h" 21 #include "third_party/agg23/agg_pixfmt_gray.h"
21 #include "third_party/agg23/agg_rasterizer_scanline_aa.h" 22 #include "third_party/agg23/agg_rasterizer_scanline_aa.h"
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 stroke.line_cap(cap); 414 stroke.line_cap(cap);
414 stroke.miter_limit(pGraphState->m_MiterLimit); 415 stroke.miter_limit(pGraphState->m_MiterLimit);
415 stroke.width(width); 416 stroke.width(width);
416 rasterizer.add_path_transformed(stroke, pObject2Device); 417 rasterizer.add_path_transformed(stroke, pObject2Device);
417 } 418 }
418 } 419 }
419 420
420 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap, 421 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
421 FX_BOOL bRgbByteOrder, 422 FX_BOOL bRgbByteOrder,
422 CFX_DIBitmap* pOriDevice, 423 CFX_DIBitmap* pOriDevice,
423 FX_BOOL bGroupKnockout) { 424 FX_BOOL bGroupKnockout)
424 m_pBitmap = pBitmap; 425 : m_pBitmap(pBitmap),
425 m_pClipRgn = nullptr; 426 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
426 m_pPlatformBitmap = nullptr; 427 m_pPlatformGraphics(nullptr),
427 m_pPlatformGraphics = nullptr; 428 #endif
428 m_pDwRenderTartget = nullptr; 429 m_FillFlags(0),
429 m_bRgbByteOrder = bRgbByteOrder; 430 m_bRgbByteOrder(bRgbByteOrder),
430 m_pOriDevice = pOriDevice; 431 m_pOriDevice(pOriDevice),
431 m_bGroupKnockout = bGroupKnockout; 432 m_bGroupKnockout(bGroupKnockout) {
432 m_FillFlags = 0;
433 InitPlatform(); 433 InitPlatform();
434 } 434 }
435 435
436 CFX_AggDeviceDriver::~CFX_AggDeviceDriver() { 436 CFX_AggDeviceDriver::~CFX_AggDeviceDriver() {
437 delete m_pClipRgn;
438 for (int i = 0; i < m_StateStack.GetSize(); i++)
439 delete m_StateStack[i];
440 DestroyPlatform(); 437 DestroyPlatform();
441 } 438 }
442 439
443 uint8_t* CFX_AggDeviceDriver::GetBuffer() const { 440 uint8_t* CFX_AggDeviceDriver::GetBuffer() const {
444 return m_pBitmap->GetBuffer(); 441 return m_pBitmap->GetBuffer();
445 } 442 }
446 443
447 const CFX_DIBitmap* CFX_AggDeviceDriver::GetBitmap() const { 444 const CFX_DIBitmap* CFX_AggDeviceDriver::GetBitmap() const {
448 return m_pBitmap; 445 return m_pBitmap;
449 } 446 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 if (m_pBitmap->IsCmykImage()) { 489 if (m_pBitmap->IsCmykImage()) {
493 flags |= FXRC_CMYK_OUTPUT; 490 flags |= FXRC_CMYK_OUTPUT;
494 } 491 }
495 return flags; 492 return flags;
496 } 493 }
497 } 494 }
498 return 0; 495 return 0;
499 } 496 }
500 497
501 void CFX_AggDeviceDriver::SaveState() { 498 void CFX_AggDeviceDriver::SaveState() {
502 CFX_ClipRgn* pClip = nullptr; 499 std::unique_ptr<CFX_ClipRgn> pClip;
503 if (m_pClipRgn) { 500 if (m_pClipRgn)
504 pClip = new CFX_ClipRgn(*m_pClipRgn); 501 pClip.reset(new CFX_ClipRgn(*m_pClipRgn));
505 } 502 m_StateStack.push_back(std::move(pClip));
506 m_StateStack.Add(pClip);
507 } 503 }
508 504
509 void CFX_AggDeviceDriver::RestoreState(bool bKeepSaved) { 505 void CFX_AggDeviceDriver::RestoreState(bool bKeepSaved) {
510 delete m_pClipRgn; 506 m_pClipRgn.reset();
511 m_pClipRgn = nullptr;
512 507
513 int size = m_StateStack.GetSize(); 508 if (m_StateStack.empty())
514 if (!size)
515 return; 509 return;
516 510
517 CFX_ClipRgn* pSavedClip = m_StateStack[size - 1];
518 if (bKeepSaved) { 511 if (bKeepSaved) {
519 if (pSavedClip) { 512 if (m_StateStack.back())
520 m_pClipRgn = new CFX_ClipRgn(*pSavedClip); 513 m_pClipRgn.reset(new CFX_ClipRgn(*m_StateStack.back()));
521 }
522 } else { 514 } else {
523 m_StateStack.RemoveAt(size - 1); 515 m_pClipRgn = std::move(m_StateStack.back());
524 m_pClipRgn = pSavedClip; 516 m_StateStack.pop_back();
525 } 517 }
526 } 518 }
527 519
528 void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer) { 520 void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer) {
529 FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(), 521 FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(),
530 rasterizer.max_x() + 1, rasterizer.max_y() + 1); 522 rasterizer.max_x() + 1, rasterizer.max_y() + 1);
531 path_rect.Intersect(m_pClipRgn->GetBox()); 523 path_rect.Intersect(m_pClipRgn->GetBox());
532 CFX_DIBitmapRef mask; 524 CFX_DIBitmapRef mask;
533 CFX_DIBitmap* pThisLayer = mask.New(); 525 CFX_DIBitmap* pThisLayer = mask.New();
534 if (!pThisLayer) { 526 if (!pThisLayer) {
(...skipping 13 matching lines...) Expand all
548 agg::render_scanlines(rasterizer, scanline, final_render, 540 agg::render_scanlines(rasterizer, scanline, final_render,
549 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0); 541 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
550 m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask); 542 m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask);
551 } 543 }
552 544
553 FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData, 545 FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData,
554 const CFX_Matrix* pObject2Device, 546 const CFX_Matrix* pObject2Device,
555 int fill_mode) { 547 int fill_mode) {
556 m_FillFlags = fill_mode; 548 m_FillFlags = fill_mode;
557 if (!m_pClipRgn) { 549 if (!m_pClipRgn) {
558 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), 550 m_pClipRgn.reset(new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
559 GetDeviceCaps(FXDC_PIXEL_HEIGHT)); 551 GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
560 } 552 }
561 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) { 553 if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
562 CFX_FloatRect rectf; 554 CFX_FloatRect rectf;
563 if (pPathData->IsRect(pObject2Device, &rectf)) { 555 if (pPathData->IsRect(pObject2Device, &rectf)) {
564 rectf.Intersect( 556 rectf.Intersect(
565 CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH), 557 CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH),
566 (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT))); 558 (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
567 FX_RECT rect = rectf.GetOutterRect(); 559 FX_RECT rect = rectf.GetOutterRect();
568 m_pClipRgn->IntersectRect(rect); 560 m_pClipRgn->IntersectRect(rect);
569 return TRUE; 561 return TRUE;
(...skipping 11 matching lines...) Expand all
581 : agg::fill_even_odd); 573 : agg::fill_even_odd);
582 SetClipMask(rasterizer); 574 SetClipMask(rasterizer);
583 return TRUE; 575 return TRUE;
584 } 576 }
585 577
586 FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke( 578 FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke(
587 const CFX_PathData* pPathData, 579 const CFX_PathData* pPathData,
588 const CFX_Matrix* pObject2Device, 580 const CFX_Matrix* pObject2Device,
589 const CFX_GraphStateData* pGraphState) { 581 const CFX_GraphStateData* pGraphState) {
590 if (!m_pClipRgn) { 582 if (!m_pClipRgn) {
591 m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), 583 m_pClipRgn.reset(new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
592 GetDeviceCaps(FXDC_PIXEL_HEIGHT)); 584 GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
593 } 585 }
594 CAgg_PathData path_data; 586 CAgg_PathData path_data;
595 path_data.BuildPath(pPathData, nullptr); 587 path_data.BuildPath(pPathData, nullptr);
596 agg::rasterizer_scanline_aa rasterizer; 588 agg::rasterizer_scanline_aa rasterizer;
597 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), 589 rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
598 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT))); 590 (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
599 RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device, 591 RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device,
600 pGraphState); 592 pGraphState);
601 rasterizer.filling_rule(agg::fill_non_zero); 593 rasterizer.filling_rule(agg::fill_non_zero);
602 SetClipMask(rasterizer); 594 SetClipMask(rasterizer);
(...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 1429
1438 FX_BOOL CFX_AggDeviceDriver::RenderRasterizer( 1430 FX_BOOL CFX_AggDeviceDriver::RenderRasterizer(
1439 agg::rasterizer_scanline_aa& rasterizer, 1431 agg::rasterizer_scanline_aa& rasterizer,
1440 uint32_t color, 1432 uint32_t color,
1441 FX_BOOL bFullCover, 1433 FX_BOOL bFullCover,
1442 FX_BOOL bGroupKnockout, 1434 FX_BOOL bGroupKnockout,
1443 int alpha_flag, 1435 int alpha_flag,
1444 void* pIccTransform) { 1436 void* pIccTransform) {
1445 CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : nullptr; 1437 CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : nullptr;
1446 CFX_Renderer render; 1438 CFX_Renderer render;
1447 if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover, 1439 if (!render.Init(m_pBitmap, pt, m_pClipRgn.get(), color, bFullCover,
1448 m_bRgbByteOrder, alpha_flag, pIccTransform)) { 1440 m_bRgbByteOrder, alpha_flag, pIccTransform)) {
1449 return FALSE; 1441 return FALSE;
1450 } 1442 }
1451 agg::scanline_u8 scanline; 1443 agg::scanline_u8 scanline;
1452 agg::render_scanlines(rasterizer, scanline, render, 1444 agg::render_scanlines(rasterizer, scanline, render,
1453 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0); 1445 (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
1454 return TRUE; 1446 return TRUE;
1455 } 1447 }
1456 1448
1457 FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData, 1449 FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData,
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1652 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, 1644 FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
1653 uint32_t argb, 1645 uint32_t argb,
1654 const FX_RECT* pSrcRect, 1646 const FX_RECT* pSrcRect,
1655 int left, 1647 int left,
1656 int top, 1648 int top,
1657 int blend_type) { 1649 int blend_type) {
1658 if (!m_pBitmap->GetBuffer()) 1650 if (!m_pBitmap->GetBuffer())
1659 return TRUE; 1651 return TRUE;
1660 1652
1661 if (pBitmap->IsAlphaMask()) { 1653 if (pBitmap->IsAlphaMask()) {
1662 return m_pBitmap->CompositeMask(left, top, pSrcRect->Width(), 1654 return m_pBitmap->CompositeMask(
1663 pSrcRect->Height(), pBitmap, argb, 1655 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb,
1664 pSrcRect->left, pSrcRect->top, blend_type, 1656 pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn.get(),
1665 m_pClipRgn, m_bRgbByteOrder, 0, nullptr); 1657 m_bRgbByteOrder, 0, nullptr);
1666 } 1658 }
1667 return m_pBitmap->CompositeBitmap( 1659 return m_pBitmap->CompositeBitmap(
1668 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left, 1660 left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left,
1669 pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, nullptr); 1661 pSrcRect->top, blend_type, m_pClipRgn.get(), m_bRgbByteOrder, nullptr);
1670 } 1662 }
1671 1663
1672 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, 1664 FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
1673 uint32_t argb, 1665 uint32_t argb,
1674 int dest_left, 1666 int dest_left,
1675 int dest_top, 1667 int dest_top,
1676 int dest_width, 1668 int dest_width,
1677 int dest_height, 1669 int dest_height,
1678 const FX_RECT* pClipRect, 1670 const FX_RECT* pClipRect,
1679 uint32_t flags, 1671 uint32_t flags,
1680 int blend_type) { 1672 int blend_type) {
1681 if (!m_pBitmap->GetBuffer()) 1673 if (!m_pBitmap->GetBuffer())
1682 return TRUE; 1674 return TRUE;
1683 1675
1684 if (dest_width == pSource->GetWidth() && 1676 if (dest_width == pSource->GetWidth() &&
1685 dest_height == pSource->GetHeight()) { 1677 dest_height == pSource->GetHeight()) {
1686 FX_RECT rect(0, 0, dest_width, dest_height); 1678 FX_RECT rect(0, 0, dest_width, dest_height);
1687 return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type); 1679 return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type);
1688 } 1680 }
1689 FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width, 1681 FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width,
1690 dest_top + dest_height); 1682 dest_top + dest_height);
1691 dest_rect.Normalize(); 1683 dest_rect.Normalize();
1692 FX_RECT dest_clip = dest_rect; 1684 FX_RECT dest_clip = dest_rect;
1693 dest_clip.Intersect(*pClipRect); 1685 dest_clip.Intersect(*pClipRect);
1694 CFX_BitmapComposer composer; 1686 CFX_BitmapComposer composer;
1695 composer.Compose(m_pBitmap, m_pClipRgn, 255, argb, dest_clip, FALSE, FALSE, 1687 composer.Compose(m_pBitmap, m_pClipRgn.get(), 255, argb, dest_clip, FALSE,
1696 FALSE, m_bRgbByteOrder, 0, nullptr, blend_type); 1688 FALSE, FALSE, m_bRgbByteOrder, 0, nullptr, blend_type);
1697 dest_clip.Offset(-dest_rect.left, -dest_rect.top); 1689 dest_clip.Offset(-dest_rect.left, -dest_rect.top);
1698 CFX_ImageStretcher stretcher(&composer, pSource, dest_width, dest_height, 1690 CFX_ImageStretcher stretcher(&composer, pSource, dest_width, dest_height,
1699 dest_clip, flags); 1691 dest_clip, flags);
1700 if (stretcher.Start()) 1692 if (stretcher.Start())
1701 stretcher.Continue(nullptr); 1693 stretcher.Continue(nullptr);
1702 return TRUE; 1694 return TRUE;
1703 } 1695 }
1704 1696
1705 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, 1697 FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource,
1706 int bitmap_alpha, 1698 int bitmap_alpha,
1707 uint32_t argb, 1699 uint32_t argb,
1708 const CFX_Matrix* pMatrix, 1700 const CFX_Matrix* pMatrix,
1709 uint32_t render_flags, 1701 uint32_t render_flags,
1710 void*& handle, 1702 void*& handle,
1711 int blend_type) { 1703 int blend_type) {
1712 if (!m_pBitmap->GetBuffer()) 1704 if (!m_pBitmap->GetBuffer())
1713 return TRUE; 1705 return TRUE;
1714 1706
1715 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer; 1707 CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer;
1716 pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix, 1708 pRenderer->Start(m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb,
1717 render_flags, m_bRgbByteOrder, 0, nullptr); 1709 pMatrix, render_flags, m_bRgbByteOrder, 0, nullptr);
1718 handle = pRenderer; 1710 handle = pRenderer;
1719 return TRUE; 1711 return TRUE;
1720 } 1712 }
1721 1713
1722 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) { 1714 FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) {
1723 if (!m_pBitmap->GetBuffer()) { 1715 if (!m_pBitmap->GetBuffer()) {
1724 return TRUE; 1716 return TRUE;
1725 } 1717 }
1726 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause); 1718 return ((CFX_ImageRenderer*)pHandle)->Continue(pPause);
1727 } 1719 }
(...skipping 11 matching lines...) Expand all
1739 } 1731 }
1740 1732
1741 bool CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap, 1733 bool CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap,
1742 bool bRgbByteOrder, 1734 bool bRgbByteOrder,
1743 CFX_DIBitmap* pOriDevice, 1735 CFX_DIBitmap* pOriDevice,
1744 bool bGroupKnockout) { 1736 bool bGroupKnockout) {
1745 if (!pBitmap) 1737 if (!pBitmap)
1746 return false; 1738 return false;
1747 1739
1748 SetBitmap(pBitmap); 1740 SetBitmap(pBitmap);
1749 IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver( 1741 SetDeviceDriver(WrapUnique(new CFX_AggDeviceDriver(
1750 pBitmap, bRgbByteOrder, pOriDevice, bGroupKnockout); 1742 pBitmap, bRgbByteOrder, pOriDevice, bGroupKnockout)));
1751 SetDeviceDriver(pDriver);
1752 return true; 1743 return true;
1753 } 1744 }
1754 1745
1755 bool CFX_FxgeDevice::Create(int width, 1746 bool CFX_FxgeDevice::Create(int width,
1756 int height, 1747 int height,
1757 FXDIB_Format format, 1748 FXDIB_Format format,
1758 CFX_DIBitmap* pOriDevice) { 1749 CFX_DIBitmap* pOriDevice) {
1759 m_bOwnedBitmap = true; 1750 m_bOwnedBitmap = true;
1760 CFX_DIBitmap* pBitmap = new CFX_DIBitmap; 1751 CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
1761 if (!pBitmap->Create(width, height, format)) { 1752 if (!pBitmap->Create(width, height, format)) {
1762 delete pBitmap; 1753 delete pBitmap;
1763 return false; 1754 return false;
1764 } 1755 }
1765 SetBitmap(pBitmap); 1756 SetBitmap(pBitmap);
1766 IFX_RenderDeviceDriver* pDriver = 1757 SetDeviceDriver(
1767 new CFX_AggDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE); 1758 WrapUnique(new CFX_AggDeviceDriver(pBitmap, FALSE, pOriDevice, FALSE)));
1768 SetDeviceDriver(pDriver);
1769 return true; 1759 return true;
1770 } 1760 }
1771 1761
1772 CFX_FxgeDevice::~CFX_FxgeDevice() { 1762 CFX_FxgeDevice::~CFX_FxgeDevice() {
1773 if (m_bOwnedBitmap) { 1763 if (m_bOwnedBitmap) {
1774 delete GetBitmap(); 1764 delete GetBitmap();
1775 } 1765 }
1776 } 1766 }
1777 #endif 1767 #endif
OLDNEW
« no previous file with comments | « core/fxge/agg/fx_agg_driver.h ('k') | core/fxge/apple/fx_quartz_device.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698