blob: aa79b731544c25faf9ed517f3ceabe35f63ad125 [file] [log] [blame]
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc.
#include <stdint.h>
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxge/fx_dib.h"
class IFX_ScanlineComposer;
extern const int16_t SDP_Table[513];
class CPDF_FixedMatrix {
CPDF_FixedMatrix(const CFX_Matrix& src, int bits) {
base = 1 << bits;
a = FXSYS_round(src.a * base);
b = FXSYS_round(src.b * base);
c = FXSYS_round(src.c * base);
d = FXSYS_round(src.d * base);
e = FXSYS_round(src.e * base);
f = FXSYS_round(src.f * base);
inline void Transform(int x, int y, int& x1, int& y1) {
x1 = (a * x + c * y + e + base / 2) / base;
y1 = (b * x + d * y + f + base / 2) / base;
int a, b, c, d, e, f;
int base;
#define FPDF_HUGE_IMAGE_SIZE 60000000
struct PixelWeight {
int m_SrcStart;
int m_SrcEnd;
int m_Weights[1];
class CWeightTable {
bool Calc(int dest_len,
int dest_min,
int dest_max,
int src_len,
int src_min,
int src_max,
int flags);
PixelWeight* GetPixelWeight(int pixel) const;
int* GetValueFromPixelWeight(PixelWeight* pWeight, int index) const;
size_t GetPixelWeightSize() const;
int m_DestMin;
int m_ItemSize;
uint8_t* m_pWeightTables;
size_t m_dwWeightTablesSize;
class CStretchEngine {
CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
FXDIB_Format dest_format,
int dest_width,
int dest_height,
const FX_RECT& clip_rect,
const CFX_DIBSource* pSrcBitmap,
int flags);
FX_BOOL Continue(IFX_Pause* pPause);
FX_BOOL StartStretchHorz();
FX_BOOL ContinueStretchHorz(IFX_Pause* pPause);
void StretchVert();
FXDIB_Format m_DestFormat;
int m_DestBpp;
int m_SrcBpp;
int m_bHasAlpha;
IFX_ScanlineComposer* m_pDestBitmap;
int m_DestWidth, m_DestHeight;
FX_RECT m_DestClip;
uint8_t* m_pDestScanline;
uint8_t* m_pDestMaskScanline;
FX_RECT m_SrcClip;
const CFX_DIBSource* m_pSource;
uint32_t* m_pSrcPalette;
int m_SrcWidth;
int m_SrcHeight;
int m_SrcPitch;
int m_InterPitch;
int m_ExtraMaskPitch;
uint8_t* m_pInterBuf;
uint8_t* m_pExtraAlphaBuf;
int m_TransMethod;
int m_Flags;
CWeightTable m_WeightTable;
int m_CurRow;
int m_State;
FX_RECT FXDIB_SwapClipBox(FX_RECT& clip,
int width,
int height,
FX_BOOL bFlipY);