Home | History | Annotate | Download | only in dib
      1 // Copyright 2017 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef CORE_FXGE_DIB_CFX_IMAGESTRETCHER_H_
      8 #define CORE_FXGE_DIB_CFX_IMAGESTRETCHER_H_
      9 
     10 #include <memory>
     11 
     12 #include "core/fxcrt/fx_coordinates.h"
     13 #include "core/fxcrt/fx_memory.h"
     14 #include "core/fxcrt/retain_ptr.h"
     15 #include "core/fxcrt/unowned_ptr.h"
     16 #include "core/fxge/dib/ifx_scanlinecomposer.h"
     17 #include "core/fxge/fx_dib.h"
     18 
     19 class CFX_DIBSource;
     20 class IFX_PauseIndicator;
     21 
     22 class CFX_ImageStretcher {
     23  public:
     24   CFX_ImageStretcher(IFX_ScanlineComposer* pDest,
     25                      const RetainPtr<CFX_DIBSource>& pSource,
     26                      int dest_width,
     27                      int dest_height,
     28                      const FX_RECT& bitmap_rect,
     29                      uint32_t flags);
     30   ~CFX_ImageStretcher();
     31 
     32   bool Start();
     33   bool Continue(IFX_PauseIndicator* pPause);
     34 
     35   RetainPtr<CFX_DIBSource> source() { return m_pSource; }
     36 
     37  private:
     38   bool StartQuickStretch();
     39   bool StartStretch();
     40   bool ContinueQuickStretch(IFX_PauseIndicator* pPause);
     41   bool ContinueStretch(IFX_PauseIndicator* pPause);
     42 
     43   UnownedPtr<IFX_ScanlineComposer> const m_pDest;
     44   RetainPtr<CFX_DIBSource> m_pSource;
     45   std::unique_ptr<CStretchEngine> m_pStretchEngine;
     46   std::unique_ptr<uint8_t, FxFreeDeleter> m_pScanline;
     47   std::unique_ptr<uint8_t, FxFreeDeleter> m_pMaskScanline;
     48   const uint32_t m_Flags;
     49   bool m_bFlipX;
     50   bool m_bFlipY;
     51   int m_DestWidth;
     52   int m_DestHeight;
     53   FX_RECT m_ClipRect;
     54   const FXDIB_Format m_DestFormat;
     55   const int m_DestBPP;
     56   int m_LineIndex;
     57 };
     58 
     59 #endif  // CORE_FXGE_DIB_CFX_IMAGESTRETCHER_H_
     60