📄 renderthemesafari.cpp
字号:
struct CGFunctionCallbacks mainCallbacks = { 0, TrackGradientInterpolate, NULL }; RetainPtr<CGFunctionRef> mainFunction(AdoptCF, CGFunctionCreate(NULL, 1, NULL, 4, NULL, &mainCallbacks)); RetainPtr<CGShadingRef> mainShading; if (o->style()->appearance() == SliderVerticalPart) mainShading.adoptCF(CGShadingCreateAxial(cspace.get(), CGPointMake(bounds.x(), bounds.bottom()), CGPointMake(bounds.right(), bounds.bottom()), mainFunction.get(), false, false)); else mainShading.adoptCF(CGShadingCreateAxial(cspace.get(), CGPointMake(bounds.x(), bounds.y()), CGPointMake(bounds.x(), bounds.bottom()), mainFunction.get(), false, false)); IntSize radius(trackRadius, trackRadius); paintInfo.context->addRoundedRectClip(bounds, radius, radius, radius, radius); CGContextDrawShading(context, mainShading.get()); paintInfo.context->restore(); return false;}void RenderThemeSafari::adjustSliderThumbStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const { style->setBoxShadow(0); } const float verticalSliderHeightPadding = 0.1f;bool RenderThemeSafari::paintSliderThumb(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ ASSERT(SafariThemeLibrary()); ASSERT(o->parent()->isSlider()); bool pressed = static_cast<RenderSlider*>(o->parent())->inDragMode(); ThemeControlState state = determineState(o->parent()); state &= ~SafariTheme::PressedState; if (pressed) state |= SafariTheme::PressedState; paintThemePart(SliderThumbPart, paintInfo.context->platformContext(), r, NSSmallControlSize, state); return false;}const int sliderThumbWidth = 15;const int sliderThumbHeight = 15;const int mediaSliderThumbWidth = 13;const int mediaSliderThumbHeight = 14;void RenderThemeSafari::adjustSliderThumbSize(RenderObject* o) const{ if (o->style()->appearance() == SliderThumbHorizontalPart || o->style()->appearance() == SliderThumbVerticalPart) { o->style()->setWidth(Length(sliderThumbWidth, Fixed)); o->style()->setHeight(Length(sliderThumbHeight, Fixed)); } else if (o->style()->appearance() == MediaSliderThumbPart) { o->style()->setWidth(Length(mediaSliderThumbWidth, Fixed)); o->style()->setHeight(Length(mediaSliderThumbHeight, Fixed)); }}bool RenderThemeSafari::paintSearchField(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ ASSERT(SafariThemeLibrary()); paintThemePart(SafariTheme::SearchFieldPart, paintInfo.context->platformContext(), r, controlSizeFromRect(r, searchFieldSizes()), determineState(o)); return false;}const IntSize* RenderThemeSafari::searchFieldSizes() const{ static const IntSize sizes[3] = { IntSize(0, 22), IntSize(0, 19), IntSize(0, 15) }; return sizes;}void RenderThemeSafari::setSearchFieldSize(RenderStyle* style) const{ // If the width and height are both specified, then we have nothing to do. if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) return; // Use the font size to determine the intrinsic width of the control. setSizeFromFont(style, searchFieldSizes());}void RenderThemeSafari::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const{ // Override border. style->resetBorder(); const short borderWidth = 2; style->setBorderLeftWidth(borderWidth); style->setBorderLeftStyle(INSET); style->setBorderRightWidth(borderWidth); style->setBorderRightStyle(INSET); style->setBorderBottomWidth(borderWidth); style->setBorderBottomStyle(INSET); style->setBorderTopWidth(borderWidth); style->setBorderTopStyle(INSET); // Override height. style->setHeight(Length(Auto)); setSearchFieldSize(style); // Override padding size to match AppKit text positioning. const int padding = 1; style->setPaddingLeft(Length(padding, Fixed)); style->setPaddingRight(Length(padding, Fixed)); style->setPaddingTop(Length(padding, Fixed)); style->setPaddingBottom(Length(padding, Fixed)); NSControlSize controlSize = controlSizeForFont(style); setFontFromControlSize(selector, style, controlSize);}bool RenderThemeSafari::paintSearchFieldCancelButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect&){ ASSERT(SafariThemeLibrary()); Node* input = o->node()->shadowAncestorNode(); ASSERT(input); RenderObject* renderer = input->renderer(); ASSERT(renderer); IntRect searchRect = renderer->absoluteBoundingBoxRect(); paintThemePart(SafariTheme::SearchFieldCancelButtonPart, paintInfo.context->platformContext(), searchRect, controlSizeFromRect(searchRect, searchFieldSizes()), determineState(o)); return false;}const IntSize* RenderThemeSafari::cancelButtonSizes() const{ static const IntSize sizes[3] = { IntSize(16, 13), IntSize(13, 11), IntSize(13, 9) }; return sizes;}void RenderThemeSafari::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const{ IntSize size = sizeForSystemFont(style, cancelButtonSizes()); style->setWidth(Length(size.width(), Fixed)); style->setHeight(Length(size.height(), Fixed));}const IntSize* RenderThemeSafari::resultsButtonSizes() const{ static const IntSize sizes[3] = { IntSize(19, 13), IntSize(17, 11), IntSize(17, 9) }; return sizes;}const int emptyResultsOffset = 9;void RenderThemeSafari::adjustSearchFieldDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const{ IntSize size = sizeForSystemFont(style, resultsButtonSizes()); style->setWidth(Length(size.width() - emptyResultsOffset, Fixed)); style->setHeight(Length(size.height(), Fixed));}bool RenderThemeSafari::paintSearchFieldDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&){ return false;}void RenderThemeSafari::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const{ IntSize size = sizeForSystemFont(style, resultsButtonSizes()); style->setWidth(Length(size.width(), Fixed)); style->setHeight(Length(size.height(), Fixed));}bool RenderThemeSafari::paintSearchFieldResultsDecoration(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect&){ ASSERT(SafariThemeLibrary()); Node* input = o->node()->shadowAncestorNode(); ASSERT(input); RenderObject* renderer = input->renderer(); ASSERT(renderer); IntRect searchRect = renderer->absoluteBoundingBoxRect(); paintThemePart(SafariTheme::SearchFieldResultsDecorationPart, paintInfo.context->platformContext(), searchRect, controlSizeFromRect(searchRect, searchFieldSizes()), determineState(o)); return false;}const int resultsArrowWidth = 5;void RenderThemeSafari::adjustSearchFieldResultsButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const{ IntSize size = sizeForSystemFont(style, resultsButtonSizes()); style->setWidth(Length(size.width() + resultsArrowWidth, Fixed)); style->setHeight(Length(size.height(), Fixed));}bool RenderThemeSafari::paintSearchFieldResultsButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect&){ ASSERT(SafariThemeLibrary()); Node* input = o->node()->shadowAncestorNode(); ASSERT(input); RenderObject* renderer = input->renderer(); ASSERT(renderer); IntRect searchRect = renderer->absoluteBoundingBoxRect(); paintThemePart(SafariTheme::SearchFieldResultsButtonPart, paintInfo.context->platformContext(), searchRect, controlSizeFromRect(searchRect, searchFieldSizes()), determineState(o)); return false;}#if ENABLE(VIDEO)bool RenderThemeSafari::paintMediaFullscreenButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); paintThemePart(SafariTheme::MediaFullscreenButtonPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}bool RenderThemeSafari::paintMediaMuteButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); Node* mediaNode = node ? node->shadowAncestorNode() : 0; if (!mediaNode || (!mediaNode->hasTagName(videoTag) && !mediaNode->hasTagName(audioTag))) return false; HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(mediaNode); if (!mediaElement) return false;#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); paintThemePart(mediaElement->muted() ? SafariTheme::MediaUnMuteButtonPart : SafariTheme::MediaMuteButtonPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}bool RenderThemeSafari::paintMediaPlayButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); Node* mediaNode = node ? node->shadowAncestorNode() : 0; if (!mediaNode || (!mediaNode->hasTagName(videoTag) && !mediaNode->hasTagName(audioTag))) return false; HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(mediaNode); if (!mediaElement) return false;#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); paintThemePart(mediaElement->canPlay() ? SafariTheme::MediaPlayButtonPart : SafariTheme::MediaPauseButtonPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}bool RenderThemeSafari::paintMediaSeekBackButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); paintThemePart(SafariTheme::MediaSeekBackButtonPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}bool RenderThemeSafari::paintMediaSeekForwardButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); paintThemePart(SafariTheme::MediaSeekForwardButtonPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}bool RenderThemeSafari::paintMediaSliderTrack(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); Node* mediaNode = node ? node->shadowAncestorNode() : 0; if (!mediaNode || (!mediaNode->hasTagName(videoTag) && !mediaNode->hasTagName(audioTag))) return false; HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(mediaNode); if (!mediaElement) return false; float percentLoaded = 0; if (MediaPlayer* player = mediaElement->player()) if (player->duration()) percentLoaded = player->maxTimeBuffered() / player->duration();#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 ASSERT(SafariThemeLibrary()); STPaintProgressIndicator(SafariTheme::MediaType, paintInfo.context->platformContext(), r, NSRegularControlSize, 0, percentLoaded);#endif return false;}bool RenderThemeSafari::paintMediaSliderThumb(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ ASSERT(SafariThemeLibrary());#if defined(SAFARI_THEME_VERSION) && SAFARI_THEME_VERSION >= 2 paintThemePart(SafariTheme::MediaSliderThumbPart, paintInfo.context->platformContext(), r, NSRegularControlSize, determineState(o));#endif return false;}#endif} // namespace WebCore#endif // #if USE(SAFARI_THEME)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -