18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This file is part of the WebKit project. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Zack Rusin <zack@kde.org> 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2006 Dirk Mueller <mueller@kde.org> 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2006 Nikolas Zimmermann <zimmermann@kde.org> 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Holger Hans Peter Freyther 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderThemeQt.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSStyleSelector.h" 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSStyleSheet.h" 35cad810f21b803229eb11403f9209855525a25d57Steve Block#include "CSSValueKeywords.h" 36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Chrome.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ChromeClientQt.h" 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Color.h" 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Document.h" 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Font.h" 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FontSelector.h" 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GraphicsContext.h" 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLInputElement.h" 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLMediaElement.h" 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLNames.h" 4621939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "QtMobileWebStyle.h" 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(VIDEO) 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "MediaControlElements.h" 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PaintInfo.h" 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Page.h" 55d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "QWebPageClient.h" 56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "QtStyleOptionWebComboBox.h" 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "qwebsettings.h" 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderBox.h" 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG) 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RenderProgress.h" 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 62d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "RenderSlider.h" 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderTheme.h" 64d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "ScrollbarThemeQt.h" 65545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "TimeRanges.h" 66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "UserAgentStyleSheets.h" 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QApplication> 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QColor> 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QFile> 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QLineEdit> 7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QMacStyle> 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QPainter> 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QPushButton> 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QStyleFactory> 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QStyleOptionButton> 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QStyleOptionFrameV2> 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG) 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QStyleOptionProgressBarV2> 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 81d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <QStyleOptionSlider> 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QWidget> 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88e14391e94c850b8bd03680c23b38978db68687a8John Reckinline static void initStyleOption(QWidget *widget, QStyleOption& option) 89e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 90e14391e94c850b8bd03680c23b38978db68687a8John Reck if (widget) 91e14391e94c850b8bd03680c23b38978db68687a8John Reck option.initFrom(widget); 92e14391e94c850b8bd03680c23b38978db68687a8John Reck else { 93e14391e94c850b8bd03680c23b38978db68687a8John Reck /* 94e14391e94c850b8bd03680c23b38978db68687a8John Reck If a widget is not directly available for rendering, we fallback to default 95e14391e94c850b8bd03680c23b38978db68687a8John Reck value for an active widget. 96e14391e94c850b8bd03680c23b38978db68687a8John Reck */ 97e14391e94c850b8bd03680c23b38978db68687a8John Reck option.state = QStyle::State_Active | QStyle::State_Enabled; 98e14391e94c850b8bd03680c23b38978db68687a8John Reck } 99e14391e94c850b8bd03680c23b38978db68687a8John Reck} 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// These values all match Safari/Win/Chromium 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float defaultControlFontPixelSize = 13; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float defaultCancelButtonSize = 9; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float minCancelButtonSize = 5; 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float maxCancelButtonSize = 21; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float defaultSearchFieldResultsDecorationSize = 13; 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float minSearchFieldResultsDecorationSize = 9; 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float maxSearchFieldResultsDecorationSize = 30; 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const float defaultSearchFieldResultsButtonWidth = 18; 109e14391e94c850b8bd03680c23b38978db68687a8John Reck 1102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(QT_MOBILE_THEME) 1112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace { 1122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float buttonPaddingLeft = 18; 1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float buttonPaddingRight = 18; 1142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float buttonPaddingTop = 2; 1152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float buttonPaddingBottom = 3; 1162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float menuListPadding = 9; 1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch float textFieldPadding = 5; 1182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 1192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 121ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve BlockStylePainter::StylePainter(RenderThemeQt* theme, const PaintInfo& paintInfo) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 123d0825bca7fe65beaee391d30da42e937db621564Steve Block init(paintInfo.context ? paintInfo.context : 0, theme->qStyle()); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 126d0825bca7fe65beaee391d30da42e937db621564Steve BlockStylePainter::StylePainter(ScrollbarThemeQt* theme, GraphicsContext* context) 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 128d0825bca7fe65beaee391d30da42e937db621564Steve Block init(context, theme->style()); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 131d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid StylePainter::init(GraphicsContext* context, QStyle* themeStyle) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter = static_cast<QPainter*>(context->platformContext()); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project widget = 0; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPaintDevice* dev = 0; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (painter) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dev = painter->device(); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (dev && dev->devType() == QInternal::Widget) 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project widget = static_cast<QWidget*>(dev); 140d0825bca7fe65beaee391d30da42e937db621564Steve Block style = themeStyle; 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (painter) { 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the styles often assume being called with a pristine painter where no brush is set, 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // so reset it manually 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project oldBrush = painter->brush(); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setBrush(Qt::NoBrush); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // painting the widget with anti-aliasing will make it blurry 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // disable it here and restore it later 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project oldAntialiasing = painter->testRenderHint(QPainter::Antialiasing); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setRenderHint(QPainter::Antialiasing, false); 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectStylePainter::~StylePainter() 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (painter) { 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setBrush(oldBrush); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setRenderHints(QPainter::Antialiasing, oldAntialiasing); 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeQt::create(Page* page) 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return adoptRef(new RenderThemeQt(page)); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (page) 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return RenderThemeQt::create(page); 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static RenderTheme* fallback = RenderThemeQt::create(0).releaseRef(); 1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return fallback; 1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeQt::RenderThemeQt(Page* page) 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : RenderTheme() 1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_page(page) 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_lineEdit(0) 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPushButton button; 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project button.setAttribute(Qt::WA_MacSmallSize); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QFont defaultButtonFont = QApplication::font(&button); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QFontInfo fontInfo(defaultButtonFont); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_buttonFontFamily = defaultButtonFont.family(); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef Q_WS_MAC 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_buttonFontPixelSize = fontInfo.pixelSize(); 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1905e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 19121939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 192a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_fallbackStyle = new QtMobileWebStyle; 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 1945e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block m_fallbackStyle = QStyleFactory::create(QLatin1String("windows")); 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeQt::~RenderThemeQt() 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete m_fallbackStyle; 20121939df44de1705786c545cd1bf519d47250322dBen Murdoch#ifndef QT_NO_LINEEDIT 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete m_lineEdit; 20321939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20621939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& fill, const Color& backgroundColor) const 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (style->appearance()) { 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case PushButtonPart: 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case ButtonPart: 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case MenulistPart: 2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case SearchFieldPart: 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case TextFieldPart: 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case TextAreaPart: 2162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Test the style to see if the UA border and background match. 2172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return (style->border() != border 2182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch || *style->backgroundLayers() != fill 2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch || style->visitedDependentColor(CSSPropertyBackgroundColor) != backgroundColor); 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case CheckboxPart: 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case RadioPart: 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block default: 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return RenderTheme::isControlStyled(style, border, fill, backgroundColor); 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockint RenderThemeQt::popupInternalPaddingBottom(RenderStyle* style) const 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 1; 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Remove this when SearchFieldPart is style-able in RenderTheme::isControlStyled() 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& fill, const Color& backgroundColor) const 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch switch (style->appearance()) { 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case SearchFieldPart: 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Test the style to see if the UA border and background match. 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return (style->border() != border 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch || *style->backgroundLayers() != fill 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch || style->visitedDependentColor(CSSPropertyBackgroundColor) != backgroundColor); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch default: 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return RenderTheme::isControlStyled(style, border, fill, backgroundColor); 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// for some widget painting, we need to fallback to Windows style 2495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve BlockQStyle* RenderThemeQt::fallbackStyle() const 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return (m_fallbackStyle) ? m_fallbackStyle : QApplication::style(); 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQStyle* RenderThemeQt::qStyle() const 2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 25621939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 2575e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return fallbackStyle(); 2585e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif 2595e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_page) { 261d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebPageClient* pageClient = m_page->chrome()->client()->platformPageClient(); 2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 263d0825bca7fe65beaee391d30da42e937db621564Steve Block if (pageClient) 264d0825bca7fe65beaee391d30da42e937db621564Steve Block return pageClient->style(); 2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return QApplication::style(); 2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockString RenderThemeQt::extraDefaultStyleSheet() 271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String result = RenderTheme::extraDefaultStyleSheet(); 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(NO_LISTBOX_RENDERING) 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block result += String(themeQtNoListboxesUserAgentStyleSheet, sizeof(themeQtNoListboxesUserAgentStyleSheet)); 275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeQt::supportsHover(const RenderStyle*) const 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerbool RenderThemeQt::supportsFocusRing(const RenderStyle* style) const 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner switch (style->appearance()) { 2876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CheckboxPart: 2886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case RadioPart: 2896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case PushButtonPart: 2906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SquareButtonPart: 2916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case ButtonPart: 2926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case ButtonBevelPart: 2936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case ListboxPart: 2946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case ListItemPart: 2956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case MenulistPart: 2966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case MenulistButtonPart: 2976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SliderHorizontalPart: 2986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SliderVerticalPart: 2996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SliderThumbHorizontalPart: 3006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SliderThumbVerticalPart: 3016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SearchFieldPart: 3026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SearchFieldResultsButtonPart: 3036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case SearchFieldCancelButtonPart: 3046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case TextFieldPart: 3056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case TextAreaPart: 3066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return true; 3076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner default: 3086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return false; 3096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeQt::baselinePosition(const RenderObject* o) const 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 314635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!o->isBox()) 315635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 316635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (o->style()->appearance() == CheckboxPart || o->style()->appearance() == RadioPart) 318635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return toRenderBox(o)->marginTop() + toRenderBox(o)->height() - 2; // Same as in old khtml 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return RenderTheme::baselinePosition(o); 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeQt::controlSupportsTints(const RenderObject* o) const 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Checkboxes only have tint when checked. 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (o->style()->appearance() == CheckboxPart) 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return isChecked(o); 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // For now assume other controls have tint if enabled. 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeQt::supportsControlTints() const 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockint RenderThemeQt::findFrameLineWidth(QStyle* style) const 3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 34221939df44de1705786c545cd1bf519d47250322dBen Murdoch#ifndef QT_NO_LINEEDIT 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_lineEdit) 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_lineEdit = new QLineEdit(); 34521939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStyleOptionFrameV2 opt; 34821939df44de1705786c545cd1bf519d47250322dBen Murdoch QWidget* widget = 0; 34921939df44de1705786c545cd1bf519d47250322dBen Murdoch#ifndef QT_NO_LINEEDIT 35021939df44de1705786c545cd1bf519d47250322dBen Murdoch widget = m_lineEdit; 35121939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 35221939df44de1705786c545cd1bf519d47250322dBen Murdoch return style->pixelMetric(QStyle::PM_DefaultFrameWidth, &opt, widget); 3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic QRect inflateButtonRect(const QRect& originalRect, QStyle* style) 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionButton option; 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state |= QStyle::State_Small; 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.rect = originalRect; 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect layoutRect = style->subElementRect(QStyle::SE_PushButtonLayoutItem, &option, 0); 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!layoutRect.isNull()) { 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingLeft = layoutRect.left() - originalRect.left(); 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingRight = originalRect.right() - layoutRect.right(); 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingTop = layoutRect.top() - originalRect.top(); 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingBottom = originalRect.bottom() - layoutRect.bottom(); 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return originalRect.adjusted(-paddingLeft, -paddingTop, paddingRight, paddingBottom); 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return originalRect; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeQt::adjustRepaintRect(const RenderObject* o, IntRect& rect) 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (o->style()->appearance()) { 3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case CheckboxPart: 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case RadioPart: 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: { 3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect inflatedRect = inflateButtonRect(rect, qStyle()); 3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch rect = IntRect(inflatedRect.x(), inflatedRect.y(), inflatedRect.width(), inflatedRect.height()); 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case MenulistPart: 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeQt::platformActiveSelectionBackgroundColor() const 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPalette pal = QApplication::palette(); 39681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setPaletteFromPageClientIfExists(pal); 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pal.brush(QPalette::Active, QPalette::Highlight).color(); 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeQt::platformInactiveSelectionBackgroundColor() const 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPalette pal = QApplication::palette(); 40381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setPaletteFromPageClientIfExists(pal); 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pal.brush(QPalette::Inactive, QPalette::Highlight).color(); 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeQt::platformActiveSelectionForegroundColor() const 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPalette pal = QApplication::palette(); 41081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setPaletteFromPageClientIfExists(pal); 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pal.brush(QPalette::Active, QPalette::HighlightedText).color(); 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeQt::platformInactiveSelectionForegroundColor() const 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPalette pal = QApplication::palette(); 41781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setPaletteFromPageClientIfExists(pal); 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pal.brush(QPalette::Inactive, QPalette::HighlightedText).color(); 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 421cad810f21b803229eb11403f9209855525a25d57Steve BlockColor RenderThemeQt::platformFocusRingColor() const 422cad810f21b803229eb11403f9209855525a25d57Steve Block{ 423cad810f21b803229eb11403f9209855525a25d57Steve Block QPalette pal = QApplication::palette(); 42481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setPaletteFromPageClientIfExists(pal); 425cad810f21b803229eb11403f9209855525a25d57Steve Block return pal.brush(QPalette::Active, QPalette::Highlight).color(); 426cad810f21b803229eb11403f9209855525a25d57Steve Block} 427cad810f21b803229eb11403f9209855525a25d57Steve Block 428231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeQt::systemFont(int, FontDescription&) const 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // no-op 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 433cad810f21b803229eb11403f9209855525a25d57Steve BlockColor RenderThemeQt::systemColor(int cssValueId) const 434cad810f21b803229eb11403f9209855525a25d57Steve Block{ 435cad810f21b803229eb11403f9209855525a25d57Steve Block QPalette pal = QApplication::palette(); 436cad810f21b803229eb11403f9209855525a25d57Steve Block switch (cssValueId) { 437cad810f21b803229eb11403f9209855525a25d57Steve Block case CSSValueButtontext: 438cad810f21b803229eb11403f9209855525a25d57Steve Block return pal.brush(QPalette::Active, QPalette::ButtonText).color(); 439cad810f21b803229eb11403f9209855525a25d57Steve Block case CSSValueCaptiontext: 440cad810f21b803229eb11403f9209855525a25d57Steve Block return pal.brush(QPalette::Active, QPalette::Text).color(); 441cad810f21b803229eb11403f9209855525a25d57Steve Block default: 442cad810f21b803229eb11403f9209855525a25d57Steve Block return RenderTheme::systemColor(cssValueId); 443cad810f21b803229eb11403f9209855525a25d57Steve Block } 444cad810f21b803229eb11403f9209855525a25d57Steve Block} 445cad810f21b803229eb11403f9209855525a25d57Steve Block 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeQt::minimumMenuListSize(RenderStyle*) const 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const QFontMetrics &fm = QApplication::fontMetrics(); 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 7 * fm.width(QLatin1Char('x')); 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid RenderThemeQt::computeSizeBasedOnStyle(RenderStyle* renderStyle) const 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QSize size(0, 0); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const QFontMetrics fm(renderStyle->font().font()); 4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QStyle* style = qStyle(); 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (renderStyle->appearance()) { 459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case TextAreaPart: 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case SearchFieldPart: 461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block case TextFieldPart: { 462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int padding = findFrameLineWidth(style); 463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block renderStyle->setPaddingLeft(Length(padding, Fixed)); 464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block renderStyle->setPaddingRight(Length(padding, Fixed)); 465dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block renderStyle->setPaddingTop(Length(padding, Fixed)); 466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block renderStyle->setPaddingBottom(Length(padding, Fixed)); 467dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block default: 470dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 472dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // If the width and height are both specified, then we have nothing to do. 473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!renderStyle->width().isIntrinsicOrAuto() && !renderStyle->height().isAuto()) 474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 475dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 476dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block switch (renderStyle->appearance()) { 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CheckboxPart: { 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOption styleOption; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.state |= QStyle::State_Small; 4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int checkBoxWidth = style->pixelMetric(QStyle::PM_IndicatorWidth, &styleOption); 48168513a70bcd92384395513322f1b801e7bf9c729Steve Block checkBoxWidth *= renderStyle->effectiveZoom(); 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size = QSize(checkBoxWidth, checkBoxWidth); 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case RadioPart: { 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOption styleOption; 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.state |= QStyle::State_Small; 4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int radioWidth = style->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth, &styleOption); 48968513a70bcd92384395513322f1b801e7bf9c729Steve Block radioWidth *= renderStyle->effectiveZoom(); 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size = QSize(radioWidth, radioWidth); 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !USE(QT_MOBILE_THEME) 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: { 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionButton styleOption; 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.state |= QStyle::State_Small; 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QSize contentSize = fm.size(Qt::TextShowMnemonic, QString::fromLatin1("X")); 4990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QSize pushButtonSize = style->sizeFromContents(QStyle::CT_PushButton, 5000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch &styleOption, contentSize, 0); 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.rect = QRect(0, 0, pushButtonSize.width(), pushButtonSize.height()); 5020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect layoutRect = style->subElementRect(QStyle::SE_PushButtonLayoutItem, 5030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch &styleOption, 0); 5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // If the style supports layout rects we use that, and compensate accordingly 5060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // in paintButton() below. 5070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!layoutRect.isNull()) 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size.setHeight(layoutRect.height()); 5090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size.setHeight(pushButtonSize.height()); 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case MenulistPart: { 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionComboBox styleOption; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.state |= QStyle::State_Small; 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int contentHeight = qMax(fm.lineSpacing(), 14) + 2; 5180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QSize menuListSize = style->sizeFromContents(QStyle::CT_ComboBox, 5190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch &styleOption, QSize(0, contentHeight), 0); 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size.setHeight(menuListSize.height()); 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Check is flawed, since it doesn't take min-width/max-width into account. 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (renderStyle->width().isIntrinsicOrAuto() && size.width() > 0) 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project renderStyle->setWidth(Length(size.width(), Fixed)); 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (renderStyle->height().isAuto() && size.height() > 0) 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project renderStyle->setHeight(Length(size.height(), Fixed)); 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::setCheckboxSize(RenderStyle* style) const 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project computeSizeBasedOnStyle(style); 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 540ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& r) 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return paintButton(o, i, r); 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::setRadioSize(RenderStyle* style) const 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project computeSizeBasedOnStyle(style); 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 550ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& r) 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return paintButton(o, i, r); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 555231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeQt::adjustButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element*) const 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Ditch the border. 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->resetBorder(); 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 560d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifdef Q_WS_MAC 561d0825bca7fe65beaee391d30da42e937db621564Steve Block if (style->appearance() == PushButtonPart) { 562d0825bca7fe65beaee391d30da42e937db621564Steve Block // The Mac ports ignore the specified height for <input type="button"> elements 563d0825bca7fe65beaee391d30da42e937db621564Steve Block // unless a border and/or background CSS property is also specified. 564d0825bca7fe65beaee391d30da42e937db621564Steve Block style->setHeight(Length(Auto)); 565d0825bca7fe65beaee391d30da42e937db621564Steve Block } 566d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontDescription fontDescription = style->fontDescription(); 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setIsAbsoluteSize(true); 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef Q_WS_MAC // Use fixed font size and family on Mac (like Safari does) 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setSpecifiedSize(m_buttonFontPixelSize); 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setComputedSize(m_buttonFontPixelSize); 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setSpecifiedSize(style->fontSize()); 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setComputedSize(style->fontSize()); 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !USE(QT_MOBILE_THEME) 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontFamily fontFamily; 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontFamily.setFamily(m_buttonFontFamily); 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setFamily(fontFamily); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setFontDescription(fontDescription); 584635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->font().update(selector->fontSelector()); 5852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setLineHeight(RenderStyle::initialLineHeight()); 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setButtonSize(style); 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setButtonPadding(style); 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::setButtonSize(RenderStyle* style) const 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project computeSizeBasedOnStyle(style); 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !USE(QT_MOBILE_THEME) 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::setButtonPadding(RenderStyle* style) const 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionButton styleOption; 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.state |= QStyle::State_Small; 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Fake a button rect here, since we're just computing deltas 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QRect originalRect = QRect(0, 0, 100, 30); 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleOption.rect = originalRect; 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Default padding is based on the button margin pixel metric 6070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int buttonMargin = qStyle()->pixelMetric(QStyle::PM_ButtonMargin, &styleOption, 0); 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingLeft = buttonMargin; 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingRight = buttonMargin; 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingTop = 1; 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int paddingBottom = 0; 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Then check if the style uses layout margins 6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect layoutRect = qStyle()->subElementRect(QStyle::SE_PushButtonLayoutItem, 6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch &styleOption, 0); 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!layoutRect.isNull()) { 6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch QRect contentsRect = qStyle()->subElementRect(QStyle::SE_PushButtonContents, 6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch &styleOption, 0); 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paddingLeft = contentsRect.left() - layoutRect.left(); 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paddingRight = layoutRect.right() - contentsRect.right(); 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paddingTop = contentsRect.top() - layoutRect.top(); 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Can't use this right now because we don't have the baseline to compensate 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // paddingBottom = layoutRect.bottom() - contentsRect.bottom(); 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingLeft(Length(paddingLeft, Fixed)); 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingRight(Length(paddingRight, Fixed)); 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingTop(Length(paddingTop, Fixed)); 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingBottom(Length(paddingBottom, Fixed)); 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#else 6322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid RenderThemeQt::setButtonPadding(RenderStyle* style) const 6332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 6342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!style) 6352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 6362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingLeft(Length(buttonPaddingLeft, Fixed)); 6372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingRight(Length(buttonPaddingRight, Fixed)); 6382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingTop(Length(buttonPaddingTop, Fixed)); 6392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingBottom(Length(buttonPaddingBottom, Fixed)); 6402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 6412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 643ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& r) 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 645d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, i); 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionButton option; 650e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, option); 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.rect = r; 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state |= QStyle::State_Small; 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 654d0825bca7fe65beaee391d30da42e937db621564Steve Block ControlPart appearance = initializeCommonQStyleOptions(option, o); 6550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (appearance == PushButtonPart || appearance == ButtonPart) { 6560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch option.rect = inflateButtonRect(option.rect, qStyle()); 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawControl(QStyle::CE_PushButton, option); 6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (appearance == RadioPart) 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawControl(QStyle::CE_RadioButton, option); 6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else if (appearance == CheckboxPart) 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawControl(QStyle::CE_CheckBox, option); 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Resetting the style like this leads to differences like: 66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // - RenderTextControl {INPUT} at (2,2) size 168x25 [bgcolor=#FFFFFF] border: (2px inset #000000)] 67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // + RenderTextControl {INPUT} at (2,2) size 166x26 67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // in layout tests when a CSS style is applied that doesn't affect background color, border or 67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // padding. Just worth keeping in mind! 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setBackgroundColor(Color::transparent); 6745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->resetBorder(); 6755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->resetPadding(); 6765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian computeSizeBasedOnStyle(style); 6772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(QT_MOBILE_THEME) 6782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingLeft(Length(textFieldPadding, Fixed)); 6792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingRight(Length(textFieldPadding, Fixed)); 6802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 683ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& r) 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 685d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, i); 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionFrameV2 panel; 690e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, panel); 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project panel.rect = r; 6920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch panel.lineWidth = findFrameLineWidth(qStyle()); 6932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(QT_MOBILE_THEME) 6942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (isPressed(o)) 6952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch panel.state |= QStyle::State_Sunken; 6962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#else 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project panel.state |= QStyle::State_Sunken; 6982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project panel.features = QStyleOptionFrameV2::None; 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the correct theme data for a text field 702d0825bca7fe65beaee391d30da42e937db621564Steve Block ControlPart appearance = initializeCommonQStyleOptions(panel, o); 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (appearance != TextFieldPart 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && appearance != SearchFieldPart 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && appearance != TextAreaPart 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && appearance != ListboxPart) 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Now paint the text field. 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawPrimitive(QStyle::PE_PanelLineEdit, panel); 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustTextAreaStyle(CSSStyleSelector* selector, RenderStyle* style, Element* element) const 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project adjustTextFieldStyle(selector, style, element); 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 719ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintTextArea(RenderObject* o, const PaintInfo& i, const IntRect& r) 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return paintTextField(o, i, r); 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->resetBorder(); 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Height is locked to auto. 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(Auto)); 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // White-space is locked to pre 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWhiteSpace(PRE); 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project computeSizeBasedOnStyle(style); 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Add in the padding that we'd like to use. 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setPopupPadding(style); 7382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(QT_MOBILE_THEME) 7392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style->setPaddingLeft(Length(menuListPadding, Fixed)); 7402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::setPopupPadding(RenderStyle* style) const 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 74581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const int paddingLeft = 4; 74681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const int paddingRight = style->width().isFixed() || style->width().isPercent() ? 5 : 8; 74781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 74881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch style->setPaddingLeft(Length(paddingLeft, Fixed)); 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QStyleOptionComboBox opt; 7510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int w = qStyle()->pixelMetric(QStyle::PM_ButtonIconSize, &opt, 0); 75281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch style->setPaddingRight(Length(paddingRight + w, Fixed)); 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingTop(Length(2, Fixed)); 75581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch style->setPaddingBottom(Length(2, Fixed)); 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 759ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& r) 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 761d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, i); 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QtStyleOptionWebComboBox opt(o); 766e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, opt); 767d0825bca7fe65beaee391d30da42e937db621564Steve Block initializeCommonQStyleOptions(opt, o); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 76981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntRect rect = r; 77081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 77181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if defined(Q_WS_MAC) && !defined(QT_NO_STYLE_MAC) 77281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // QMacStyle makes the combo boxes a little bit smaller to leave space for the focus rect. 77381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Because of it, the combo button is drawn at a point to the left of where it was expect to be and may end up 77481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // overlapped with the text. This will force QMacStyle to draw the combo box with the expected width. 77581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (qobject_cast<QMacStyle*>(p.style)) 77681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch rect.inflateX(3); 77781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 77881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 77981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const QPoint topLeft = rect.location(); 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->translate(topLeft); 7810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch opt.rect.moveTo(QPoint(0, 0)); 78281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch opt.rect.setSize(rect.size()); 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawComplexControl(QStyle::CC_ComboBox, opt); 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->translate(-topLeft); 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 789231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeQt::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 79121939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 79221939df44de1705786c545cd1bf519d47250322dBen Murdoch // Mobile theme uses border radius. 79321939df44de1705786c545cd1bf519d47250322dBen Murdoch#else 7940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // WORKAROUND because html.css specifies -webkit-border-radius for <select> so we override it here 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // see also http://bugs.webkit.org/show_bug.cgi?id=18399 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->resetBorderRadius(); 797dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Height is locked to auto. 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(Auto)); 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // White-space is locked to pre 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWhiteSpace(PRE); 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project computeSizeBasedOnStyle(style); 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Add in the padding that we'd like to use. 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setPopupPadding(style); 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 811ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMenuListButton(RenderObject* o, const PaintInfo& i, 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 814d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, i); 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 818dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QtStyleOptionWebComboBox option(o); 819e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, option); 820d0825bca7fe65beaee391d30da42e937db621564Steve Block initializeCommonQStyleOptions(option, o); 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.rect = r; 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for drawing the combo box arrow, rely only on the fallback style 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.style = fallbackStyle(); 8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.subControls = QStyle::SC_ComboBoxArrow; 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.drawComplexControl(QStyle::CC_ComboBox, option); 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 831dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG) 832dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockdouble RenderThemeQt::animationRepeatIntervalForProgressBar(RenderProgress* renderProgress) const 833dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 834dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (renderProgress->position() >= 0) 835dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 836dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 837dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Use hard-coded value until http://bugreports.qt.nokia.com/browse/QTBUG-9171 is fixed. 838dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Use the value from windows style which is 10 fps. 839dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0.1; 840dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 841dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 842dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockdouble RenderThemeQt::animationDurationForProgressBar(RenderProgress* renderProgress) const 843dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 844dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (renderProgress->position() >= 0) 845dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 846dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 847dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QStyleOptionProgressBarV2 option; 848dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.rect.setSize(renderProgress->size()); 849dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Until http://bugreports.qt.nokia.com/browse/QTBUG-9171 is fixed, 850dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // we simulate one square animating across the progress bar. 851dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return (option.rect.width() / qStyle()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &option)) * animationRepeatIntervalForProgressBar(renderProgress); 852dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 853dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 854dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid RenderThemeQt::adjustProgressBarStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 855dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 856dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block style->setBoxShadow(0); 857dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 858dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 859ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintProgressBar(RenderObject* o, const PaintInfo& pi, const IntRect& r) 860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 861545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!o->isProgress()) 862545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return true; 863545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block StylePainter p(this, pi); 865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!p.isValid()) 866dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QStyleOptionProgressBarV2 option; 869e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, option); 870dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block initializeCommonQStyleOptions(option, o); 871dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 872dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RenderProgress* renderProgress = toRenderProgress(o); 873dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.rect = r; 874dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.maximum = std::numeric_limits<int>::max(); 875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.minimum = 0; 876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.progress = (renderProgress->position() * std::numeric_limits<int>::max()); 877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 8782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block const QPoint topLeft = r.location(); 879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->translate(topLeft); 880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.rect.moveTo(QPoint(0, 0)); 881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block option.rect.setSize(r.size()); 882dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 883dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (option.progress < 0) { 884dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Until http://bugreports.qt.nokia.com/browse/QTBUG-9171 is fixed, 885dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // we simulate one square animating across the progress bar. 886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.drawControl(QStyle::CE_ProgressBarGroove, option); 887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int chunkWidth = qStyle()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &option); 888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QColor color = (option.palette.highlight() == option.palette.background()) ? option.palette.color(QPalette::Active, QPalette::Highlight) : option.palette.color(QPalette::Highlight); 889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (renderProgress->style()->direction() == RTL) 890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->fillRect(option.rect.right() - chunkWidth - renderProgress->animationProgress() * option.rect.width(), 0, chunkWidth, option.rect.height(), color); 891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->fillRect(renderProgress->animationProgress() * option.rect.width(), 0, chunkWidth, option.rect.height(), color); 893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else 894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.drawControl(QStyle::CE_ProgressBar, option); 895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->translate(-topLeft); 897dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 898dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 899dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 900dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 902ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSliderTrack(RenderObject* o, const PaintInfo& pi, 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 905d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, pi); 906d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!p.isValid()) 907d0825bca7fe65beaee391d30da42e937db621564Steve Block return true; 908d0825bca7fe65beaee391d30da42e937db621564Steve Block 909d0825bca7fe65beaee391d30da42e937db621564Steve Block QStyleOptionSlider option; 910e14391e94c850b8bd03680c23b38978db68687a8John Reck initStyleOption(p.widget, option); 911a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch option.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; 912d0825bca7fe65beaee391d30da42e937db621564Steve Block ControlPart appearance = initializeCommonQStyleOptions(option, o); 913d0825bca7fe65beaee391d30da42e937db621564Steve Block 914d0825bca7fe65beaee391d30da42e937db621564Steve Block RenderSlider* renderSlider = toRenderSlider(o); 915d0825bca7fe65beaee391d30da42e937db621564Steve Block IntRect thumbRect = renderSlider->thumbRect(); 916d0825bca7fe65beaee391d30da42e937db621564Steve Block 917d0825bca7fe65beaee391d30da42e937db621564Steve Block option.rect = r; 918d0825bca7fe65beaee391d30da42e937db621564Steve Block 919d0825bca7fe65beaee391d30da42e937db621564Steve Block int value; 920d0825bca7fe65beaee391d30da42e937db621564Steve Block if (appearance == SliderVerticalPart) { 921d0825bca7fe65beaee391d30da42e937db621564Steve Block option.maximum = r.height() - thumbRect.height(); 922d0825bca7fe65beaee391d30da42e937db621564Steve Block value = thumbRect.y(); 923d0825bca7fe65beaee391d30da42e937db621564Steve Block } else { 924d0825bca7fe65beaee391d30da42e937db621564Steve Block option.maximum = r.width() - thumbRect.width(); 925d0825bca7fe65beaee391d30da42e937db621564Steve Block value = thumbRect.x(); 926d0825bca7fe65beaee391d30da42e937db621564Steve Block } 927d0825bca7fe65beaee391d30da42e937db621564Steve Block 928d0825bca7fe65beaee391d30da42e937db621564Steve Block value = QStyle::sliderValueFromPosition(0, option.maximum, value, option.maximum); 929d0825bca7fe65beaee391d30da42e937db621564Steve Block 930d0825bca7fe65beaee391d30da42e937db621564Steve Block option.sliderValue = value; 931d0825bca7fe65beaee391d30da42e937db621564Steve Block option.sliderPosition = value; 932d0825bca7fe65beaee391d30da42e937db621564Steve Block if (appearance == SliderVerticalPart) 933d0825bca7fe65beaee391d30da42e937db621564Steve Block option.orientation = Qt::Vertical; 934d0825bca7fe65beaee391d30da42e937db621564Steve Block 935d0825bca7fe65beaee391d30da42e937db621564Steve Block if (renderSlider->inDragMode()) { 936d0825bca7fe65beaee391d30da42e937db621564Steve Block option.activeSubControls = QStyle::SC_SliderHandle; 937d0825bca7fe65beaee391d30da42e937db621564Steve Block option.state |= QStyle::State_Sunken; 938d0825bca7fe65beaee391d30da42e937db621564Steve Block } 939d0825bca7fe65beaee391d30da42e937db621564Steve Block 9402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block const QPoint topLeft = r.location(); 941d0825bca7fe65beaee391d30da42e937db621564Steve Block p.painter->translate(topLeft); 942d0825bca7fe65beaee391d30da42e937db621564Steve Block option.rect.moveTo(QPoint(0, 0)); 943d0825bca7fe65beaee391d30da42e937db621564Steve Block option.rect.setSize(r.size()); 944d0825bca7fe65beaee391d30da42e937db621564Steve Block 945d0825bca7fe65beaee391d30da42e937db621564Steve Block p.drawComplexControl(QStyle::CC_Slider, option); 946d0825bca7fe65beaee391d30da42e937db621564Steve Block p.painter->translate(-topLeft); 947d0825bca7fe65beaee391d30da42e937db621564Steve Block 948d0825bca7fe65beaee391d30da42e937db621564Steve Block return false; 949d0825bca7fe65beaee391d30da42e937db621564Steve Block} 950d0825bca7fe65beaee391d30da42e937db621564Steve Block 951d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid RenderThemeQt::adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 952d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 953d0825bca7fe65beaee391d30da42e937db621564Steve Block style->setBoxShadow(0); 9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 956ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSliderThumb(RenderObject* o, const PaintInfo& pi, 9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 959d0825bca7fe65beaee391d30da42e937db621564Steve Block // We've already painted it in paintSliderTrack(), no need to do anything here. 960d0825bca7fe65beaee391d30da42e937db621564Steve Block return false; 961d0825bca7fe65beaee391d30da42e937db621564Steve Block} 962d0825bca7fe65beaee391d30da42e937db621564Steve Block 963d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid RenderThemeQt::adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 964d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 965d0825bca7fe65beaee391d30da42e937db621564Steve Block style->setBoxShadow(0); 9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSearchField(RenderObject* o, const PaintInfo& pi, 9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 97165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return paintTextField(o, pi, r); 9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, 9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* e) const 9768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 97765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Resetting the style like this leads to differences like: 97865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // - RenderTextControl {INPUT} at (2,2) size 168x25 [bgcolor=#FFFFFF] border: (2px inset #000000)] 97965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // + RenderTextControl {INPUT} at (2,2) size 166x26 98065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // in layout tests when a CSS style is applied that doesn't affect background color, border or 98165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // padding. Just worth keeping in mind! 98265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch style->setBackgroundColor(Color::transparent); 98365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch style->resetBorder(); 98465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch style->resetPadding(); 98565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch computeSizeBasedOnStyle(style); 9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, 9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* e) const 9908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 99165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Logic taken from RenderThemeChromium.cpp. 99265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Scale the button size based on the font size. 99365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch float fontScale = style->fontSize() / defaultControlFontPixelSize; 99465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int cancelButtonSize = lroundf(qMin(qMax(minCancelButtonSize, defaultCancelButtonSize * fontScale), maxCancelButtonSize)); 99565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch style->setWidth(Length(cancelButtonSize, Fixed)); 99665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch style->setHeight(Length(cancelButtonSize, Fixed)); 99765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 99865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 99965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Function taken from RenderThemeChromium.cpp 100065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochIntRect RenderThemeQt::convertToPaintingRect(RenderObject* inputRenderer, const RenderObject* partRenderer, IntRect partRect, const IntRect& localOffset) const 100165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 100265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Compute an offset between the part renderer and the input renderer. 100365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntSize offsetFromInputRenderer = -(partRenderer->offsetFromAncestorContainer(inputRenderer)); 100465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Move the rect into partRenderer's coords. 100565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch partRect.move(offsetFromInputRenderer); 100665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Account for the local drawing offset. 100765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch partRect.move(localOffset.x(), localOffset.y()); 100865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 100965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return partRect; 10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1012ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSearchFieldCancelButton(RenderObject* o, const PaintInfo& pi, 10138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 101565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Logic copied from RenderThemeChromium.cpp. 101665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 101765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Get the renderer of <input> element. 101865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Node* input = o->node()->shadowAncestorNode(); 101965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!input->renderer()->isBox()) 102065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 102165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RenderBox* inputRenderBox = toRenderBox(input->renderer()); 102265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect inputContentBox = inputRenderBox->contentBoxRect(); 102365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 102465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Make sure the scaled button stays square and will fit in its parent's box. 102565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int cancelButtonSize = qMin(inputContentBox.width(), qMin(inputContentBox.height(), r.height())); 102665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Calculate cancel button's coordinates relative to the input element. 102765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Center the button vertically. Round up though, so if it has to be one pixel off-center, it will 102865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // be one pixel closer to the bottom of the field. This tends to look better with the text. 102965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect cancelButtonRect(o->offsetFromAncestorContainer(inputRenderBox).width(), 103065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch inputContentBox.y() + (inputContentBox.height() - cancelButtonSize + 1) / 2, 103165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cancelButtonSize, cancelButtonSize); 103265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect paintingRect = convertToPaintingRect(inputRenderBox, o, cancelButtonRect, r); 103365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static Image* cancelImage = Image::loadPlatformResource("searchCancelButton").releaseRef(); 103465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static Image* cancelPressedImage = Image::loadPlatformResource("searchCancelButtonPressed").releaseRef(); 103565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pi.context->drawImage(isPressed(o) ? cancelPressedImage : cancelImage, 103665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch o->style()->colorSpace(), paintingRect); 103765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 10388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustSearchFieldDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, 10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* e) const 10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderTheme::adjustSearchFieldDecorationStyle(selector, style, e); 10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1047ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSearchFieldDecoration(RenderObject* o, const PaintInfo& pi, 10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 10498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return RenderTheme::paintSearchFieldDecoration(o, pi, r); 10528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, 10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* e) const 10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderTheme::adjustSearchFieldResultsDecorationStyle(selector, style, e); 10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1061ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintSearchFieldResultsDecoration(RenderObject* o, const PaintInfo& pi, 10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& r) 10638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return RenderTheme::paintSearchFieldResultsDecoration(o, pi, r); 10668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeQt::supportsFocus(ControlPart appearance) const 10698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (appearance) { 10710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case PushButtonPart: 10720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case ButtonPart: 10730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case TextFieldPart: 10740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case TextAreaPart: 10750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case ListboxPart: 10760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case MenulistPart: 10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case RadioPart: 10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case CheckboxPart: 1079d0825bca7fe65beaee391d30da42e937db621564Steve Block case SliderHorizontalPart: 1080d0825bca7fe65beaee391d30da42e937db621564Steve Block case SliderVerticalPart: 10810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 10820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch default: // No for all others... 10830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1087d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid RenderThemeQt::setPaletteFromPageClientIfExists(QPalette& palette) const 1088d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 108921939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(QT_MOBILE_THEME) 10905e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block static QPalette lightGrayPalette(Qt::lightGray); 10915e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block palette = lightGrayPalette; 10925e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return; 10935e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif 1094d0825bca7fe65beaee391d30da42e937db621564Steve Block // If the webview has a custom palette, use it 1095d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_page) 1096d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1097d0825bca7fe65beaee391d30da42e937db621564Steve Block Chrome* chrome = m_page->chrome(); 1098d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!chrome) 1099d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1100d0825bca7fe65beaee391d30da42e937db621564Steve Block ChromeClient* chromeClient = chrome->client(); 1101d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!chromeClient) 1102d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1103d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebPageClient* pageClient = chromeClient->platformPageClient(); 1104d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!pageClient) 1105d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1106d0825bca7fe65beaee391d30da42e937db621564Steve Block palette = pageClient->palette(); 1107d0825bca7fe65beaee391d30da42e937db621564Steve Block} 1108d0825bca7fe65beaee391d30da42e937db621564Steve Block 1109d0825bca7fe65beaee391d30da42e937db621564Steve BlockControlPart RenderThemeQt::initializeCommonQStyleOptions(QStyleOption& option, RenderObject* o) const 11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Default bits: no focus, no mouse over 11128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state &= ~(QStyle::State_HasFocus | QStyle::State_MouseOver); 11138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isReadOnlyControl(o)) 11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Readonly is supported on textfields. 11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state |= QStyle::State_ReadOnly; 11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118d0825bca7fe65beaee391d30da42e937db621564Steve Block option.direction = Qt::LeftToRight; 11198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isHovered(o)) 11218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state |= QStyle::State_MouseOver; 11228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1123d0825bca7fe65beaee391d30da42e937db621564Steve Block setPaletteFromPageClientIfExists(option.palette); 11242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 11252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!isEnabled(o)) { 11262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch option.palette.setCurrentColorGroup(QPalette::Disabled); 11272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch option.state &= ~QStyle::State_Enabled; 11282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 11292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1130d0825bca7fe65beaee391d30da42e937db621564Steve Block RenderStyle* style = o->style(); 1131d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!style) 1132d0825bca7fe65beaee391d30da42e937db621564Steve Block return NoControlPart; 11335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1134d0825bca7fe65beaee391d30da42e937db621564Steve Block ControlPart result = style->appearance(); 1135d0825bca7fe65beaee391d30da42e937db621564Steve Block if (supportsFocus(result) && isFocused(o)) { 1136d0825bca7fe65beaee391d30da42e937db621564Steve Block option.state |= QStyle::State_HasFocus; 1137d0825bca7fe65beaee391d30da42e937db621564Steve Block option.state |= QStyle::State_KeyboardFocusChange; 1138d0825bca7fe65beaee391d30da42e937db621564Steve Block } 1139d0825bca7fe65beaee391d30da42e937db621564Steve Block 1140d0825bca7fe65beaee391d30da42e937db621564Steve Block if (style->direction() == WebCore::RTL) 1141d0825bca7fe65beaee391d30da42e937db621564Steve Block option.direction = Qt::RightToLeft; 11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (result) { 11440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case PushButtonPart: 11450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case SquareButtonPart: 11460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case ButtonPart: 11470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case ButtonBevelPart: 11480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case ListItemPart: 11490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case MenulistButtonPart: 11500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case SearchFieldResultsButtonPart: 11510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case SearchFieldCancelButtonPart: { 11520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (isPressed(o)) 11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch option.state |= QStyle::State_Sunken; 115421939df44de1705786c545cd1bf519d47250322dBen Murdoch else if (result == PushButtonPart || result == ButtonPart) 11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch option.state |= QStyle::State_Raised; 11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1158d0825bca7fe65beaee391d30da42e937db621564Steve Block case RadioPart: 1159d0825bca7fe65beaee391d30da42e937db621564Steve Block case CheckboxPart: 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project option.state |= (isChecked(o) ? QStyle::State_On : QStyle::State_Off); 11618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(VIDEO) 1167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1168635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectString RenderThemeQt::extraMediaControlsStyleSheet() 11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 117065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String result = String(mediaControlsQtUserAgentStyleSheet, sizeof(mediaControlsQtUserAgentStyleSheet)); 117165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 117265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_page && m_page->chrome()->requiresFullscreenForVideoPlayback()) 117365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch result += String(mediaControlsQtFullscreenUserAgentStyleSheet, sizeof(mediaControlsQtFullscreenUserAgentStyleSheet)); 117465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 117565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return result; 1176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 11778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Helper class to transform the painter's world matrix to the object's content area, scaled to 0,0,100,100 11790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass WorldMatrixTransformer { 11808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 11810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WorldMatrixTransformer(QPainter* painter, RenderObject* renderObject, const IntRect& r) : m_painter(painter) 11820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* style = renderObject->style(); 11848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_originalTransform = m_painter->transform(); 11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_painter->translate(r.x() + style->paddingLeft().value(), r.y() + style->paddingTop().value()); 11868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_painter->scale((r.width() - style->paddingLeft().value() - style->paddingRight().value()) / 100.0, 11878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (r.height() - style->paddingTop().value() - style->paddingBottom().value()) / 100.0); 11888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~WorldMatrixTransformer() { m_painter->setTransform(m_originalTransform); } 11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 11938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPainter* m_painter; 11948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QTransform m_originalTransform; 11958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 11968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockdouble RenderThemeQt::mediaControlsBaselineOpacity() const 1198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0.4; 1200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 12028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::paintMediaBackground(QPainter* painter, const IntRect& r) const 12038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setPen(Qt::NoPen); 1205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static QColor transparentBlack(0, 0, 0, mediaControlsBaselineOpacity() * 255); 12068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->setBrush(transparentBlack); 12078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project painter->drawRoundedRect(r.x(), r.y(), r.width(), r.height(), 5.0, 5.0); 12088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQColor RenderThemeQt::getMediaControlForegroundColor(RenderObject* o) const 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QColor fgColor = platformActiveSelectionBackgroundColor(); 12138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o && o->node()->active()) 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fgColor = fgColor.lighter(); 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return fgColor; 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaFullscreenButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HTMLMediaElement* mediaElement = toParentMediaElement(o); 12212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!mediaElement) 12222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 12232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block StylePainter p(this, paintInfo); 12252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!p.isValid()) 12262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return true; 12272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block p.painter->setRenderHint(QPainter::Antialiasing, true); 12292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block paintMediaBackground(p.painter, r); 12312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WorldMatrixTransformer transformer(p.painter, o, r); 12332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block const QPointF arrowPolygon[9] = { QPointF(20, 0), QPointF(100, 0), QPointF(100, 80), 12342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block QPointF(80, 80), QPointF(80, 30), QPointF(10, 100), QPointF(0, 90), QPointF(70, 20), QPointF(20, 20)}; 12352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block p.painter->setBrush(getMediaControlForegroundColor(o)); 12372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block p.painter->drawPolygon(arrowPolygon, 9); 12382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 12392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return false; 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1242ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaMuteButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 12438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HTMLMediaElement* mediaElement = toParentMediaElement(o); 12458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mediaElement) 12468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1248d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, paintInfo); 12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 12518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setRenderHint(QPainter::Antialiasing, true); 12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paintMediaBackground(p.painter, r); 12558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WorldMatrixTransformer transformer(p.painter, o, r); 12578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const QPointF speakerPolygon[6] = { QPointF(20, 30), QPointF(50, 30), QPointF(80, 0), 12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPointF(80, 100), QPointF(50, 70), QPointF(20, 70)}; 12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setBrush(mediaElement->muted() ? Qt::darkRed : getMediaControlForegroundColor(o)); 12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->drawPolygon(speakerPolygon, 6); 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1266ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaPlayButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 12678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HTMLMediaElement* mediaElement = toParentMediaElement(o); 12698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mediaElement) 12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1272d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, paintInfo); 12738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 12748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setRenderHint(QPainter::Antialiasing, true); 12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paintMediaBackground(p.painter, r); 12798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WorldMatrixTransformer transformer(p.painter, o, r); 12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setBrush(getMediaControlForegroundColor(o)); 12828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (mediaElement->canPlay()) { 12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const QPointF playPolygon[3] = { QPointF(0, 0), QPointF(100, 50), QPointF(0, 100)}; 12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->drawPolygon(playPolygon, 3); 12858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 12868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->drawRect(0, 0, 30, 100); 12878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->drawRect(70, 0, 30, 100); 12888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1293ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&) 12948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't want to paint this at the moment. 12968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1299ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&) 13008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't want to paint this at the moment. 13028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 13038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1305ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaCurrentTime(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 1306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block StylePainter p(this, paintInfo); 1308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!p.isValid()) 1309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 1310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setRenderHint(QPainter::Antialiasing, true); 1312dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block paintMediaBackground(p.painter, r); 1313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1314dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockString RenderThemeQt::formatMediaControlsCurrentTime(float currentTime, float duration) const 1318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return formatMediaControlsTime(currentTime) + " / " + formatMediaControlsTime(duration); 1320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockString RenderThemeQt::formatMediaControlsRemainingTime(float currentTime, float duration) const 1323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return String(); 1325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1327ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaVolumeSliderTrack(RenderObject *o, const PaintInfo &paintInfo, const IntRect &r) 1328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block StylePainter p(this, paintInfo); 1330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!p.isValid()) 1331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 1332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setRenderHint(QPainter::Antialiasing, true); 1334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block paintMediaBackground(p.painter, r); 1336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!o->isSlider()) 1338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block IntRect b = toRenderBox(o)->contentBoxRect(); 1341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Position the outer rectangle 1343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int top = r.y() + b.y(); 1344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int left = r.x() + b.x(); 1345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int width = b.width(); 1346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int height = b.height(); 1347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Get the scale color from the page client 1349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QPalette pal = QApplication::palette(); 1350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setPaletteFromPageClientIfExists(pal); 1351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const QColor highlightText = pal.brush(QPalette::Active, QPalette::HighlightedText).color(); 1352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const QColor scaleColor(highlightText.red(), highlightText.green(), highlightText.blue(), mediaControlsBaselineOpacity() * 255); 1353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Draw the outer rectangle 1355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setBrush(scaleColor); 1356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->drawRect(left, top, width, height); 1357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!o->node() || !o->node()->hasTagName(inputTag)) 1359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block HTMLInputElement* slider = static_cast<HTMLInputElement*>(o->node()); 1362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Position the inner rectangle 1364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block height = height * slider->valueAsNumber(); 1365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block top += b.height() - height; 1366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Draw the inner rectangle 1368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setPen(Qt::NoPen); 1369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setBrush(getMediaControlForegroundColor(o)); 1370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->drawRect(left, top, width, height); 1371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1375ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaVolumeSliderThumb(RenderObject *o, const PaintInfo &paintInfo, const IntRect &r) 1376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block StylePainter p(this, paintInfo); 1378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!p.isValid()) 1379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 1380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Nothing to draw here, this is all done in the track 1382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1385ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HTMLMediaElement* mediaElement = toParentMediaElement(o); 13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mediaElement) 13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1391d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, paintInfo); 13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 13948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setRenderHint(QPainter::Antialiasing, true); 13968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paintMediaBackground(p.painter, r); 13988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (MediaPlayer* player = mediaElement->player()) { 1400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Get the buffered parts of the media 1401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block PassRefPtr<TimeRanges> buffered = player->buffered(); 1402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (buffered->length() > 0 && player->duration() < std::numeric_limits<float>::infinity()) { 1403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the transform and brush 1404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WorldMatrixTransformer transformer(p.painter, o, r); 1405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->setBrush(getMediaControlForegroundColor()); 1406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Paint each buffered section 1408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ExceptionCode ex; 1409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (int i = 0; i < buffered->length(); i++) { 1410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float startX = (buffered->start(i, ex) / player->duration()) * 100; 1411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float width = ((buffered->end(i, ex) / player->duration()) * 100) - startX; 1412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block p.painter->drawRect(startX, 37, width, 26); 1413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 14178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1420ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeQt::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 14218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1422d0825bca7fe65beaee391d30da42e937db621564Steve Block StylePainter p(this, paintInfo); 14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p.isValid()) 14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setRenderHint(QPainter::Antialiasing, true); 14278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setPen(Qt::NoPen); 14298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->setBrush(getMediaControlForegroundColor(o)); 14308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p.painter->drawRect(r.x(), r.y(), r.width(), r.height()); 14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 14358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeQt::adjustSliderThumbSize(RenderObject* o) const 14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1438d0825bca7fe65beaee391d30da42e937db621564Steve Block ControlPart part = o->style()->appearance(); 1439d0825bca7fe65beaee391d30da42e937db621564Steve Block 1440d0825bca7fe65beaee391d30da42e937db621564Steve Block if (part == MediaSliderThumbPart) { 14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* parentStyle = o->parent()->style(); 14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Q_ASSERT(parentStyle); 14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int parentHeight = parentStyle->height().value(); 14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setWidth(Length(parentHeight / 3, Fixed)); 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setHeight(Length(parentHeight, Fixed)); 1447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (part == MediaVolumeSliderThumbPart) { 1448dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RenderStyle* parentStyle = o->parent()->style(); 1449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Q_ASSERT(parentStyle); 1450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1451dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int parentWidth = parentStyle->width().value(); 1452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o->style()->setHeight(Length(parentWidth / 3, Fixed)); 1453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block o->style()->setWidth(Length(parentWidth, Fixed)); 1454d0825bca7fe65beaee391d30da42e937db621564Steve Block } else if (part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart) { 1455d0825bca7fe65beaee391d30da42e937db621564Steve Block QStyleOptionSlider option; 1456d0825bca7fe65beaee391d30da42e937db621564Steve Block if (part == SliderThumbVerticalPart) 1457d0825bca7fe65beaee391d30da42e937db621564Steve Block option.orientation = Qt::Vertical; 1458d0825bca7fe65beaee391d30da42e937db621564Steve Block 1459d0825bca7fe65beaee391d30da42e937db621564Steve Block QStyle* style = qStyle(); 1460d0825bca7fe65beaee391d30da42e937db621564Steve Block 1461d0825bca7fe65beaee391d30da42e937db621564Steve Block int width = style->pixelMetric(QStyle::PM_SliderLength, &option); 1462d0825bca7fe65beaee391d30da42e937db621564Steve Block int height = style->pixelMetric(QStyle::PM_SliderThickness, &option); 1463d0825bca7fe65beaee391d30da42e937db621564Steve Block o->style()->setWidth(Length(width, Fixed)); 1464d0825bca7fe65beaee391d30da42e937db621564Steve Block o->style()->setHeight(Length(height, Fixed)); 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1468635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectdouble RenderThemeQt::caretBlinkInterval() const 1469635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1470635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return QApplication::cursorFlashTime() / 1000.0 / 2.0; 1471635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1472635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// vim: ts=4 sw=4 et 1476