OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2006 The Android Open Source Project | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 | |
8 #ifndef SkWidget_DEFINED | |
9 #define SkWidget_DEFINED | |
10 | |
11 #include "SkBitmap.h" | |
12 #include "SkDOM.h" | |
13 #include "SkPaint.h" | |
14 #include "SkString.h" | |
15 #include "SkTextBox.h" | |
16 #include "SkView.h" | |
17 | |
18 class SkEvent; | |
19 class SkInterpolator; | |
20 class SkShader; | |
21 | |
22 //////////////////////////////////////////////////////////////////////////////// | |
23 | |
24 class SkWidget : public SkView { | |
25 public: | |
26 SkWidget(uint32_t flags = 0) : SkView(flags | kFocusable_Mask | kEnabled_Mas
k) {} | |
27 | |
28 /** Call this to post the widget's event to its listeners */ | |
29 void postWidgetEvent(); | |
30 | |
31 static void Init(); | |
32 static void Term(); | |
33 protected: | |
34 // override to add slots to an event before posting | |
35 virtual void prepareWidgetEvent(SkEvent*); | |
36 virtual void onEnabledChange(); | |
37 | |
38 // <event ...> to initialize the event from XML | |
39 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node); | |
40 | |
41 private: | |
42 SkEvent fEvent; | |
43 typedef SkView INHERITED; | |
44 }; | |
45 | |
46 //////////////////////////////////////////////////////////////////////////////// | |
47 | |
48 class SkHasLabelWidget : public SkWidget { | |
49 public: | |
50 SkHasLabelWidget(uint32_t flags = 0) : SkWidget(flags) {} | |
51 | |
52 size_t getLabel(SkString* label = NULL) const; | |
53 size_t getLabel(char lable[] = NULL) const; | |
54 void setLabel(const SkString&); | |
55 void setLabel(const char label[]); | |
56 void setLabel(const char label[], size_t len); | |
57 | |
58 protected: | |
59 // called when the label changes | |
60 virtual void onLabelChange(); | |
61 | |
62 // overrides | |
63 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
64 | |
65 private: | |
66 SkString fLabel; | |
67 typedef SkWidget INHERITED; | |
68 }; | |
69 | |
70 //////////////////////////////////////////////////////////////////////////////// | |
71 | |
72 class SkButtonWidget : public SkHasLabelWidget { | |
73 public: | |
74 SkButtonWidget(uint32_t flags = 0) : SkHasLabelWidget(flags), fState(kOff_St
ate) {} | |
75 | |
76 enum State { | |
77 kOff_State, //!< XML: buttonState="off" | |
78 kOn_State, //!< XML: buttonState="on" | |
79 kUnknown_State //!< XML: buttonState="unknown" | |
80 }; | |
81 State getButtonState() const { return fState; } | |
82 void setButtonState(State); | |
83 | |
84 protected: | |
85 /** called when the label changes. default behavior is to inval the widget *
/ | |
86 virtual void onButtonStateChange(); | |
87 | |
88 // overrides | |
89 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
90 | |
91 private: | |
92 State fState; | |
93 typedef SkHasLabelWidget INHERITED; | |
94 }; | |
95 | |
96 //////////////////////////////////////////////////////////////////////////////// | |
97 | |
98 class SkPushButtonWidget : public SkButtonWidget { | |
99 public: | |
100 SkPushButtonWidget(uint32_t flags = 0) : SkButtonWidget(flags) {} | |
101 | |
102 protected: | |
103 bool onEvent(const SkEvent&) override; | |
104 void onDraw(SkCanvas*) override; | |
105 Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override; | |
106 bool onClick(Click* click) override; | |
107 | |
108 private: | |
109 typedef SkButtonWidget INHERITED; | |
110 }; | |
111 | |
112 //////////////////////////////////////////////////////////////////////////////// | |
113 | |
114 class SkCheckBoxWidget : public SkButtonWidget { | |
115 public: | |
116 SkCheckBoxWidget(uint32_t flags = 0); | |
117 | |
118 protected: | |
119 virtual bool onEvent(const SkEvent&); | |
120 virtual void onDraw(SkCanvas*); | |
121 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
122 | |
123 private: | |
124 typedef SkButtonWidget INHERITED; | |
125 }; | |
126 | |
127 //////////////////////////////////////////////////////////////////////////////// | |
128 | |
129 class SkStaticTextView : public SkView { | |
130 public: | |
131 SkStaticTextView(uint32_t flags = 0); | |
132 virtual ~SkStaticTextView(); | |
133 | |
134 enum Mode { | |
135 kFixedSize_Mode, | |
136 kAutoWidth_Mode, | |
137 kAutoHeight_Mode, | |
138 | |
139 kModeCount | |
140 }; | |
141 Mode getMode() const { return (Mode)fMode; } | |
142 void setMode(Mode); | |
143 | |
144 SkTextBox::SpacingAlign getSpacingAlign() const { return (SkTextBox::Spacing
Align)fSpacingAlign; } | |
145 void setSpacingAlign(SkTextBox::SpacingAlign); | |
146 | |
147 void getMargin(SkPoint* margin) const; | |
148 void setMargin(SkScalar dx, SkScalar dy); | |
149 | |
150 size_t getText(SkString* text = NULL) const; | |
151 size_t getText(char text[] = NULL) const; | |
152 void setText(const SkString&); | |
153 void setText(const char text[]); | |
154 void setText(const char text[], size_t len); | |
155 | |
156 void getPaint(SkPaint*) const; | |
157 void setPaint(const SkPaint&); | |
158 | |
159 protected: | |
160 // overrides | |
161 virtual void onDraw(SkCanvas*); | |
162 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
163 | |
164 private: | |
165 SkPoint fMargin; | |
166 SkString fText; | |
167 SkPaint fPaint; | |
168 uint8_t fMode; | |
169 uint8_t fSpacingAlign; | |
170 | |
171 void computeSize(); | |
172 | |
173 typedef SkView INHERITED; | |
174 }; | |
175 | |
176 //////////////////////////////////////////////////////////////////////////////// | |
177 | |
178 class SkBitmapView : public SkView { | |
179 public: | |
180 SkBitmapView(uint32_t flags = 0); | |
181 virtual ~SkBitmapView(); | |
182 | |
183 bool getBitmap(SkBitmap*) const; | |
184 void setBitmap(const SkBitmap*, bool viewOwnsPixels); | |
185 bool loadBitmapFromFile(const char path[]); | |
186 | |
187 protected: | |
188 virtual void onDraw(SkCanvas*); | |
189 virtual void onInflate(const SkDOM&, const SkDOM::Node*); | |
190 | |
191 private: | |
192 SkBitmap fBitmap; | |
193 typedef SkView INHERITED; | |
194 }; | |
195 | |
196 //////////////////////////////////////////////////////////////////////////////// | |
197 | |
198 class SkHasLabelView : public SkView { | |
199 public: | |
200 void getLabel(SkString*) const; | |
201 void setLabel(const SkString&); | |
202 void setLabel(const char label[]); | |
203 | |
204 protected: | |
205 SkString fLabel; | |
206 | |
207 // called when the label changes | |
208 virtual void onLabelChange(); | |
209 | |
210 // overrides | |
211 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
212 }; | |
213 | |
214 //////////////////////////////////////////////////////////////////////////////// | |
215 | |
216 class SkPushButtonView : public SkHasLabelView { | |
217 public: | |
218 SkPushButtonView(uint32_t flags = 0); | |
219 | |
220 protected: | |
221 virtual void onDraw(SkCanvas*); | |
222 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
223 }; | |
224 | |
225 //////////////////////////////////////////////////////////////////////////////// | |
226 | |
227 class SkCheckBoxView : public SkHasLabelView { | |
228 public: | |
229 SkCheckBoxView(uint32_t flags = 0); | |
230 | |
231 enum State { | |
232 kOff_State, | |
233 kOn_State, | |
234 kMaybe_State | |
235 }; | |
236 State getState() const { return fState; } | |
237 void setState(State); | |
238 | |
239 protected: | |
240 virtual void onDraw(SkCanvas*); | |
241 virtual void onInflate(const SkDOM& dom, const SkDOM::Node*); | |
242 | |
243 private: | |
244 State fState; | |
245 }; | |
246 | |
247 //////////////////////////////////////////////////////////////////////////////// | |
248 | |
249 class SkProgressView : public SkView { | |
250 public: | |
251 SkProgressView(uint32_t flags = 0); | |
252 virtual ~SkProgressView(); | |
253 | |
254 uint16_t getValue() const { return fValue; } | |
255 uint16_t getMax() const { return fMax; } | |
256 | |
257 void setMax(U16CPU max); | |
258 void setValue(U16CPU value); | |
259 | |
260 protected: | |
261 virtual void onDraw(SkCanvas*); | |
262 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node); | |
263 | |
264 private: | |
265 uint16_t fValue, fMax; | |
266 SkShader* fOnShader, *fOffShader; | |
267 SkInterpolator* fInterp; | |
268 bool fDoInterp; | |
269 | |
270 typedef SkView INHERITED; | |
271 }; | |
272 | |
273 //////////////////////////////////////////////////////////////////////////////// | |
274 | |
275 class SkListSource : public SkEventSink { | |
276 public: | |
277 virtual int countRows() = 0; | |
278 virtual void getRow(int index, SkString* left, SkString* right) = 0; | |
279 virtual SkEvent* getEvent(int index); | |
280 | |
281 static SkListSource* CreateFromDir(const char path[], const char suffix[], | |
282 const char targetPrefix[]); | |
283 static SkListSource* CreateFromDOM(const SkDOM& dom, const SkDOM::Node* node
); | |
284 }; | |
285 | |
286 //////////////////////////////////////////////////////////////////////////////// | |
287 | |
288 class SkListView : public SkView { | |
289 public: | |
290 SkListView(uint32_t flags = 0); | |
291 virtual ~SkListView(); | |
292 | |
293 SkScalar getRowHeight() const { return fRowHeight; } | |
294 void setRowHeight(SkScalar); | |
295 | |
296 /** Return the index of the selected row, or -1 if none | |
297 */ | |
298 int getSelection() const { return fCurrIndex; } | |
299 /** Set the index of the selected row, or -1 for none | |
300 */ | |
301 void setSelection(int); | |
302 | |
303 void moveSelectionUp(); | |
304 void moveSelectionDown(); | |
305 | |
306 enum Attr { | |
307 kBG_Attr, | |
308 kNormalText_Attr, | |
309 kHiliteText_Attr, | |
310 kHiliteCell_Attr, | |
311 kAttrCount | |
312 }; | |
313 SkPaint& paint(Attr); | |
314 | |
315 SkListSource* getListSource() const { return fSource; } | |
316 SkListSource* setListSource(SkListSource*); | |
317 | |
318 #if 0 | |
319 enum Action { | |
320 kSelectionChange_Action, | |
321 kSelectionPicked_Action, | |
322 kActionCount | |
323 }; | |
324 /** If event is not null, it is retained by the view, and a copy | |
325 of the event will be posted to its listeners when the specified | |
326 action occurs. If event is null, then no event will be posted for | |
327 the specified action. | |
328 */ | |
329 void setActionEvent(Action, SkEvent* event); | |
330 #endif | |
331 | |
332 protected: | |
333 virtual void onDraw(SkCanvas*); | |
334 virtual void onSizeChange(); | |
335 virtual bool onEvent(const SkEvent&); | |
336 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node); | |
337 | |
338 private: | |
339 SkPaint fPaint[kAttrCount]; | |
340 SkListSource* fSource; | |
341 SkScalar fRowHeight; | |
342 int fCurrIndex; // logical index | |
343 int fScrollIndex; // logical index of top-most visible row | |
344 int fVisibleRowCount; | |
345 SkString* fStrCache; | |
346 | |
347 void dirtyStrCache(); | |
348 void ensureStrCache(int visibleCount); | |
349 | |
350 int logicalToVisualIndex(int index) const { return index - fScrollIndex;
} | |
351 void invalSelection(); | |
352 bool getRowRect(int index, SkRect*) const; | |
353 void ensureSelectionIsVisible(); | |
354 | |
355 typedef SkView INHERITED; | |
356 }; | |
357 | |
358 //////////////////////////////////////////////////////////////////////////////// | |
359 | |
360 class SkGridView : public SkView { | |
361 public: | |
362 SkGridView(uint32_t flags = 0); | |
363 virtual ~SkGridView(); | |
364 | |
365 void getCellSize(SkPoint*) const; | |
366 void setCellSize(SkScalar x, SkScalar y); | |
367 | |
368 /** Return the index of the selected item, or -1 if none | |
369 */ | |
370 int getSelection() const { return fCurrIndex; } | |
371 /** Set the index of the selected row, or -1 for none | |
372 */ | |
373 void setSelection(int); | |
374 | |
375 void moveSelectionUp(); | |
376 void moveSelectionDown(); | |
377 | |
378 enum Attr { | |
379 kBG_Attr, | |
380 kHiliteCell_Attr, | |
381 kAttrCount | |
382 }; | |
383 SkPaint& paint(Attr); | |
384 | |
385 SkListSource* getListSource() const { return fSource; } | |
386 SkListSource* setListSource(SkListSource*); | |
387 | |
388 protected: | |
389 virtual void onDraw(SkCanvas*); | |
390 virtual void onSizeChange(); | |
391 virtual bool onEvent(const SkEvent&); | |
392 virtual void onInflate(const SkDOM& dom, const SkDOM::Node* node); | |
393 | |
394 private: | |
395 SkView* fScrollBar; | |
396 SkPaint fPaint[kAttrCount]; | |
397 SkListSource* fSource; | |
398 int fCurrIndex; // logical index | |
399 | |
400 SkPoint fCellSize; | |
401 SkIPoint fVisibleCount; | |
402 | |
403 int logicalToVisualIndex(int index) const { return index; } | |
404 void invalSelection(); | |
405 bool getCellRect(int index, SkRect*) const; | |
406 void ensureSelectionIsVisible(); | |
407 | |
408 typedef SkView INHERITED; | |
409 }; | |
410 | |
411 #endif | |
OLD | NEW |