1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful, 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details. 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA. 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef RenderTextControlSingleLine_h 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define RenderTextControlSingleLine_h 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "PopupMenuClient.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderTextControl.h" 28db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "SearchPopupMenu.h" 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Timer.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass InputElement; 3406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass InputFieldSpeechButtonElement; 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass SearchFieldCancelButtonElement; 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass SearchFieldResultsButtonElement; 3721939df44de1705786c545cd1bf519d47250322dBen Murdochclass SpinButtonElement; 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass TextControlInnerElement; 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass RenderTextControlSingleLine : public RenderTextControl, private PopupMenuClient { 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectpublic: 42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderTextControlSingleLine(Node*, bool); 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual ~RenderTextControlSingleLine(); 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool placeholderIsVisible() const { return m_placeholderVisible; } 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool placeholderShouldBeVisible() const; 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void addSearchResult(); 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void stopSearchEventTimer(); 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool popupIsVisible() const { return m_searchPopupIsVisible; } 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void showPopup(); 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void hidePopup(); 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void forwardEvent(Event*); 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void capsLockStateMayHaveChanged(); 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5921939df44de1705786c545cd1bf519d47250322dBen Murdoch // Decoration width outside of the text field. 6021939df44de1705786c545cd1bf519d47250322dBen Murdoch int decorationWidthRight() const; 6121939df44de1705786c545cd1bf519d47250322dBen Murdoch 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate: 6321939df44de1705786c545cd1bf519d47250322dBen Murdoch int preferredDecorationWidthRight() const; 6406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual bool hasControlClip() const; 6521939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual IntRect controlClipRect(int tx, int ty) const; 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual bool isTextField() const { return true; } 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void subtreeHasChanged(); 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void paint(PaintInfo&, int tx, int ty); 7021939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual void paintBoxDecorations(PaintInfo&, int tx, int ty); 7121939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty); 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void layout(); 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void autoscroll(); 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Subclassed to forward to our inner div. 798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int scrollLeft() const; 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int scrollTop() const; 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int scrollWidth() const; 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int scrollHeight() const; 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setScrollLeft(int); 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setScrollTop(int); 855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Node** stopNode = 0); 86f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool logicalScroll(ScrollLogicalDirection, ScrollGranularity, float multiplier = 1, Node** stopNode = 0); 878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int textBlockWidth() const; 89692e5dbf12901edacf14812a6fae25462920af42Steve Block virtual float getAvgCharWidth(AtomicString family); 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int preferredContentWidth(float charWidth) const; 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void adjustControlHeightBasedOnLineHeight(int lineHeight); 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void createSubtreeIfNeeded(); 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void updateFromElement(); 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void cacheSelection(int start, int end); 968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual RenderStyle* textBaseStyle() const; 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual PassRefPtr<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const; 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PassRefPtr<RenderStyle> createInnerBlockStyle(const RenderStyle* startStyle) const; 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PassRefPtr<RenderStyle> createResultsButtonStyle(const RenderStyle* startStyle) const; 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PassRefPtr<RenderStyle> createCancelButtonStyle(const RenderStyle* startStyle) const; 103967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch PassRefPtr<RenderStyle> createInnerSpinButtonStyle() const; 10421939df44de1705786c545cd1bf519d47250322dBen Murdoch PassRefPtr<RenderStyle> createOuterSpinButtonStyle() const; 10506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if ENABLE(INPUT_SPEECH) 106dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PassRefPtr<RenderStyle> createSpeechButtonStyle() const; 10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void updateCancelButtonVisibility() const; 1108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian EVisibility visibilityForCancelButton() const; 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const AtomicString& autosaveName() const; 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void startSearchEventTimer(); 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void searchEventTimerFired(Timer<RenderTextControlSingleLine>*); 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // PopupMenuClient methods 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void valueChanged(unsigned listIndex, bool fireEvents = true); 118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void selectionChanged(unsigned, bool) {} 119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void selectionCleared() {} 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual String itemText(unsigned listIndex) const; 121967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual String itemLabel(unsigned listIndex) const; 1220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen virtual String itemIcon(unsigned listIndex) const; 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual String itemToolTip(unsigned) const { return String(); } 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual String itemAccessibilityText(unsigned) const { return String(); } 125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool itemIsEnabled(unsigned listIndex) const; 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual PopupMenuStyle itemStyle(unsigned listIndex) const; 127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual PopupMenuStyle menuStyle() const; 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int clientInsetLeft() const; 129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int clientInsetRight() const; 130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int clientPaddingLeft() const; 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int clientPaddingRight() const; 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int listSize() const; 133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual int selectedIndex() const; 134231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual void popupDidHide(); 135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool itemIsSeparator(unsigned listIndex) const; 136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool itemIsLabel(unsigned listIndex) const; 137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool itemIsSelected(unsigned listIndex) const; 138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool shouldPopOver() const { return false; } 139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool valueShouldChangeOnHotTrack() const { return false; } 140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void setTextFromItem(unsigned listIndex); 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual FontSelector* fontSelector() const; 142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual HostWindow* hostWindow() const; 143ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual PassRefPtr<Scrollbar> createScrollbar(ScrollableArea*, ScrollbarOrientation, ScrollbarControlSize); 144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project InputElement* inputElement() const; 146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual int textBlockInsetLeft() const; 1486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual int textBlockInsetRight() const; 149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual int textBlockInsetTop() const; 1506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_searchPopupIsVisible; 152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_shouldDrawCapsLockIndicator; 153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<TextControlInnerElement> m_innerBlock; 155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<SearchFieldResultsButtonElement> m_resultsButton; 156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<SearchFieldCancelButtonElement> m_cancelButton; 157967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch RefPtr<TextControlInnerElement> m_innerSpinButton; 15821939df44de1705786c545cd1bf519d47250322dBen Murdoch RefPtr<TextControlInnerElement> m_outerSpinButton; 15906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if ENABLE(INPUT_SPEECH) 16006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RefPtr<InputFieldSpeechButtonElement> m_speechButton; 16106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Timer<RenderTextControlSingleLine> m_searchEventTimer; 164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<SearchPopupMenu> m_searchPopup; 165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Vector<String> m_recentSearches; 166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}; 167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline RenderTextControlSingleLine* toRenderTextControlSingleLine(RenderObject* object) 1696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(!object || object->isTextField()); 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<RenderTextControlSingleLine*>(object); 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will catch anyone doing an unnecessary cast. 1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid toRenderTextControlSingleLine(const RenderTextControlSingleLine*); 1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 17781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// ---------------------------- 17881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 17981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass RenderTextControlInnerBlock : public RenderBlock { 18081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic: 18181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RenderTextControlInnerBlock(Node* node, bool isMultiLine) : RenderBlock(node), m_multiLine(isMultiLine) { } 18281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 18381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate: 18481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual bool hasLineIfEmpty() const { return true; } 18581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual VisiblePosition positionForPoint(const IntPoint&); 18681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 18781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_multiLine; 18881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}; 18981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 191635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 192635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 193