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