| Index: core/include/fxge/fx_dib.h
 | 
| diff --git a/core/include/fxge/fx_dib.h b/core/include/fxge/fx_dib.h
 | 
| index ddc47d3db5900068fed14088d0725ec2e8aaf597..818aaac5209adbd867aee6ca91b5cc81bd1ccd33 100644
 | 
| --- a/core/include/fxge/fx_dib.h
 | 
| +++ b/core/include/fxge/fx_dib.h
 | 
| @@ -69,6 +69,8 @@ typedef FX_DWORD FX_CMYK;
 | 
|  class CFX_ClipRgn;
 | 
|  class CFX_DIBSource;
 | 
|  class CFX_DIBitmap;
 | 
| +class CStretchEngine;
 | 
| +
 | 
|  #define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16))
 | 
|  #define FXSYS_GetRValue(rgb) ((rgb)&0xff)
 | 
|  #define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff)
 | 
| @@ -281,11 +283,9 @@ class CFX_DIBSource {
 | 
|  };
 | 
|  class CFX_DIBitmap : public CFX_DIBSource {
 | 
|   public:
 | 
| -  virtual ~CFX_DIBitmap();
 | 
| -
 | 
|    CFX_DIBitmap();
 | 
| -
 | 
| -  CFX_DIBitmap(const CFX_DIBitmap& src);
 | 
| +  explicit CFX_DIBitmap(const CFX_DIBitmap& src);
 | 
| +  ~CFX_DIBitmap() override;
 | 
|  
 | 
|    FX_BOOL Create(int width,
 | 
|                   int height,
 | 
| @@ -295,19 +295,18 @@ class CFX_DIBitmap : public CFX_DIBSource {
 | 
|  
 | 
|    FX_BOOL Copy(const CFX_DIBSource* pSrc);
 | 
|  
 | 
| -  virtual uint8_t* GetBuffer() const { return m_pBuffer; }
 | 
| -
 | 
| -  virtual const uint8_t* GetScanline(int line) const {
 | 
| +  // CFX_DIBSource
 | 
| +  uint8_t* GetBuffer() const override { return m_pBuffer; }
 | 
| +  const uint8_t* GetScanline(int line) const override {
 | 
|      return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL;
 | 
|    }
 | 
| -
 | 
| -  virtual void DownSampleScanline(int line,
 | 
| -                                  uint8_t* dest_scan,
 | 
| -                                  int dest_bpp,
 | 
| -                                  int dest_width,
 | 
| -                                  FX_BOOL bFlipX,
 | 
| -                                  int clip_left,
 | 
| -                                  int clip_width) const;
 | 
| +  void DownSampleScanline(int line,
 | 
| +                          uint8_t* dest_scan,
 | 
| +                          int dest_bpp,
 | 
| +                          int dest_width,
 | 
| +                          FX_BOOL bFlipX,
 | 
| +                          int clip_left,
 | 
| +                          int clip_width) const override;
 | 
|  
 | 
|    void TakeOver(CFX_DIBitmap* pSrcBitmap);
 | 
|  
 | 
| @@ -407,12 +406,12 @@ class CFX_DIBExtractor {
 | 
|   private:
 | 
|    CFX_DIBitmap* m_pBitmap;
 | 
|  };
 | 
| +
 | 
|  typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef;
 | 
|  class CFX_FilteredDIB : public CFX_DIBSource {
 | 
|   public:
 | 
|    CFX_FilteredDIB();
 | 
| -
 | 
| -  ~CFX_FilteredDIB();
 | 
| +  ~CFX_FilteredDIB() override;
 | 
|  
 | 
|    void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE);
 | 
|  
 | 
| @@ -429,14 +428,15 @@ class CFX_FilteredDIB : public CFX_DIBSource {
 | 
|                                      int Bpp) const = 0;
 | 
|  
 | 
|   protected:
 | 
| -  virtual const uint8_t* GetScanline(int line) const;
 | 
| -  virtual void DownSampleScanline(int line,
 | 
| -                                  uint8_t* dest_scan,
 | 
| -                                  int dest_bpp,
 | 
| -                                  int dest_width,
 | 
| -                                  FX_BOOL bFlipX,
 | 
| -                                  int clip_left,
 | 
| -                                  int clip_width) const;
 | 
| +  // CFX_DIBSource
 | 
| +  const uint8_t* GetScanline(int line) const override;
 | 
| +  void DownSampleScanline(int line,
 | 
| +                          uint8_t* dest_scan,
 | 
| +                          int dest_bpp,
 | 
| +                          int dest_width,
 | 
| +                          FX_BOOL bFlipX,
 | 
| +                          int clip_left,
 | 
| +                          int clip_width) const override;
 | 
|  
 | 
|    const CFX_DIBSource* m_pSrc;
 | 
|  
 | 
| @@ -444,6 +444,7 @@ class CFX_FilteredDIB : public CFX_DIBSource {
 | 
|  
 | 
|    uint8_t* m_pScanline;
 | 
|  };
 | 
| +
 | 
|  class IFX_ScanlineComposer {
 | 
|   public:
 | 
|    virtual ~IFX_ScanlineComposer() {}
 | 
| @@ -514,11 +515,11 @@ class CFX_ScanlineCompositor {
 | 
|    int m_CacheSize;
 | 
|    FX_BOOL m_bRgbByteOrder;
 | 
|  };
 | 
| +
 | 
|  class CFX_BitmapComposer : public IFX_ScanlineComposer {
 | 
|   public:
 | 
|    CFX_BitmapComposer();
 | 
| -
 | 
| -  ~CFX_BitmapComposer();
 | 
| +  ~CFX_BitmapComposer() override;
 | 
|  
 | 
|    void Compose(CFX_DIBitmap* pDest,
 | 
|                 const CFX_ClipRgn* pClipRgn,
 | 
| @@ -533,14 +534,15 @@ class CFX_BitmapComposer : public IFX_ScanlineComposer {
 | 
|                 void* pIccTransform = NULL,
 | 
|                 int blend_type = FXDIB_BLEND_NORMAL);
 | 
|  
 | 
| -  virtual FX_BOOL SetInfo(int width,
 | 
| -                          int height,
 | 
| -                          FXDIB_Format src_format,
 | 
| -                          FX_DWORD* pSrcPalette);
 | 
| +  // IFX_ScanlineComposer
 | 
| +  FX_BOOL SetInfo(int width,
 | 
| +                  int height,
 | 
| +                  FXDIB_Format src_format,
 | 
| +                  FX_DWORD* pSrcPalette) override;
 | 
|  
 | 
| -  virtual void ComposeScanline(int line,
 | 
| -                               const uint8_t* scanline,
 | 
| -                               const uint8_t* scan_extra_alpha);
 | 
| +  void ComposeScanline(int line,
 | 
| +                       const uint8_t* scanline,
 | 
| +                       const uint8_t* scan_extra_alpha) override;
 | 
|  
 | 
|   protected:
 | 
|    void DoCompose(uint8_t* dest_scan,
 | 
| @@ -569,20 +571,21 @@ class CFX_BitmapComposer : public IFX_ScanlineComposer {
 | 
|    uint8_t* m_pAddClipScan;
 | 
|    uint8_t* m_pScanlineAlphaV;
 | 
|  };
 | 
| +
 | 
|  class CFX_BitmapStorer : public IFX_ScanlineComposer {
 | 
|   public:
 | 
|    CFX_BitmapStorer();
 | 
| +  ~CFX_BitmapStorer() override;
 | 
|  
 | 
| -  ~CFX_BitmapStorer();
 | 
| +  // IFX_ScanlineComposer
 | 
| +  void ComposeScanline(int line,
 | 
| +                       const uint8_t* scanline,
 | 
| +                       const uint8_t* scan_extra_alpha) override;
 | 
|  
 | 
| -  virtual void ComposeScanline(int line,
 | 
| -                               const uint8_t* scanline,
 | 
| -                               const uint8_t* scan_extra_alpha);
 | 
| -
 | 
| -  virtual FX_BOOL SetInfo(int width,
 | 
| -                          int height,
 | 
| -                          FXDIB_Format src_format,
 | 
| -                          FX_DWORD* pSrcPalette);
 | 
| +  FX_BOOL SetInfo(int width,
 | 
| +                  int height,
 | 
| +                  FXDIB_Format src_format,
 | 
| +                  FX_DWORD* pSrcPalette) override;
 | 
|  
 | 
|    CFX_DIBitmap* GetBitmap() { return m_pBitmap; }
 | 
|  
 | 
| @@ -593,7 +596,7 @@ class CFX_BitmapStorer : public IFX_ScanlineComposer {
 | 
|   private:
 | 
|    CFX_DIBitmap* m_pBitmap;
 | 
|  };
 | 
| -class CStretchEngine;
 | 
| +
 | 
|  class CFX_ImageStretcher {
 | 
|   public:
 | 
|    CFX_ImageStretcher();
 | 
| 
 |