📄 renderthememac.mm
字号:
localBounds = convertToPaintingRect(input->renderer(), o, localBounds, r); [[search searchButtonCell] drawWithFrame:localBounds inView:o->view()->frameView()->documentView()]; [[search searchButtonCell] setControlView:nil]; return false;}const int resultsArrowWidth = 5;void RenderThemeMac::adjustSearchFieldResultsButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const{ IntSize size = sizeForSystemFont(style, resultsButtonSizes()); style->setWidth(Length(size.width() + resultsArrowWidth, Fixed)); style->setHeight(Length(size.height(), Fixed)); style->setBoxShadow(0);}bool RenderThemeMac::paintSearchFieldResultsButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* input = o->node()->shadowAncestorNode(); if (!input->renderer()->isBox()) return false; setSearchCellState(input->renderer(), r); NSSearchFieldCell* search = this->search(); if (![search searchMenuTemplate]) [search setSearchMenuTemplate:searchMenuTemplate()]; paintInfo.context->save(); float zoomLevel = o->style()->effectiveZoom(); FloatRect localBounds = [search searchButtonRectForBounds:NSRect(input->renderBox()->borderBoxRect())]; localBounds = convertToPaintingRect(input->renderer(), o, localBounds, r); IntRect unzoomedRect(localBounds); if (zoomLevel != 1.0f) { unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); paintInfo.context->scale(FloatSize(zoomLevel, zoomLevel)); paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); } [[search searchButtonCell] drawWithFrame:unzoomedRect inView:o->view()->frameView()->documentView()]; [[search searchButtonCell] setControlView:nil]; paintInfo.context->restore(); return false;}#if ENABLE(VIDEO)typedef enum { MediaControllerThemeClassic = 1, MediaControllerThemeQT = 2} MediaControllerThemeStyle;static int mediaControllerTheme(){ static const long minimumQuickTimeVersion = 0x07600000; // 7.6 static SInt32 quickTimeVersion = 0; if (!quickTimeVersion) { OSErr err; err = Gestalt(gestaltQuickTime, &quickTimeVersion); if (err != noErr) return MediaControllerThemeClassic; } if (quickTimeVersion < minimumQuickTimeVersion) return MediaControllerThemeClassic; // keep the feature off for now without an explicit opt-in Boolean validKey; Boolean useQTMediaUI = CFPreferencesGetAppBooleanValue(CFSTR("UseQuickTimeMediaUI"), CFSTR("com.apple.WebCore"), &validKey); if (!validKey || !useQTMediaUI) return MediaControllerThemeClassic; return MediaControllerThemeQT;}#endifconst int sliderThumbWidth = 15;const int sliderThumbHeight = 15;const int mediaSliderThumbWidth = 13;const int mediaSliderThumbHeight = 14;void RenderThemeMac::adjustSliderThumbSize(RenderObject* o) const{ float zoomLevel = o->style()->effectiveZoom(); if (o->style()->appearance() == SliderThumbHorizontalPart || o->style()->appearance() == SliderThumbVerticalPart) { o->style()->setWidth(Length(static_cast<int>(sliderThumbWidth * zoomLevel), Fixed)); o->style()->setHeight(Length(static_cast<int>(sliderThumbHeight * zoomLevel), Fixed)); } #if ENABLE(VIDEO) else if (o->style()->appearance() == MediaSliderThumbPart) { int width = mediaSliderThumbWidth; int height = mediaSliderThumbHeight; if (mediaControllerTheme() == MediaControllerThemeQT) { CGSize size; wkMeasureMediaUIPart(MediaSliderThumb, MediaControllerThemeQT, NULL, &size); width = size.width; height = size.height; } o->style()->setWidth(Length(width, Fixed)); o->style()->setHeight(Length(height, Fixed)); }#endif}#if ENABLE(VIDEO)bool RenderThemeMac::paintMediaFullscreenButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaFullscreenButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::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; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(mediaElement->muted() ? MediaUnMuteButton : MediaMuteButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::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; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(mediaElement->canPlay() ? MediaPlayButton : MediaPauseButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::paintMediaSeekBackButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaSeekBackButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::paintMediaSeekForwardButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaSeekForwardButton, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::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 timeLoaded = 0; float currentTime = 0; float duration = 0; if (MediaPlayer* player = mediaElement->player()) { duration = player->duration(); timeLoaded = player->maxTimeBuffered(); currentTime = player->currentTime(); } wkDrawMediaSliderTrack(mediaControllerTheme(), paintInfo.context->platformContext(), r, timeLoaded, currentTime, duration); return false;}bool RenderThemeMac::paintMediaSliderThumb(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaSliderThumb, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::paintMediaTimelineContainer(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaTimelineContainer, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::paintMediaCurrentTime(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaCurrentTimeDisplay, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}bool RenderThemeMac::paintMediaTimeRemaining(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r){ Node* node = o->node(); if (!node) return false; LocalCurrentGraphicsContext localContext(paintInfo.context); wkDrawMediaUIPart(MediaTimeRemainingDisplay, mediaControllerTheme(), paintInfo.context->platformContext(), r, node->active()); return false;}String RenderThemeMac::extraMediaControlsStyleSheet(){ if (mediaControllerTheme() == MediaControllerThemeQT) return String(mediaControlsQTUserAgentStyleSheet, sizeof(mediaControlsQTUserAgentStyleSheet)); else return String();}bool RenderThemeMac::hitTestMediaControlPart(RenderObject* o, const IntPoint& absPoint){ if (!o->isBox()) return false; if (mediaControllerTheme() == MediaControllerThemeQT) { ControlPart part = o->style()->appearance(); FloatPoint localPoint = o->absoluteToLocal(absPoint, false, true); // respect transforms return wkHitTestMediaUIPart(part - MediaFullscreenButtonPart, MediaControllerThemeQT, CGRect(toRenderBox(o)->borderBoxRect()), CGPoint(localPoint)); } else return RenderTheme::hitTestMediaControlPart(o, absPoint);}#endifNSPopUpButtonCell* RenderThemeMac::popupButton() const{ if (!m_popupButton) { m_popupButton.adoptNS([[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:NO]); [m_popupButton.get() setUsesItemFromMenu:NO]; [m_popupButton.get() setFocusRingType:NSFocusRingTypeExterior]; } return m_popupButton.get();}NSSearchFieldCell* RenderThemeMac::search() const{ if (!m_search) { m_search.adoptNS([[NSSearchFieldCell alloc] initTextCell:@""]); [m_search.get() setBezelStyle:NSTextFieldRoundedBezel]; [m_search.get() setBezeled:YES]; [m_search.get() setEditable:YES]; [m_search.get() setFocusRingType:NSFocusRingTypeExterior]; } return m_search.get();}NSMenu* RenderThemeMac::searchMenuTemplate() const{ if (!m_searchMenuTemplate) m_searchMenuTemplate.adoptNS([[NSMenu alloc] initWithTitle:@""]); return m_searchMenuTemplate.get();}NSSliderCell* RenderThemeMac::sliderThumbHorizontal() const{ if (!m_sliderThumbHorizontal) { m_sliderThumbHorizontal.adoptNS([[NSSliderCell alloc] init]); [m_sliderThumbHorizontal.get() setTitle:nil]; [m_sliderThumbHorizontal.get() setSliderType:NSLinearSlider]; [m_sliderThumbHorizontal.get() setControlSize:NSSmallControlSize]; [m_sliderThumbHorizontal.get() setFocusRingType:NSFocusRingTypeExterior]; } return m_sliderThumbHorizontal.get();}NSSliderCell* RenderThemeMac::sliderThumbVertical() const{ if (!m_sliderThumbVertical) { m_sliderThumbVertical.adoptNS([[NSSliderCell alloc] init]); [m_sliderThumbVertical.get() setTitle:nil]; [m_sliderThumbVertical.get() setSliderType:NSLinearSlider]; [m_sliderThumbVertical.get() setControlSize:NSSmallControlSize]; [m_sliderThumbVertical.get() setFocusRingType:NSFocusRingTypeExterior]; } return m_sliderThumbVertical.get();}} // namespace WebCore
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -