1 /* 2 * Copyright (C) 2006, 2008, 2010 Apple Inc. All rights reserved. 3 * Copyright (C) 2010 Google Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27 #ifndef TextControlInnerElements_h 28 #define TextControlInnerElements_h 29 30 #include "core/html/HTMLDivElement.h" 31 #include "core/speech/SpeechInputListener.h" 32 #include "wtf/Forward.h" 33 34 namespace WebCore { 35 36 class SpeechInput; 37 38 class TextControlInnerContainer FINAL : public HTMLDivElement { 39 public: 40 static PassRefPtr<TextControlInnerContainer> create(Document&); 41 protected: 42 TextControlInnerContainer(Document&); 43 virtual RenderObject* createRenderer(RenderStyle*); 44 }; 45 46 class EditingViewPortElement FINAL : public HTMLDivElement { 47 public: 48 static PassRefPtr<EditingViewPortElement> create(Document&); 49 50 protected: 51 EditingViewPortElement(Document&); 52 virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE; 53 54 private: supportsFocus()55 virtual bool supportsFocus() const OVERRIDE { return false; } 56 }; 57 58 class TextControlInnerTextElement FINAL : public HTMLDivElement { 59 public: 60 static PassRefPtr<TextControlInnerTextElement> create(Document&); 61 62 virtual void defaultEventHandler(Event*); 63 64 private: 65 TextControlInnerTextElement(Document&); 66 virtual RenderObject* createRenderer(RenderStyle*); 67 virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE; supportsFocus()68 virtual bool supportsFocus() const OVERRIDE { return false; } 69 }; 70 71 class SearchFieldDecorationElement FINAL : public HTMLDivElement { 72 public: 73 static PassRefPtr<SearchFieldDecorationElement> create(Document&); 74 75 virtual void defaultEventHandler(Event*); 76 virtual bool willRespondToMouseClickEvents() OVERRIDE; 77 78 private: 79 SearchFieldDecorationElement(Document&); 80 virtual const AtomicString& pseudo() const OVERRIDE; supportsFocus()81 virtual bool supportsFocus() const OVERRIDE { return false; } 82 }; 83 84 class SearchFieldCancelButtonElement FINAL : public HTMLDivElement { 85 public: 86 static PassRefPtr<SearchFieldCancelButtonElement> create(Document&); 87 88 virtual void defaultEventHandler(Event*); 89 virtual bool willRespondToMouseClickEvents() OVERRIDE; 90 91 private: 92 SearchFieldCancelButtonElement(Document&); 93 virtual void detach(const AttachContext& = AttachContext()) OVERRIDE; supportsFocus()94 virtual bool supportsFocus() const OVERRIDE { return false; } 95 96 bool m_capturing; 97 }; 98 99 #if ENABLE(INPUT_SPEECH) 100 101 class InputFieldSpeechButtonElement FINAL 102 : public HTMLDivElement, 103 public SpeechInputListener { 104 public: 105 enum SpeechInputState { 106 Idle, 107 Recording, 108 Recognizing, 109 }; 110 111 static PassRefPtr<InputFieldSpeechButtonElement> create(Document&); 112 virtual ~InputFieldSpeechButtonElement(); 113 114 virtual void detach(const AttachContext& = AttachContext()) OVERRIDE; 115 virtual void defaultEventHandler(Event*); 116 virtual bool willRespondToMouseClickEvents(); isInputFieldSpeechButtonElement()117 virtual bool isInputFieldSpeechButtonElement() const { return true; } state()118 SpeechInputState state() const { return m_state; } 119 void startSpeechInput(); 120 void stopSpeechInput(); 121 122 // SpeechInputListener methods. 123 void didCompleteRecording(int); 124 void didCompleteRecognition(int); 125 void setRecognitionResult(int, const SpeechInputResultArray&); 126 127 private: 128 InputFieldSpeechButtonElement(Document&); 129 SpeechInput* speechInput(); 130 void setState(SpeechInputState state); isMouseFocusable()131 virtual bool isMouseFocusable() const { return false; } 132 virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; 133 134 bool m_capturing; 135 SpeechInputState m_state; 136 int m_listenerId; 137 SpeechInputResultArray m_results; 138 }; 139 140 DEFINE_TYPE_CASTS(InputFieldSpeechButtonElement, Element, element, element->isInputFieldSpeechButtonElement(), element.isInputFieldSpeechButtonElement()); 141 142 #endif // ENABLE(INPUT_SPEECH) 143 144 } // namespace 145 146 #endif 147