blob: 0b151a9c298eaa2e10a10ce1121122d2eb5ae3f7 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_PAINTER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_PAINTER_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/paint/text_painter_base.h"
#include "third_party/blink/renderer/platform/graphics/dom_node_id.h"
namespace blink {
class TextRun;
struct TextRunPaintInfo;
class LayoutTextCombine;
// Text painter for legacy layout. Operates on TextRuns.
class CORE_EXPORT TextPainter : public TextPainterBase {
STACK_ALLOCATED();
public:
TextPainter(GraphicsContext& context,
const Font& font,
const TextRun& run,
const PhysicalOffset& text_origin,
const PhysicalRect& text_frame_rect,
bool horizontal)
: TextPainterBase(context,
font,
text_origin,
text_frame_rect,
horizontal),
run_(run),
combined_text_(nullptr) {}
~TextPainter() = default;
void SetCombinedText(LayoutTextCombine* combined_text) {
combined_text_ = combined_text;
has_combined_text_ = combined_text_ ? true : false;
}
void ClipDecorationsStripe(float upper,
float stripe_width,
float dilation) override;
void Paint(unsigned start_offset,
unsigned end_offset,
unsigned length,
const TextPaintStyle&,
DOMNodeId node_id);
private:
template <PaintInternalStep step>
void PaintInternalRun(TextRunPaintInfo&,
unsigned from,
unsigned to,
DOMNodeId node_id);
template <PaintInternalStep step>
void PaintInternal(unsigned start_offset,
unsigned end_offset,
unsigned truncation_point,
DOMNodeId node_id);
void PaintEmphasisMarkForCombinedText();
const TextRun& run_;
LayoutTextCombine* combined_text_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_PAINTER_H_