summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/InlineTextBox.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/InlineTextBox.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/rendering/InlineTextBox.h')
-rw-r--r--Source/WebCore/rendering/InlineTextBox.h134
1 files changed, 56 insertions, 78 deletions
diff --git a/Source/WebCore/rendering/InlineTextBox.h b/Source/WebCore/rendering/InlineTextBox.h
index f8626b8f2..9c4618a16 100644
--- a/Source/WebCore/rendering/InlineTextBox.h
+++ b/Source/WebCore/rendering/InlineTextBox.h
@@ -1,7 +1,7 @@
/*
* (C) 1999 Lars Knoll (knoll@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011, 2014 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -20,44 +20,34 @@
*
*/
-#ifndef InlineTextBox_h
-#define InlineTextBox_h
+#pragma once
#include "InlineBox.h"
#include "RenderText.h"
#include "TextRun.h"
-#include <wtf/text/StringBuilder.h>
namespace WebCore {
struct CompositionUnderline;
-class DocumentMarker;
+class RenderCombineText;
+class RenderedDocumentMarker;
class TextPainter;
+struct TextPaintStyle;
const unsigned short cNoTruncation = USHRT_MAX;
const unsigned short cFullTruncation = USHRT_MAX - 1;
-class BufferForAppendingHyphen : public StringBuilder {
-public:
- BufferForAppendingHyphen() { reserveCapacity(256); }
-};
-
class InlineTextBox : public InlineBox {
public:
explicit InlineTextBox(RenderText& renderer)
: InlineBox(renderer)
- , m_prevTextBox(0)
- , m_nextTextBox(0)
- , m_start(0)
- , m_len(0)
- , m_truncation(cNoTruncation)
{
setBehavesLikeText(true);
}
virtual ~InlineTextBox();
- RenderText& renderer() const { return toRenderText(InlineBox::renderer()); }
+ RenderText& renderer() const { return downcast<RenderText>(InlineBox::renderer()); }
const RenderStyle& lineStyle() const { return isFirstLine() ? renderer().firstLineStyle() : renderer().style(); }
InlineTextBox* prevTextBox() const { return m_prevTextBox; }
@@ -73,21 +63,27 @@ public:
void setStart(unsigned start) { m_start = start; }
void setLen(unsigned len) { m_len = len; }
- void offsetRun(int d) { ASSERT(!isDirty()); m_start += d; }
+ void offsetRun(int d) { ASSERT(!isDirty()); ASSERT(d > 0 || m_start >= static_cast<unsigned>(-d)); m_start += d; }
unsigned short truncation() const { return m_truncation; }
- virtual void markDirty(bool dirty = true) override final;
+ void markDirty(bool dirty = true) final;
using InlineBox::hasHyphen;
using InlineBox::setHasHyphen;
using InlineBox::canHaveLeadingExpansion;
using InlineBox::setCanHaveLeadingExpansion;
+ using InlineBox::canHaveTrailingExpansion;
+ using InlineBox::setCanHaveTrailingExpansion;
+ using InlineBox::forceTrailingExpansion;
+ using InlineBox::setForceTrailingExpansion;
+ using InlineBox::forceLeadingExpansion;
+ using InlineBox::setForceLeadingExpansion;
static inline bool compareByStart(const InlineTextBox* first, const InlineTextBox* second) { return first->start() < second->start(); }
- virtual int baselinePosition(FontBaseline) const override final;
- virtual LayoutUnit lineHeight() const override final;
+ int baselinePosition(FontBaseline) const final;
+ LayoutUnit lineHeight() const final;
bool emphasisMarkExistsAndIsAbove(const RenderStyle&, bool& isAbove) const;
@@ -100,9 +96,9 @@ public:
virtual void dirtyOwnLineBoxes() { dirtyLineBoxes(); }
-#ifndef NDEBUG
- virtual void showBox(int = 0) const;
- virtual const char* boxName() const;
+#if ENABLE(TREE_DEBUGGING)
+ void showLineBox(bool mark, int depth) const final;
+ const char* boxName() const final;
#endif
private:
@@ -110,97 +106,79 @@ private:
LayoutUnit selectionBottom() const;
LayoutUnit selectionHeight() const;
- TextRun constructTextRun(const RenderStyle&, const Font&, BufferForAppendingHyphen* = 0) const;
- TextRun constructTextRun(const RenderStyle&, const Font&, String, int maximumLength, BufferForAppendingHyphen* = 0) const;
+ StringView substringToRender(std::optional<unsigned> overridingLength = { }) const;
+ String hyphenatedStringForTextRun(const RenderStyle&, std::optional<unsigned> alternateLength = { }) const;
+ TextRun constructTextRun(const RenderStyle&, StringView alternateStringToRender = { }, std::optional<unsigned> alternateLength = { }) const;
+ TextRun constructTextRun(const RenderStyle&, StringView, unsigned maximumLength) const;
public:
- virtual FloatRect calculateBoundaries() const { return FloatRect(x(), y(), width(), height()); }
+ FloatRect calculateBoundaries() const override { return FloatRect(x(), y(), width(), height()); }
- virtual LayoutRect localSelectionRect(int startPos, int endPos) const;
- bool isSelected(int startPos, int endPos) const;
- void selectionStartEnd(int& sPos, int& ePos);
+ virtual LayoutRect localSelectionRect(unsigned startPos, unsigned endPos) const;
+ bool isSelected(unsigned startPos, unsigned endPos) const;
+ std::pair<unsigned, unsigned> selectionStartEnd() const;
protected:
- virtual void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom);
- virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom) override;
+ void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom) override;
+ bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom, HitTestAction) override;
private:
- virtual void deleteLine() override final;
- virtual void extractLine() override final;
- virtual void attachLine() override final;
+ void deleteLine() final;
+ void extractLine() final;
+ void attachLine() final;
public:
- virtual RenderObject::SelectionState selectionState() override final;
+ RenderObject::SelectionState selectionState() final;
private:
- virtual void clearTruncation() override final { m_truncation = cNoTruncation; }
- virtual float placeEllipsisBox(bool flowIsLTR, float visibleLeftEdge, float visibleRightEdge, float ellipsisWidth, float &truncatedWidth, bool& foundBox) override final;
+ void clearTruncation() final { m_truncation = cNoTruncation; }
+ float placeEllipsisBox(bool flowIsLTR, float visibleLeftEdge, float visibleRightEdge, float ellipsisWidth, float &truncatedWidth, bool& foundBox) final;
public:
- virtual bool isLineBreak() const override final;
-
- void setExpansion(int newExpansion)
- {
- m_logicalWidth -= expansion();
- InlineBox::setExpansion(newExpansion);
- m_logicalWidth += newExpansion;
- }
+ bool isLineBreak() const final;
private:
- virtual bool isInlineTextBox() const override final { return true; }
+ bool isInlineTextBox() const final { return true; }
public:
- virtual int caretMinOffset() const override final;
- virtual int caretMaxOffset() const override final;
+ int caretMinOffset() const final;
+ int caretMaxOffset() const final;
private:
float textPos() const; // returns the x position relative to the left start of the text line.
public:
virtual int offsetForPosition(float x, bool includePartialGlyphs = true) const;
- virtual float positionForOffset(int offset) const;
-
- // Needs to be public, so the static paintTextWithShadows() function can use it.
- static FloatSize applyShadowToGraphicsContext(GraphicsContext*, const ShadowData*, const FloatRect& textRect, bool stroked, bool opaque, bool horizontal);
+ virtual float positionForOffset(unsigned offset) const;
protected:
- void paintCompositionBackground(GraphicsContext*, const FloatPoint& boxOrigin, const RenderStyle&, const Font&, int startPos, int endPos);
- void paintDocumentMarkers(GraphicsContext*, const FloatPoint& boxOrigin, const RenderStyle&, const Font&, bool background);
- void paintCompositionUnderline(GraphicsContext*, const FloatPoint& boxOrigin, const CompositionUnderline&);
-#if PLATFORM(MAC)
- void paintCustomHighlight(const LayoutPoint&, const AtomicString& type);
-#endif
+ void paintCompositionBackground(GraphicsContext&, const FloatPoint& boxOrigin, const RenderStyle&, const FontCascade&, unsigned startPos, unsigned endPos);
+ void paintDocumentMarkers(GraphicsContext&, const FloatPoint& boxOrigin, const RenderStyle&, const FontCascade&, bool background);
+ void paintCompositionUnderline(GraphicsContext&, const FloatPoint& boxOrigin, const CompositionUnderline&);
+ unsigned clampedOffset(unsigned) const;
private:
- void paintDecoration(GraphicsContext&, const FloatPoint& boxOrigin, TextDecoration, TextDecorationStyle, const ShadowData*, TextPainter&);
- void paintSelection(GraphicsContext*, const FloatPoint& boxOrigin, const RenderStyle&, const Font&, Color textColor);
- void paintDocumentMarker(GraphicsContext*, const FloatPoint& boxOrigin, DocumentMarker*, const RenderStyle&, const Font&, bool grammar);
- void paintTextMatchMarker(GraphicsContext*, const FloatPoint& boxOrigin, DocumentMarker*, const RenderStyle&, const Font&);
- void computeRectForReplacementMarker(DocumentMarker*, const RenderStyle&, const Font&);
+ void paintDecoration(GraphicsContext&, const FontCascade&, RenderCombineText*, const TextRun&, const FloatPoint& textOrigin, const FloatRect& boxRect,
+ TextDecoration, TextPaintStyle, const ShadowData*);
+ void paintSelection(GraphicsContext&, const FloatPoint& boxOrigin, const RenderStyle&, const FontCascade&, const Color& textColor);
+ void paintDocumentMarker(GraphicsContext&, const FloatPoint& boxOrigin, RenderedDocumentMarker&, const RenderStyle&, const FontCascade&, bool grammar);
+ void paintTextMatchMarker(GraphicsContext&, const FloatPoint& boxOrigin, RenderedDocumentMarker&, const RenderStyle&, const FontCascade&);
- TextRun::ExpansionBehavior expansionBehavior() const
- {
- return (canHaveLeadingExpansion() ? TextRun::AllowLeadingExpansion : TextRun::ForbidLeadingExpansion)
- | (expansion() && nextLeafChild() ? TextRun::AllowTrailingExpansion : TextRun::ForbidTrailingExpansion);
- }
+ ExpansionBehavior expansionBehavior() const;
void behavesLikeText() const = delete;
- InlineTextBox* m_prevTextBox; // The previous box that also uses our RenderObject
- InlineTextBox* m_nextTextBox; // The next box that also uses our RenderObject
+ InlineTextBox* m_prevTextBox { nullptr }; // The previous box that also uses our RenderObject
+ InlineTextBox* m_nextTextBox { nullptr }; // The next box that also uses our RenderObject
- int m_start;
- unsigned short m_len;
+ unsigned m_start { 0 };
+ unsigned short m_len { 0 };
// Where to truncate when text overflow is applied. We use special constants to
// denote no truncation (the whole run paints) and full truncation (nothing paints at all).
- unsigned short m_truncation;
+ unsigned short m_truncation { cNoTruncation };
};
-INLINE_BOX_OBJECT_TYPE_CASTS(InlineTextBox, isInlineTextBox())
-
-void alignSelectionRectToDevicePixels(FloatRect&);
-
} // namespace WebCore
-#endif // InlineTextBox_h
+SPECIALIZE_TYPE_TRAITS_INLINE_BOX(InlineTextBox, isInlineTextBox())