1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Google Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met:
78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions in binary form must reproduce the above
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution.
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Neither the name of Google Inc. nor the names of its
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission.
178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
31a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#ifndef WebThemeEngine_h
32a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define WebThemeEngine_h
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
34a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "../WebCanvas.h"
35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "../WebColor.h"
36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "../WebSize.h"
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
38d0825bca7fe65beaee391d30da42e937db621564Steve Blocknamespace WebKit {
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
40a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochstruct WebRect;
418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
42a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass WebThemeEngine {
43d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic:
44a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // The UI part which is being accessed.
45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    enum Part {
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // ScrollbarTheme parts
47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarDownArrow,
48a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarLeftArrow,
49a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarRightArrow,
50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarUpArrow,
51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarHorizontalThumb,
52a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        PartScrollbarVerticalThumb,
53cad810f21b803229eb11403f9209855525a25d57Steve Block        PartScrollbarHorizontalTrack,
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartScrollbarVerticalTrack,
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // RenderTheme parts
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartCheckbox,
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartRadio,
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartButton,
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartTextField,
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartMenuList,
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartSliderTrack,
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartSliderThumb,
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartInnerSpinButton,
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        PartProgressBar
66a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    };
67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
68a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // The current state of the associated Part.
69a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    enum State {
70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        StateDisabled,
71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        StateHover,
72a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        StateNormal,
73a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        StatePressed,
74a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    };
75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
76cad810f21b803229eb11403f9209855525a25d57Steve Block    // Extra parameters for drawing the PartScrollbarHorizontalTrack and
77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // PartScrollbarVerticalTrack.
78a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    struct ScrollbarTrackExtraParams {
79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        // The bounds of the entire track, as opposed to the part being painted.
80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        int trackX;
81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        int trackY;
82a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        int trackWidth;
83a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        int trackHeight;
84a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    };
85a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartCheckbox, PartPushButton and PartRadio.
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct ButtonExtraParams {
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool checked;
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool indeterminate; // Whether the button state is indeterminate.
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool isDefault; // Whether the button is default button.
9181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        bool hasBorder;
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        WebColor backgroundColor;
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartTextField
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct TextFieldExtraParams {
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool isTextArea;
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool isListbox;
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        WebColor backgroundColor;
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartMenuList
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct MenuListExtraParams {
10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        bool hasBorder;
10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        bool hasBorderRadius;
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int arrowX;
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int arrowY;
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        WebColor backgroundColor;
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartSliderTrack and PartSliderThumb
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct SliderExtraParams {
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool vertical;
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool inDrag;
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartInnerSpinButton
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct InnerSpinButtonExtraParams {
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool spinUp;
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool readOnly;
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Extra parameters for PartProgressBar
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    struct ProgressBarExtraParams {
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool determinate;
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int valueRectX;
12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int valueRectY;
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int valueRectWidth;
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        int valueRectHeight;
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    };
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
132a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    union ExtraParams {
133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        ScrollbarTrackExtraParams scrollbarTrack;
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        ButtonExtraParams button;
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextFieldExtraParams textField;
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        MenuListExtraParams menuList;
13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        SliderExtraParams slider;
13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        InnerSpinButtonExtraParams innerSpin;
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        ProgressBarExtraParams progressBar;
140a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    };
141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
142a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // Gets the size of the given theme part. For variable sized items
143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // like vertical scrollbar thumbs, the width will be the required width of
144a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // the track while the height will be the minimum height.
145a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual WebSize getSize(Part) { return WebSize(); }
146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    // Paint the given the given theme part.
147a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual void paint(
148a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        WebCanvas*, Part, State, const WebRect&, const ExtraParams*) {}
149d0825bca7fe65beaee391d30da42e937db621564Steve Block};
150d0825bca7fe65beaee391d30da42e937db621564Steve Block
151d0825bca7fe65beaee391d30da42e937db621564Steve Block} // namespace WebKit
152d0825bca7fe65beaee391d30da42e937db621564Steve Block
153a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
154