2 * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
23 #ifndef LayoutTextControlSingleLine_h
24 #define LayoutTextControlSingleLine_h
26 #include "core/html/HTMLInputElement.h"
27 #include "core/layout/LayoutTextControl.h"
31 class HTMLInputElement
;
33 class LayoutTextControlSingleLine
: public LayoutTextControl
{
35 LayoutTextControlSingleLine(HTMLInputElement
*);
36 ~LayoutTextControlSingleLine() override
;
37 // FIXME: Move createInnerEditorStyle() to TextControlInnerEditorElement.
38 PassRefPtr
<ComputedStyle
> createInnerEditorStyle(const ComputedStyle
& startStyle
) const final
;
40 void capsLockStateMayHaveChanged();
43 virtual void centerContainerIfNeeded(LayoutBox
*) const { }
44 virtual LayoutUnit
computeLogicalHeightLimit() const;
45 Element
* containerElement() const;
46 Element
* editingViewPortElement() const;
47 HTMLInputElement
* inputElement() const;
50 bool hasControlClip() const final
;
51 LayoutRect
controlClipRect(const LayoutPoint
&) const final
;
52 bool isOfType(LayoutObjectType type
) const override
{ return type
== LayoutObjectTextField
|| LayoutTextControl::isOfType(type
); }
54 void paint(const PaintInfo
&, const LayoutPoint
&) override
;
55 void layout() override
;
57 bool nodeAtPoint(HitTestResult
&, const HitTestLocation
& locationInContainer
, const LayoutPoint
& accumulatedOffset
, HitTestAction
) final
;
59 void autoscroll(const IntPoint
&) final
;
61 // Subclassed to forward to our inner div.
62 LayoutUnit
scrollLeft() const final
;
63 LayoutUnit
scrollTop() const final
;
64 LayoutUnit
scrollWidth() const final
;
65 LayoutUnit
scrollHeight() const final
;
66 void setScrollLeft(LayoutUnit
) final
;
67 void setScrollTop(LayoutUnit
) final
;
69 int textBlockWidth() const;
70 float getAvgCharWidth(const AtomicString
& family
) const final
;
71 LayoutUnit
preferredContentLogicalWidth(float charWidth
) const final
;
72 LayoutUnit
computeControlLogicalHeight(LayoutUnit lineHeight
, LayoutUnit nonContentHeight
) const override
;
74 void styleDidChange(StyleDifference
, const ComputedStyle
* oldStyle
) final
;
76 bool textShouldBeTruncated() const;
78 HTMLElement
* innerSpinButtonElement() const;
80 bool m_shouldDrawCapsLockIndicator
;
81 LayoutUnit m_desiredInnerEditorLogicalHeight
;
84 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTextControlSingleLine
, isTextField());
86 // ----------------------------
88 class LayoutTextControlInnerBlock
: public LayoutBlockFlow
{
90 LayoutTextControlInnerBlock(Element
* element
) : LayoutBlockFlow(element
) { }
91 int inlineBlockBaseline(LineDirectionMode direction
) const override
{ return lastLineBoxBaseline(direction
); }
94 bool isIntrinsicallyScrollable(ScrollbarOrientation orientation
) const override
96 return orientation
== HorizontalScrollbar
;
98 bool scrollsOverflowX() const override
{ return hasOverflowClip(); }
99 bool scrollsOverflowY() const override
{ return false; }
100 bool hasLineIfEmpty() const override
{ return true; }