14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FPDFAPI_PAGE_CPDF_TEXTSTATE_H_
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FPDFAPI_PAGE_CPDF_TEXTSTATE_H_
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/cfx_shared_copy_on_write.h"
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_basic.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Document;
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_Font;
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// See PDF Reference 1.7, page 402, table 5.3.
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannenum class TextRenderingMode {
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_FILL = 0,
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_STROKE = 1,
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_FILL_STROKE = 2,
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_INVISIBLE = 3,
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_FILL_CLIP = 4,
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_STROKE_CLIP = 5,
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_FILL_STROKE_CLIP = 6,
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  MODE_CLIP = 7,
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_TextState {
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_TextState();
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ~CPDF_TextState();
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void Emplace();
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_Font* GetFont() const;
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetFont(CPDF_Font* pFont);
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetFontSize() const;
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetFontSize(FX_FLOAT size);
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const FX_FLOAT* GetMatrix() const;
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT* GetMutableMatrix();
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetCharSpace() const;
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetCharSpace(FX_FLOAT sp);
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetWordSpace() const;
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetWordSpace(FX_FLOAT sp);
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetFontSizeV() const;
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetFontSizeH() const;
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetBaselineAngle() const;
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT GetShearAngle() const;
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  TextRenderingMode GetTextMode() const;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetTextMode(TextRenderingMode mode);
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const FX_FLOAT* GetCTM() const;
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_FLOAT* GetMutableCTM();
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private:
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  class TextData {
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann   public:
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TextData();
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TextData(const TextData& src);
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ~TextData();
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    void SetFont(CPDF_Font* pFont);
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT GetFontSizeV() const;
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT GetFontSizeH() const;
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT GetBaselineAngle() const;
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT GetShearAngle() const;
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_Font* m_pFont;
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CPDF_Document* m_pDocument;
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT m_FontSize;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT m_CharSpace;
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT m_WordSpace;
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    TextRenderingMode m_TextMode;
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT m_Matrix[4];
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_FLOAT m_CTM[4];
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  };
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_SharedCopyOnWrite<TextData> m_Ref;
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode);
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool TextRenderingModeIsClipMode(const TextRenderingMode& mode);
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode);
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // CORE_FPDFAPI_PAGE_CPDF_TEXTSTATE_H_
92