blob: 3feb845d2dae53fd49c3bf3ac4d086016d37e90a [file] [log] [blame]
// Copyright 2016 The PDFium Authors
// 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. http://www.foxitsoftware.com
#ifndef CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_
#define CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_
#include "core/fpdfapi/page/cpdf_graphicstates.h"
#include "core/fxcrt/fx_coordinates.h"
class CPDF_Array;
class CPDF_Dictionary;
class CPDF_StreamContentParser;
class CPDF_AllStates {
public:
CPDF_AllStates();
CPDF_AllStates(const CPDF_AllStates& that);
CPDF_AllStates& operator=(const CPDF_AllStates& that);
~CPDF_AllStates();
void SetDefaultStates();
void ProcessExtGS(const CPDF_Dictionary* pGS,
CPDF_StreamContentParser* pParser);
void SetLineDash(const CPDF_Array* pArray, float phase, float scale);
CFX_PointF GetTransformedTextPosition() const;
void ResetTextPosition();
void MoveTextPoint(const CFX_PointF& point);
void MoveTextToNextLine();
void IncrementTextPositionX(float value);
void IncrementTextPositionY(float value);
const CFX_Matrix& text_matrix() const { return m_TextMatrix; }
void set_text_matrix(const CFX_Matrix& matrix) { m_TextMatrix = matrix; }
const CFX_Matrix& current_transformation_matrix() const { return m_CTM; }
void set_current_transformation_matrix(const CFX_Matrix& matrix) {
m_CTM = matrix;
}
void prepend_to_current_transformation_matrix(const CFX_Matrix& matrix) {
m_CTM = matrix * m_CTM;
}
const CFX_Matrix& parent_matrix() const { return m_ParentMatrix; }
void set_parent_matrix(const CFX_Matrix& matrix) { m_ParentMatrix = matrix; }
void set_text_leading(float value) { m_TextLeading = value; }
void set_text_rise(float value) { m_TextRise = value; }
float text_horz_scale() const { return m_TextHorzScale; }
void set_text_horz_scale(float value) { m_TextHorzScale = value; }
const CPDF_ClipPath& clip_path() const { return m_GraphicStates.clip_path(); }
CPDF_ClipPath& mutable_clip_path() {
return m_GraphicStates.mutable_clip_path();
}
const CFX_GraphState& graph_state() const {
return m_GraphicStates.graph_state();
}
CFX_GraphState& mutable_graph_state() {
return m_GraphicStates.mutable_graph_state();
}
const CPDF_ColorState& color_state() const {
return m_GraphicStates.color_state();
}
CPDF_ColorState& mutable_color_state() {
return m_GraphicStates.mutable_color_state();
}
const CPDF_TextState& text_state() const {
return m_GraphicStates.text_state();
}
CPDF_TextState& mutable_text_state() {
return m_GraphicStates.mutable_text_state();
}
const CPDF_GeneralState& general_state() const {
return m_GraphicStates.general_state();
}
CPDF_GeneralState& mutable_general_state() {
return m_GraphicStates.mutable_general_state();
}
const CPDF_GraphicStates& graphic_states() const { return m_GraphicStates; }
private:
CPDF_GraphicStates m_GraphicStates;
CFX_Matrix m_TextMatrix;
CFX_Matrix m_CTM;
CFX_Matrix m_ParentMatrix;
CFX_PointF m_TextPos;
CFX_PointF m_TextLinePos;
float m_TextLeading = 0.0f;
float m_TextRise = 0.0f;
float m_TextHorzScale = 1.0f;
};
#endif // CORE_FPDFAPI_PAGE_CPDF_ALLSTATES_H_