#ifndef RenderTextControlSingleLine_h
#define RenderTextControlSingleLine_h
#include "core/html/HTMLInputElement.h"
#include "core/rendering/RenderTextControl.h"
namespace WebCore {
class HTMLInputElement;
class RenderTextControlSingleLine : public RenderTextControl {
public:
RenderTextControlSingleLine(HTMLInputElement*);
virtual ~RenderTextControlSingleLine();
virtual PassRefPtr<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const OVERRIDE FINAL;
void capsLockStateMayHaveChanged();
protected:
virtual void centerContainerIfNeeded(RenderBox*) const { }
virtual LayoutUnit computeLogicalHeightLimit() const;
Element* containerElement() const;
Element* editingViewPortElement() const;
HTMLInputElement* inputElement() const;
virtual void updateFromElement() OVERRIDE FINAL;
private:
virtual bool hasControlClip() const OVERRIDE FINAL;
virtual LayoutRect controlClipRect(const LayoutPoint&) const OVERRIDE FINAL;
virtual bool isTextField() const OVERRIDE FINAL { return true; }
virtual void paint(PaintInfo&, const LayoutPoint&) OVERRIDE;
virtual void layout() OVERRIDE;
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) OVERRIDE FINAL;
virtual void autoscroll(const IntPoint&) OVERRIDE FINAL;
virtual int scrollLeft() const OVERRIDE FINAL;
virtual int scrollTop() const OVERRIDE FINAL;
virtual int scrollWidth() const OVERRIDE FINAL;
virtual int scrollHeight() const OVERRIDE FINAL;
virtual void setScrollLeft(int) OVERRIDE FINAL;
virtual void setScrollTop(int) OVERRIDE FINAL;
int textBlockWidth() const;
virtual float getAvgCharWidth(AtomicString family) OVERRIDE FINAL;
virtual LayoutUnit preferredContentLogicalWidth(float charWidth) const OVERRIDE FINAL;
virtual LayoutUnit computeControlLogicalHeight(LayoutUnit lineHeight, LayoutUnit nonContentHeight) const OVERRIDE;
virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) OVERRIDE FINAL;
bool textShouldBeTruncated() const;
HTMLElement* innerSpinButtonElement() const;
bool m_shouldDrawCapsLockIndicator;
LayoutUnit m_desiredInnerTextLogicalHeight;
};
DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderTextControlSingleLine, isTextField());
class RenderTextControlInnerBlock : public RenderBlockFlow {
public:
RenderTextControlInnerBlock(Element* element) : RenderBlockFlow(element) { }
virtual int inlineBlockBaseline(LineDirectionMode direction) const OVERRIDE { return lastLineBoxBaseline(direction); }
private:
virtual bool isIntristicallyScrollable(ScrollbarOrientation orientation) const OVERRIDE
{
return orientation == HorizontalScrollbar;
}
virtual bool scrollsOverflowX() const OVERRIDE { return hasOverflowClip(); }
virtual bool scrollsOverflowY() const OVERRIDE { return false; }
virtual bool hasLineIfEmpty() const OVERRIDE { return true; }
};
}
#endif