diff -r 000000000000 -r 4f2f89ce4247 WebCore/rendering/RenderTextControlSingleLine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/rendering/RenderTextControlSingleLine.h Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef RenderTextControlSingleLine_h +#define RenderTextControlSingleLine_h + +#include "PopupMenuClient.h" +#include "RenderTextControl.h" +#include "Timer.h" + +namespace WebCore { + +class InputElement; +class InputFieldSpeechButtonElement; +class SearchFieldCancelButtonElement; +class SearchFieldResultsButtonElement; +class SearchPopupMenu; +class SpinButtonElement; +class TextControlInnerElement; + +class RenderTextControlSingleLine : public RenderTextControl, private PopupMenuClient { +public: + RenderTextControlSingleLine(Node*, bool); + virtual ~RenderTextControlSingleLine(); + + bool placeholderIsVisible() const { return m_placeholderVisible; } + bool placeholderShouldBeVisible() const; + + void addSearchResult(); + void stopSearchEventTimer(); + + bool popupIsVisible() const { return m_searchPopupIsVisible; } + void showPopup(); + void hidePopup(); + + void forwardEvent(Event*); + + void capsLockStateMayHaveChanged(); + + // Decoration width outside of the text field. + int decorationWidthRight() const; + +private: + int preferredDecorationWidthRight() const; + virtual bool hasControlClip() const; + virtual IntRect controlClipRect(int tx, int ty) const; + virtual bool isTextField() const { return true; } + + virtual void subtreeHasChanged(); + virtual void paint(PaintInfo&, int tx, int ty); + virtual void paintBoxDecorations(PaintInfo&, int tx, int ty); + virtual void addFocusRingRects(Vector&, int tx, int ty); + virtual void layout(); + + virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); + + virtual void autoscroll(); + + // Subclassed to forward to our inner div. + virtual int scrollLeft() const; + virtual int scrollTop() const; + virtual int scrollWidth() const; + virtual int scrollHeight() const; + virtual void setScrollLeft(int); + virtual void setScrollTop(int); + virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1.0f, Node** stopNode = 0); + + int textBlockWidth() const; + virtual float getAvgCharWidth(AtomicString family); + virtual int preferredContentWidth(float charWidth) const; + virtual void adjustControlHeightBasedOnLineHeight(int lineHeight); + + void createSubtreeIfNeeded(); + virtual void updateFromElement(); + virtual void cacheSelection(int start, int end); + virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + + virtual RenderStyle* textBaseStyle() const; + virtual PassRefPtr createInnerTextStyle(const RenderStyle* startStyle) const; + PassRefPtr createInnerBlockStyle(const RenderStyle* startStyle) const; + PassRefPtr createResultsButtonStyle(const RenderStyle* startStyle) const; + PassRefPtr createCancelButtonStyle(const RenderStyle* startStyle) const; + PassRefPtr createInnerSpinButtonStyle() const; + PassRefPtr createOuterSpinButtonStyle() const; +#if ENABLE(INPUT_SPEECH) + PassRefPtr createSpeechButtonStyle(const RenderStyle* startStyle) const; +#endif + + void updateCancelButtonVisibility() const; + EVisibility visibilityForCancelButton() const; + const AtomicString& autosaveName() const; + + void startSearchEventTimer(); + void searchEventTimerFired(Timer*); + + // PopupMenuClient methods + virtual void valueChanged(unsigned listIndex, bool fireEvents = true); + virtual void selectionChanged(unsigned, bool) {} + virtual void selectionCleared() {} + virtual String itemText(unsigned listIndex) const; + virtual String itemLabel(unsigned listIndex) const; + virtual String itemToolTip(unsigned) const { return String(); } + virtual String itemAccessibilityText(unsigned) const { return String(); } + virtual bool itemIsEnabled(unsigned listIndex) const; + virtual PopupMenuStyle itemStyle(unsigned listIndex) const; + virtual PopupMenuStyle menuStyle() const; + virtual int clientInsetLeft() const; + virtual int clientInsetRight() const; + virtual int clientPaddingLeft() const; + virtual int clientPaddingRight() const; + virtual int listSize() const; + virtual int selectedIndex() const; + virtual void popupDidHide(); + virtual bool itemIsSeparator(unsigned listIndex) const; + virtual bool itemIsLabel(unsigned listIndex) const; + virtual bool itemIsSelected(unsigned listIndex) const; + virtual bool shouldPopOver() const { return false; } + virtual bool valueShouldChangeOnHotTrack() const { return false; } + virtual void setTextFromItem(unsigned listIndex); + virtual FontSelector* fontSelector() const; + virtual HostWindow* hostWindow() const; + virtual PassRefPtr createScrollbar(ScrollbarClient*, ScrollbarOrientation, ScrollbarControlSize); + + InputElement* inputElement() const; + + bool m_searchPopupIsVisible; + bool m_shouldDrawCapsLockIndicator; + + RefPtr m_innerBlock; + RefPtr m_resultsButton; + RefPtr m_cancelButton; + RefPtr m_innerSpinButton; + RefPtr m_outerSpinButton; +#if ENABLE(INPUT_SPEECH) + RefPtr m_speechButton; +#endif + + Timer m_searchEventTimer; + RefPtr m_searchPopup; + Vector m_recentSearches; +}; + +inline RenderTextControlSingleLine* toRenderTextControlSingleLine(RenderObject* object) +{ + ASSERT(!object || object->isTextField()); + return static_cast(object); +} + +// This will catch anyone doing an unnecessary cast. +void toRenderTextControlSingleLine(const RenderTextControlSingleLine*); + +} + +#endif