1 /*
2 * This file is part of the html renderer for KDE.
3 *
4 * Copyright (C) 2005 Apple Computer
5 *
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.
10 *
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.
15 *
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.
20 *
21 */
22
23 #ifndef RenderButton_h
24 #define RenderButton_h
25
26 #include "RenderFlexibleBox.h"
27 #include "Timer.h"
28 #include <wtf/OwnPtr.h>
29
30 namespace WebCore {
31
32 class RenderTextFragment;
33
34 // RenderButtons are just like normal flexboxes except that they will generate an anonymous block child.
35 // For inputs, they will also generate an anonymous RenderText and keep its style and content up
36 // to date as the button changes.
37 class RenderButton : public RenderFlexibleBox {
38 public:
39 RenderButton(Node*);
40
renderName()41 virtual const char* renderName() const { return "RenderButton"; }
isRenderButton()42 virtual bool isRenderButton() const { return true; }
43
44 virtual void addChild(RenderObject* newChild, RenderObject *beforeChild = 0);
45 virtual void removeChild(RenderObject*);
removeLeftoverAnonymousBlock(RenderBlock *)46 virtual void removeLeftoverAnonymousBlock(RenderBlock*) { }
createsAnonymousWrapper()47 virtual bool createsAnonymousWrapper() const { return true; }
48
49 void setupInnerStyle(RenderStyle*);
50 virtual void updateFromElement();
51
52 virtual void updateBeforeAfterContent(PseudoId);
53
hasControlClip()54 virtual bool hasControlClip() const { return true; }
55 virtual IntRect controlClipRect(int /*tx*/, int /*ty*/) const;
56
57 void setText(const String&);
58 String text() const;
59
60 virtual bool canHaveChildren() const;
61
62 protected:
63 virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
64 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
65
hasLineIfEmpty()66 virtual bool hasLineIfEmpty() const { return true; }
67
68 void timerFired(Timer<RenderButton>*);
69
70 RenderTextFragment* m_buttonText;
71 RenderBlock* m_inner;
72
73 OwnPtr<Timer<RenderButton> > m_timer;
74 bool m_default;
75 };
76
toRenderButton(RenderObject * object)77 inline RenderButton* toRenderButton(RenderObject* object)
78 {
79 ASSERT(!object || object->isRenderButton());
80 return static_cast<RenderButton*>(object);
81 }
82
toRenderButton(const RenderObject * object)83 inline const RenderButton* toRenderButton(const RenderObject* object)
84 {
85 ASSERT(!object || object->isRenderButton());
86 return static_cast<const RenderButton*>(object);
87 }
88
89 // This will catch anyone doing an unnecessary cast.
90 void toRenderButton(const RenderButton*);
91
92 } // namespace WebCore
93
94 #endif // RenderButton_h
95