| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008, 2009 Google, Inc. | 3 * Copyright (C) 2008, 2009 Google, Inc. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 // background. We need WebCore to paint styled backgrounds, so we'll use | 66 // background. We need WebCore to paint styled backgrounds, so we'll use |
| 67 // this AppKit SPI function instead. | 67 // this AppKit SPI function instead. |
| 68 if (!useNSTextFieldCell) { | 68 if (!useNSTextFieldCell) { |
| 69 _NSDrawCarbonThemeBezel(r, LayoutTheme::isEnabled(o) && !LayoutTheme::is
ReadOnlyControl(o), YES); | 69 _NSDrawCarbonThemeBezel(r, LayoutTheme::isEnabled(o) && !LayoutTheme::is
ReadOnlyControl(o), YES); |
| 70 return false; | 70 return false; |
| 71 } | 71 } |
| 72 #endif | 72 #endif |
| 73 | 73 |
| 74 NSTextFieldCell *textField = m_layoutTheme.textField(); | 74 NSTextFieldCell *textField = m_layoutTheme.textField(); |
| 75 | 75 |
| 76 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 76 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 77 | 77 |
| 78 [textField setEnabled:(LayoutTheme::isEnabled(o) && !LayoutTheme::isReadOnly
Control(o))]; | 78 [textField setEnabled:(LayoutTheme::isEnabled(o) && !LayoutTheme::isReadOnly
Control(o))]; |
| 79 [textField drawWithFrame:NSRect(r) inView:m_layoutTheme.documentViewFor(o)]; | 79 [textField drawWithFrame:NSRect(r) inView:m_layoutTheme.documentViewFor(o)]; |
| 80 | 80 |
| 81 [textField setControlView:nil]; | 81 [textField setControlView:nil]; |
| 82 | 82 |
| 83 return false; | 83 return false; |
| 84 } | 84 } |
| 85 | 85 |
| 86 bool ThemePainterMac::paintCapsLockIndicator(const LayoutObject&, const PaintInf
o& paintInfo, const IntRect& r) | 86 bool ThemePainterMac::paintCapsLockIndicator(const LayoutObject&, const PaintInf
o& paintInfo, const IntRect& r) |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 // Now inflate it to account for the shadow. | 165 // Now inflate it to account for the shadow. |
| 166 IntRect inflatedRect = r; | 166 IntRect inflatedRect = r; |
| 167 if (r.width() >= m_layoutTheme.minimumMenuListSize(o.styleRef())) | 167 if (r.width() >= m_layoutTheme.minimumMenuListSize(o.styleRef())) |
| 168 inflatedRect = ThemeMac::inflateRect(inflatedRect, size, m_layoutTheme.p
opupButtonMargins(), zoomLevel); | 168 inflatedRect = ThemeMac::inflateRect(inflatedRect, size, m_layoutTheme.p
opupButtonMargins(), zoomLevel); |
| 169 | 169 |
| 170 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, ThemeMac::inflateRectForFocusRing(inflatedRect)); | 170 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, ThemeMac::inflateRectForFocusRing(inflatedRect)); |
| 171 | 171 |
| 172 if (zoomLevel != 1.0f) { | 172 if (zoomLevel != 1.0f) { |
| 173 inflatedRect.setWidth(inflatedRect.width() / zoomLevel); | 173 inflatedRect.setWidth(inflatedRect.width() / zoomLevel); |
| 174 inflatedRect.setHeight(inflatedRect.height() / zoomLevel); | 174 inflatedRect.setHeight(inflatedRect.height() / zoomLevel); |
| 175 paintInfo.context->translate(inflatedRect.x(), inflatedRect.y()); | 175 paintInfo.context.translate(inflatedRect.x(), inflatedRect.y()); |
| 176 paintInfo.context->scale(zoomLevel, zoomLevel); | 176 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 177 paintInfo.context->translate(-inflatedRect.x(), -inflatedRect.y()); | 177 paintInfo.context.translate(-inflatedRect.x(), -inflatedRect.y()); |
| 178 } | 178 } |
| 179 | 179 |
| 180 NSView *view = m_layoutTheme.documentViewFor(o); | 180 NSView *view = m_layoutTheme.documentViewFor(o); |
| 181 [popupButton drawWithFrame:inflatedRect inView:view]; | 181 [popupButton drawWithFrame:inflatedRect inView:view]; |
| 182 if (!ThemeMac::drawWithFrameDrawsFocusRing() && LayoutTheme::isFocused(o) &&
o.styleRef().outlineStyleIsAuto()) | 182 if (!ThemeMac::drawWithFrameDrawsFocusRing() && LayoutTheme::isFocused(o) &&
o.styleRef().outlineStyleIsAuto()) |
| 183 [popupButton cr_drawFocusRingWithFrame:inflatedRect inView:view]; | 183 [popupButton cr_drawFocusRingWithFrame:inflatedRect inView:view]; |
| 184 [popupButton setControlView:nil]; | 184 [popupButton setControlView:nil]; |
| 185 | 185 |
| 186 return false; | 186 return false; |
| 187 } | 187 } |
| 188 | 188 |
| 189 bool ThemePainterMac::paintMeter(const LayoutObject& layoutObject, const PaintIn
fo& paintInfo, const IntRect& rect) | 189 bool ThemePainterMac::paintMeter(const LayoutObject& layoutObject, const PaintIn
fo& paintInfo, const IntRect& rect) |
| 190 { | 190 { |
| 191 if (!layoutObject.isMeter()) | 191 if (!layoutObject.isMeter()) |
| 192 return true; | 192 return true; |
| 193 | 193 |
| 194 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, rect); | 194 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, rect); |
| 195 | 195 |
| 196 NSLevelIndicatorCell* cell = m_layoutTheme.levelIndicatorFor(toLayoutMeter(l
ayoutObject)); | 196 NSLevelIndicatorCell* cell = m_layoutTheme.levelIndicatorFor(toLayoutMeter(l
ayoutObject)); |
| 197 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 197 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 198 | 198 |
| 199 [cell drawWithFrame:rect inView:m_layoutTheme.documentViewFor(layoutObject)]
; | 199 [cell drawWithFrame:rect inView:m_layoutTheme.documentViewFor(layoutObject)]
; |
| 200 [cell setControlView:nil]; | 200 [cell setControlView:nil]; |
| 201 return false; | 201 return false; |
| 202 } | 202 } |
| 203 | 203 |
| 204 bool ThemePainterMac::paintProgressBar(const LayoutObject& layoutObject, const P
aintInfo& paintInfo, const IntRect& rect) | 204 bool ThemePainterMac::paintProgressBar(const LayoutObject& layoutObject, const P
aintInfo& paintInfo, const IntRect& rect) |
| 205 { | 205 { |
| 206 if (!layoutObject.isProgress()) | 206 if (!layoutObject.isProgress()) |
| 207 return true; | 207 return true; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 237 | 237 |
| 238 OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(inflatedRect.size()); | 238 OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(inflatedRect.size()); |
| 239 if (!imageBuffer) | 239 if (!imageBuffer) |
| 240 return true; | 240 return true; |
| 241 | 241 |
| 242 IntRect clipRect = IntRect(IntPoint(), inflatedRect.size()); | 242 IntRect clipRect = IntRect(IntPoint(), inflatedRect.size()); |
| 243 LocalCurrentGraphicsContext localContext(imageBuffer->canvas(), 1, &clipRect
, clipRect); | 243 LocalCurrentGraphicsContext localContext(imageBuffer->canvas(), 1, &clipRect
, clipRect); |
| 244 CGContextRef cgContext = localContext.cgContext(); | 244 CGContextRef cgContext = localContext.cgContext(); |
| 245 HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); | 245 HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); |
| 246 | 246 |
| 247 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 247 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 248 | 248 |
| 249 if (!layoutProgress.styleRef().isLeftToRightDirection()) { | 249 if (!layoutProgress.styleRef().isLeftToRightDirection()) { |
| 250 paintInfo.context->translate(2 * inflatedRect.x() + inflatedRect.width()
, 0); | 250 paintInfo.context.translate(2 * inflatedRect.x() + inflatedRect.width(),
0); |
| 251 paintInfo.context->scale(-1, 1); | 251 paintInfo.context.scale(-1, 1); |
| 252 } | 252 } |
| 253 | 253 |
| 254 if (!paintInfo.context->contextDisabled()) | 254 if (!paintInfo.context.contextDisabled()) |
| 255 imageBuffer->draw(paintInfo.context, FloatRect(inflatedRect.location(),
FloatSize(imageBuffer->size())), nullptr, SkXfermode::kSrcOver_Mode); | 255 imageBuffer->draw(paintInfo.context, FloatRect(inflatedRect.location(),
FloatSize(imageBuffer->size())), nullptr, SkXfermode::kSrcOver_Mode); |
| 256 return false; | 256 return false; |
| 257 } | 257 } |
| 258 | 258 |
| 259 bool ThemePainterMac::paintMenuListButton(const LayoutObject& o, const PaintInfo
& paintInfo, const IntRect& r) | 259 bool ThemePainterMac::paintMenuListButton(const LayoutObject& o, const PaintInfo
& paintInfo, const IntRect& r) |
| 260 { | 260 { |
| 261 IntRect bounds = IntRect(r.x() + o.styleRef().borderLeftWidth(), | 261 IntRect bounds = IntRect(r.x() + o.styleRef().borderLeftWidth(), |
| 262 r.y() + o.styleRef().borderTopWidth(), | 262 r.y() + o.styleRef().borderTopWidth(), |
| 263 r.width() - o.styleRef().borderLeftWidth() - o.styl
eRef().borderRightWidth(), | 263 r.width() - o.styleRef().borderLeftWidth() - o.styl
eRef().borderRightWidth(), |
| 264 r.height() - o.styleRef().borderTopWidth() - o.styl
eRef().borderBottomWidth()); | 264 r.height() - o.styleRef().borderTopWidth() - o.styl
eRef().borderBottomWidth()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 276 return false; | 276 return false; |
| 277 | 277 |
| 278 Color color = o.styleRef().visitedDependentColor(CSSPropertyColor); | 278 Color color = o.styleRef().visitedDependentColor(CSSPropertyColor); |
| 279 | 279 |
| 280 FloatPoint arrow1[3]; | 280 FloatPoint arrow1[3]; |
| 281 arrow1[0] = FloatPoint(leftEdge, centerY - spaceBetweenArrows / 2.0f); | 281 arrow1[0] = FloatPoint(leftEdge, centerY - spaceBetweenArrows / 2.0f); |
| 282 arrow1[1] = FloatPoint(leftEdge + arrowWidth, centerY - spaceBetweenArrows /
2.0f); | 282 arrow1[1] = FloatPoint(leftEdge + arrowWidth, centerY - spaceBetweenArrows /
2.0f); |
| 283 arrow1[2] = FloatPoint(leftEdge + arrowWidth / 2.0f, centerY - spaceBetweenA
rrows / 2.0f - arrowHeight); | 283 arrow1[2] = FloatPoint(leftEdge + arrowWidth / 2.0f, centerY - spaceBetweenA
rrows / 2.0f - arrowHeight); |
| 284 | 284 |
| 285 // Draw the top arrow. | 285 // Draw the top arrow. |
| 286 paintInfo.context->fillPolygon(3, arrow1, color, true); | 286 paintInfo.context.fillPolygon(3, arrow1, color, true); |
| 287 | 287 |
| 288 FloatPoint arrow2[3]; | 288 FloatPoint arrow2[3]; |
| 289 arrow2[0] = FloatPoint(leftEdge, centerY + spaceBetweenArrows / 2.0f); | 289 arrow2[0] = FloatPoint(leftEdge, centerY + spaceBetweenArrows / 2.0f); |
| 290 arrow2[1] = FloatPoint(leftEdge + arrowWidth, centerY + spaceBetweenArrows /
2.0f); | 290 arrow2[1] = FloatPoint(leftEdge + arrowWidth, centerY + spaceBetweenArrows /
2.0f); |
| 291 arrow2[2] = FloatPoint(leftEdge + arrowWidth / 2.0f, centerY + spaceBetweenA
rrows / 2.0f + arrowHeight); | 291 arrow2[2] = FloatPoint(leftEdge + arrowWidth / 2.0f, centerY + spaceBetweenA
rrows / 2.0f + arrowHeight); |
| 292 | 292 |
| 293 // Draw the bottom arrow. | 293 // Draw the bottom arrow. |
| 294 paintInfo.context->fillPolygon(3, arrow2, color, true); | 294 paintInfo.context.fillPolygon(3, arrow2, color, true); |
| 295 return false; | 295 return false; |
| 296 } | 296 } |
| 297 | 297 |
| 298 bool ThemePainterMac::paintSliderTrack(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) | 298 bool ThemePainterMac::paintSliderTrack(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) |
| 299 { | 299 { |
| 300 paintSliderTicks(o, paintInfo, r); | 300 paintSliderTicks(o, paintInfo, r); |
| 301 | 301 |
| 302 float zoomLevel = o.styleRef().effectiveZoom(); | 302 float zoomLevel = o.styleRef().effectiveZoom(); |
| 303 FloatRect unzoomedRect = r; | 303 FloatRect unzoomedRect = r; |
| 304 | 304 |
| 305 if (o.styleRef().appearance() == SliderHorizontalPart || o.styleRef().appea
rance() == MediaSliderPart) { | 305 if (o.styleRef().appearance() == SliderHorizontalPart || o.styleRef().appea
rance() == MediaSliderPart) { |
| 306 unzoomedRect.setY(ceilf(unzoomedRect.y() + unzoomedRect.height() / 2 - z
oomLevel * LayoutThemeMac::sliderTrackWidth / 2)); | 306 unzoomedRect.setY(ceilf(unzoomedRect.y() + unzoomedRect.height() / 2 - z
oomLevel * LayoutThemeMac::sliderTrackWidth / 2)); |
| 307 unzoomedRect.setHeight(zoomLevel * LayoutThemeMac::sliderTrackWidth); | 307 unzoomedRect.setHeight(zoomLevel * LayoutThemeMac::sliderTrackWidth); |
| 308 } else if (o.styleRef().appearance() == SliderVerticalPart) { | 308 } else if (o.styleRef().appearance() == SliderVerticalPart) { |
| 309 unzoomedRect.setX(ceilf(unzoomedRect.x() + unzoomedRect.width() / 2 - zo
omLevel * LayoutThemeMac::sliderTrackWidth / 2)); | 309 unzoomedRect.setX(ceilf(unzoomedRect.x() + unzoomedRect.width() / 2 - zo
omLevel * LayoutThemeMac::sliderTrackWidth / 2)); |
| 310 unzoomedRect.setWidth(zoomLevel * LayoutThemeMac::sliderTrackWidth); | 310 unzoomedRect.setWidth(zoomLevel * LayoutThemeMac::sliderTrackWidth); |
| 311 } | 311 } |
| 312 | 312 |
| 313 if (zoomLevel != 1) { | 313 if (zoomLevel != 1) { |
| 314 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); | 314 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); |
| 315 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 315 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 316 } | 316 } |
| 317 | 317 |
| 318 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 318 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 319 if (zoomLevel != 1) { | 319 if (zoomLevel != 1) { |
| 320 paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 320 paintInfo.context.translate(unzoomedRect.x(), unzoomedRect.y()); |
| 321 paintInfo.context->scale(zoomLevel, zoomLevel); | 321 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 322 paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 322 paintInfo.context.translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 323 } | 323 } |
| 324 | 324 |
| 325 Color fillColor(205, 205, 205); | 325 Color fillColor(205, 205, 205); |
| 326 Color borderGradientTopColor(109, 109, 109); | 326 Color borderGradientTopColor(109, 109, 109); |
| 327 Color borderGradientBottomColor(181, 181, 181); | 327 Color borderGradientBottomColor(181, 181, 181); |
| 328 Color shadowColor(0, 0, 0, 118); | 328 Color shadowColor(0, 0, 0, 118); |
| 329 | 329 |
| 330 if (!LayoutTheme::isEnabled(o)) { | 330 if (!LayoutTheme::isEnabled(o)) { |
| 331 Color tintColor(255, 255, 255, 128); | 331 Color tintColor(255, 255, 255, 128); |
| 332 fillColor = fillColor.blend(tintColor); | 332 fillColor = fillColor.blend(tintColor); |
| 333 borderGradientTopColor = borderGradientTopColor.blend(tintColor); | 333 borderGradientTopColor = borderGradientTopColor.blend(tintColor); |
| 334 borderGradientBottomColor = borderGradientBottomColor.blend(tintColor); | 334 borderGradientBottomColor = borderGradientBottomColor.blend(tintColor); |
| 335 shadowColor = shadowColor.blend(tintColor); | 335 shadowColor = shadowColor.blend(tintColor); |
| 336 } | 336 } |
| 337 | 337 |
| 338 Color tintColor; | 338 Color tintColor; |
| 339 if (!LayoutTheme::isEnabled(o)) | 339 if (!LayoutTheme::isEnabled(o)) |
| 340 tintColor = Color(255, 255, 255, 128); | 340 tintColor = Color(255, 255, 255, 128); |
| 341 | 341 |
| 342 bool isVerticalSlider = o.styleRef().appearance() == SliderVerticalPart; | 342 bool isVerticalSlider = o.styleRef().appearance() == SliderVerticalPart; |
| 343 | 343 |
| 344 float fillRadiusSize = (LayoutThemeMac::sliderTrackWidth - LayoutThemeMac::s
liderTrackBorderWidth) / 2; | 344 float fillRadiusSize = (LayoutThemeMac::sliderTrackWidth - LayoutThemeMac::s
liderTrackBorderWidth) / 2; |
| 345 FloatSize fillRadius(fillRadiusSize, fillRadiusSize); | 345 FloatSize fillRadius(fillRadiusSize, fillRadiusSize); |
| 346 FloatRect fillBounds(enclosedIntRect(unzoomedRect)); | 346 FloatRect fillBounds(enclosedIntRect(unzoomedRect)); |
| 347 FloatRoundedRect fillRect(fillBounds, fillRadius, fillRadius, fillRadius, fi
llRadius); | 347 FloatRoundedRect fillRect(fillBounds, fillRadius, fillRadius, fillRadius, fi
llRadius); |
| 348 paintInfo.context->fillRoundedRect(fillRect, fillColor); | 348 paintInfo.context.fillRoundedRect(fillRect, fillColor); |
| 349 | 349 |
| 350 FloatSize shadowOffset(isVerticalSlider ? 1 : 0, | 350 FloatSize shadowOffset(isVerticalSlider ? 1 : 0, |
| 351 isVerticalSlider ? 0 : 1); | 351 isVerticalSlider ? 0 : 1); |
| 352 float shadowBlur = 3; | 352 float shadowBlur = 3; |
| 353 float shadowSpread = 0; | 353 float shadowSpread = 0; |
| 354 paintInfo.context->save(); | 354 paintInfo.context.save(); |
| 355 paintInfo.context->drawInnerShadow(fillRect, shadowColor, shadowOffset, shad
owBlur, shadowSpread); | 355 paintInfo.context.drawInnerShadow(fillRect, shadowColor, shadowOffset, shado
wBlur, shadowSpread); |
| 356 paintInfo.context->restore(); | 356 paintInfo.context.restore(); |
| 357 | 357 |
| 358 RefPtr<Gradient> borderGradient = Gradient::create(fillBounds.minXMinYCorner
(), | 358 RefPtr<Gradient> borderGradient = Gradient::create(fillBounds.minXMinYCorner
(), |
| 359 isVerticalSlider ? fillBounds.maxXMinYCorner() : fillBounds.minXMaxYCorn
er()); | 359 isVerticalSlider ? fillBounds.maxXMinYCorner() : fillBounds.minXMaxYCorn
er()); |
| 360 borderGradient->addColorStop(0.0, borderGradientTopColor); | 360 borderGradient->addColorStop(0.0, borderGradientTopColor); |
| 361 borderGradient->addColorStop(1.0, borderGradientBottomColor); | 361 borderGradient->addColorStop(1.0, borderGradientBottomColor); |
| 362 Path borderPath; | 362 Path borderPath; |
| 363 FloatRect borderRect(unzoomedRect); | 363 FloatRect borderRect(unzoomedRect); |
| 364 borderRect.inflate(-LayoutThemeMac::sliderTrackBorderWidth / 2.0); | 364 borderRect.inflate(-LayoutThemeMac::sliderTrackBorderWidth / 2.0); |
| 365 float borderRadiusSize = (isVerticalSlider ? borderRect.width() : borderRect
.height()) / 2; | 365 float borderRadiusSize = (isVerticalSlider ? borderRect.width() : borderRect
.height()) / 2; |
| 366 FloatSize borderRadius(borderRadiusSize, borderRadiusSize); | 366 FloatSize borderRadius(borderRadiusSize, borderRadiusSize); |
| 367 borderPath.addRoundedRect(borderRect, borderRadius, borderRadius, borderRadi
us, borderRadius); | 367 borderPath.addRoundedRect(borderRect, borderRadius, borderRadius, borderRadi
us, borderRadius); |
| 368 paintInfo.context->setStrokeGradient(borderGradient); | 368 paintInfo.context.setStrokeGradient(borderGradient); |
| 369 paintInfo.context->setStrokeThickness(LayoutThemeMac::sliderTrackBorderWidth
); | 369 paintInfo.context.setStrokeThickness(LayoutThemeMac::sliderTrackBorderWidth)
; |
| 370 paintInfo.context->strokePath(borderPath); | 370 paintInfo.context.strokePath(borderPath); |
| 371 return false; | 371 return false; |
| 372 } | 372 } |
| 373 | 373 |
| 374 | 374 |
| 375 bool ThemePainterMac::paintSliderThumb(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) | 375 bool ThemePainterMac::paintSliderThumb(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) |
| 376 { | 376 { |
| 377 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 377 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 378 float zoomLevel = o.styleRef().effectiveZoom(); | 378 float zoomLevel = o.styleRef().effectiveZoom(); |
| 379 | 379 |
| 380 FloatRect unzoomedRect(r.x(), r.y(), LayoutThemeMac::sliderThumbWidth, Layou
tThemeMac::sliderThumbHeight); | 380 FloatRect unzoomedRect(r.x(), r.y(), LayoutThemeMac::sliderThumbWidth, Layou
tThemeMac::sliderThumbHeight); |
| 381 if (zoomLevel != 1.0f) { | 381 if (zoomLevel != 1.0f) { |
| 382 paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 382 paintInfo.context.translate(unzoomedRect.x(), unzoomedRect.y()); |
| 383 paintInfo.context->scale(zoomLevel, zoomLevel); | 383 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 384 paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 384 paintInfo.context.translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 385 } | 385 } |
| 386 | 386 |
| 387 Color fillGradientTopColor(250, 250, 250); | 387 Color fillGradientTopColor(250, 250, 250); |
| 388 Color fillGradientUpperMiddleColor(244, 244, 244); | 388 Color fillGradientUpperMiddleColor(244, 244, 244); |
| 389 Color fillGradientLowerMiddleColor(236, 236, 236); | 389 Color fillGradientLowerMiddleColor(236, 236, 236); |
| 390 Color fillGradientBottomColor(238, 238, 238); | 390 Color fillGradientBottomColor(238, 238, 238); |
| 391 Color borderGradientTopColor(151, 151, 151); | 391 Color borderGradientTopColor(151, 151, 151); |
| 392 Color borderGradientBottomColor(128, 128, 128); | 392 Color borderGradientBottomColor(128, 128, 128); |
| 393 Color shadowColor(0, 0, 0, 36); | 393 Color shadowColor(0, 0, 0, 36); |
| 394 | 394 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 410 borderGradientTopColor = borderGradientTopColor.blend(tintColor); | 410 borderGradientTopColor = borderGradientTopColor.blend(tintColor); |
| 411 borderGradientBottomColor = borderGradientBottomColor.blend(tintColor); | 411 borderGradientBottomColor = borderGradientBottomColor.blend(tintColor); |
| 412 shadowColor = shadowColor.blend(tintColor); | 412 shadowColor = shadowColor.blend(tintColor); |
| 413 } | 413 } |
| 414 | 414 |
| 415 FloatRect borderBounds = unzoomedRect; | 415 FloatRect borderBounds = unzoomedRect; |
| 416 borderBounds.inflate(LayoutThemeMac::sliderThumbBorderWidth / 2.0); | 416 borderBounds.inflate(LayoutThemeMac::sliderThumbBorderWidth / 2.0); |
| 417 | 417 |
| 418 borderBounds.inflate(-LayoutThemeMac::sliderThumbBorderWidth); | 418 borderBounds.inflate(-LayoutThemeMac::sliderThumbBorderWidth); |
| 419 FloatSize shadowOffset(0, 1); | 419 FloatSize shadowOffset(0, 1); |
| 420 paintInfo.context->setShadow(shadowOffset, LayoutThemeMac::sliderThumbShadow
Blur, shadowColor); | 420 paintInfo.context.setShadow(shadowOffset, LayoutThemeMac::sliderThumbShadowB
lur, shadowColor); |
| 421 paintInfo.context->setFillColor(Color::black); | 421 paintInfo.context.setFillColor(Color::black); |
| 422 paintInfo.context->fillEllipse(borderBounds); | 422 paintInfo.context.fillEllipse(borderBounds); |
| 423 paintInfo.context->clearDrawLooper(); | 423 paintInfo.context.clearDrawLooper(); |
| 424 | 424 |
| 425 IntRect fillBounds = enclosedIntRect(unzoomedRect); | 425 IntRect fillBounds = enclosedIntRect(unzoomedRect); |
| 426 RefPtr<Gradient> fillGradient = Gradient::create(fillBounds.minXMinYCorner()
, fillBounds.minXMaxYCorner()); | 426 RefPtr<Gradient> fillGradient = Gradient::create(fillBounds.minXMinYCorner()
, fillBounds.minXMaxYCorner()); |
| 427 fillGradient->addColorStop(0.0, fillGradientTopColor); | 427 fillGradient->addColorStop(0.0, fillGradientTopColor); |
| 428 fillGradient->addColorStop(0.52, fillGradientUpperMiddleColor); | 428 fillGradient->addColorStop(0.52, fillGradientUpperMiddleColor); |
| 429 fillGradient->addColorStop(0.52, fillGradientLowerMiddleColor); | 429 fillGradient->addColorStop(0.52, fillGradientLowerMiddleColor); |
| 430 fillGradient->addColorStop(1.0, fillGradientBottomColor); | 430 fillGradient->addColorStop(1.0, fillGradientBottomColor); |
| 431 paintInfo.context->setFillGradient(fillGradient); | 431 paintInfo.context.setFillGradient(fillGradient); |
| 432 paintInfo.context->fillEllipse(borderBounds); | 432 paintInfo.context.fillEllipse(borderBounds); |
| 433 | 433 |
| 434 RefPtr<Gradient> borderGradient = Gradient::create(fillBounds.minXMinYCorner
(), fillBounds.minXMaxYCorner()); | 434 RefPtr<Gradient> borderGradient = Gradient::create(fillBounds.minXMinYCorner
(), fillBounds.minXMaxYCorner()); |
| 435 borderGradient->addColorStop(0.0, borderGradientTopColor); | 435 borderGradient->addColorStop(0.0, borderGradientTopColor); |
| 436 borderGradient->addColorStop(1.0, borderGradientBottomColor); | 436 borderGradient->addColorStop(1.0, borderGradientBottomColor); |
| 437 paintInfo.context->setStrokeGradient(borderGradient); | 437 paintInfo.context.setStrokeGradient(borderGradient); |
| 438 paintInfo.context->setStrokeThickness(LayoutThemeMac::sliderThumbBorderWidth
); | 438 paintInfo.context.setStrokeThickness(LayoutThemeMac::sliderThumbBorderWidth)
; |
| 439 paintInfo.context->strokeEllipse(borderBounds); | 439 paintInfo.context.strokeEllipse(borderBounds); |
| 440 | 440 |
| 441 if (LayoutTheme::isFocused(o)) { | 441 if (LayoutTheme::isFocused(o)) { |
| 442 Path borderPath; | 442 Path borderPath; |
| 443 borderPath.addEllipse(borderBounds); | 443 borderPath.addEllipse(borderBounds); |
| 444 paintInfo.context->drawFocusRing(borderPath, 5, -2, m_layoutTheme.focusR
ingColor()); | 444 paintInfo.context.drawFocusRing(borderPath, 5, -2, m_layoutTheme.focusRi
ngColor()); |
| 445 } | 445 } |
| 446 | 446 |
| 447 return false; | 447 return false; |
| 448 } | 448 } |
| 449 | 449 |
| 450 // We don't use controlSizeForFont() for search field decorations because it | 450 // We don't use controlSizeForFont() for search field decorations because it |
| 451 // needs to fit into the search field. The font size will already be modified by | 451 // needs to fit into the search field. The font size will already be modified by |
| 452 // setFontFromControlSize() called on the search field. | 452 // setFontFromControlSize() called on the search field. |
| 453 static NSControlSize searchFieldControlSizeForFont(const ComputedStyle& style) | 453 static NSControlSize searchFieldControlSizeForFont(const ComputedStyle& style) |
| 454 { | 454 { |
| 455 int fontSize = style.fontSize(); | 455 int fontSize = style.fontSize(); |
| 456 if (fontSize >= 13) | 456 if (fontSize >= 13) |
| 457 return NSRegularControlSize; | 457 return NSRegularControlSize; |
| 458 if (fontSize >= 11) | 458 if (fontSize >= 11) |
| 459 return NSSmallControlSize; | 459 return NSSmallControlSize; |
| 460 return NSMiniControlSize; | 460 return NSMiniControlSize; |
| 461 } | 461 } |
| 462 | 462 |
| 463 bool ThemePainterMac::paintSearchField(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) | 463 bool ThemePainterMac::paintSearchField(const LayoutObject& o, const PaintInfo& p
aintInfo, const IntRect& r) |
| 464 { | 464 { |
| 465 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, r); | 465 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, r); |
| 466 | 466 |
| 467 NSSearchFieldCell* search = m_layoutTheme.search(); | 467 NSSearchFieldCell* search = m_layoutTheme.search(); |
| 468 m_layoutTheme.setSearchCellState(o, r); | 468 m_layoutTheme.setSearchCellState(o, r); |
| 469 [search setControlSize:searchFieldControlSizeForFont(o.styleRef())]; | 469 [search setControlSize:searchFieldControlSizeForFont(o.styleRef())]; |
| 470 | 470 |
| 471 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 471 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 472 | 472 |
| 473 float zoomLevel = o.styleRef().effectiveZoom(); | 473 float zoomLevel = o.styleRef().effectiveZoom(); |
| 474 | 474 |
| 475 IntRect unzoomedRect = r; | 475 IntRect unzoomedRect = r; |
| 476 | 476 |
| 477 if (zoomLevel != 1.0f) { | 477 if (zoomLevel != 1.0f) { |
| 478 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); | 478 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); |
| 479 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 479 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 480 paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 480 paintInfo.context.translate(unzoomedRect.x(), unzoomedRect.y()); |
| 481 paintInfo.context->scale(zoomLevel, zoomLevel); | 481 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 482 paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 482 paintInfo.context.translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 483 } | 483 } |
| 484 | 484 |
| 485 // Set the search button to nil before drawing. Then reset it so we can | 485 // Set the search button to nil before drawing. Then reset it so we can |
| 486 // draw it later. | 486 // draw it later. |
| 487 [search setSearchButtonCell:nil]; | 487 [search setSearchButtonCell:nil]; |
| 488 | 488 |
| 489 [search drawWithFrame:NSRect(unzoomedRect) inView:m_layoutTheme.documentView
For(o)]; | 489 [search drawWithFrame:NSRect(unzoomedRect) inView:m_layoutTheme.documentView
For(o)]; |
| 490 | 490 |
| 491 [search setControlView:nil]; | 491 [search setControlView:nil]; |
| 492 [search resetSearchButtonCell]; | 492 [search resetSearchButtonCell]; |
| 493 | 493 |
| 494 return false; | 494 return false; |
| 495 } | 495 } |
| 496 | 496 |
| 497 bool ThemePainterMac::paintSearchFieldCancelButton(const LayoutObject& o, const
PaintInfo& paintInfo, const IntRect& r) | 497 bool ThemePainterMac::paintSearchFieldCancelButton(const LayoutObject& o, const
PaintInfo& paintInfo, const IntRect& r) |
| 498 { | 498 { |
| 499 if (!o.node()) | 499 if (!o.node()) |
| 500 return false; | 500 return false; |
| 501 Element* input = o.node()->shadowHost(); | 501 Element* input = o.node()->shadowHost(); |
| 502 if (!input) | 502 if (!input) |
| 503 input = toElement(o.node()); | 503 input = toElement(o.node()); |
| 504 | 504 |
| 505 if (!input->layoutObject()->isBox()) | 505 if (!input->layoutObject()->isBox()) |
| 506 return false; | 506 return false; |
| 507 | 507 |
| 508 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 508 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 509 | 509 |
| 510 float zoomLevel = o.styleRef().effectiveZoom(); | 510 float zoomLevel = o.styleRef().effectiveZoom(); |
| 511 FloatRect unzoomedRect(r); | 511 FloatRect unzoomedRect(r); |
| 512 if (zoomLevel != 1.0f) { | 512 if (zoomLevel != 1.0f) { |
| 513 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); | 513 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); |
| 514 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 514 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 515 paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 515 paintInfo.context.translate(unzoomedRect.x(), unzoomedRect.y()); |
| 516 paintInfo.context->scale(zoomLevel, zoomLevel); | 516 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 517 paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 517 paintInfo.context.translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 518 } | 518 } |
| 519 | 519 |
| 520 Color fillColor(200, 200, 200); | 520 Color fillColor(200, 200, 200); |
| 521 | 521 |
| 522 if (LayoutTheme::isPressed(o)) { | 522 if (LayoutTheme::isPressed(o)) { |
| 523 Color tintColor(0, 0, 0, 32); | 523 Color tintColor(0, 0, 0, 32); |
| 524 fillColor = fillColor.blend(tintColor); | 524 fillColor = fillColor.blend(tintColor); |
| 525 } | 525 } |
| 526 | 526 |
| 527 float centerX = unzoomedRect.x() + unzoomedRect.width() / 2; | 527 float centerX = unzoomedRect.x() + unzoomedRect.width() / 2; |
| 528 float centerY = unzoomedRect.y() + unzoomedRect.height() / 2; | 528 float centerY = unzoomedRect.y() + unzoomedRect.height() / 2; |
| 529 // The line width is 3px on a regular sized, high DPI NSCancelButtonCell | 529 // The line width is 3px on a regular sized, high DPI NSCancelButtonCell |
| 530 // (which is 28px wide). | 530 // (which is 28px wide). |
| 531 float lineWidth = unzoomedRect.width() * 3 / 28; | 531 float lineWidth = unzoomedRect.width() * 3 / 28; |
| 532 // The line length is 16px on a regular sized, high DPI NSCancelButtonCell. | 532 // The line length is 16px on a regular sized, high DPI NSCancelButtonCell. |
| 533 float lineLength = unzoomedRect.width() * 16 / 28; | 533 float lineLength = unzoomedRect.width() * 16 / 28; |
| 534 | 534 |
| 535 Path xPath; | 535 Path xPath; |
| 536 FloatSize lineRectRadius(lineWidth / 2, lineWidth / 2); | 536 FloatSize lineRectRadius(lineWidth / 2, lineWidth / 2); |
| 537 xPath.addRoundedRect(FloatRect(-lineLength / 2, -lineWidth / 2, lineLength,
lineWidth), | 537 xPath.addRoundedRect(FloatRect(-lineLength / 2, -lineWidth / 2, lineLength,
lineWidth), |
| 538 lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius); | 538 lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius); |
| 539 xPath.addRoundedRect(FloatRect(-lineWidth / 2, -lineLength / 2, lineWidth, l
ineLength), | 539 xPath.addRoundedRect(FloatRect(-lineWidth / 2, -lineLength / 2, lineWidth, l
ineLength), |
| 540 lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius); | 540 lineRectRadius, lineRectRadius, lineRectRadius, lineRectRadius); |
| 541 | 541 |
| 542 paintInfo.context->translate(centerX, centerY); | 542 paintInfo.context.translate(centerX, centerY); |
| 543 paintInfo.context->rotate(deg2rad(45.0)); | 543 paintInfo.context.rotate(deg2rad(45.0)); |
| 544 paintInfo.context->clipOut(xPath); | 544 paintInfo.context.clipOut(xPath); |
| 545 paintInfo.context->rotate(deg2rad(-45.0)); | 545 paintInfo.context.rotate(deg2rad(-45.0)); |
| 546 paintInfo.context->translate(-centerX, -centerY); | 546 paintInfo.context.translate(-centerX, -centerY); |
| 547 | 547 |
| 548 paintInfo.context->setFillColor(fillColor); | 548 paintInfo.context.setFillColor(fillColor); |
| 549 paintInfo.context->fillEllipse(unzoomedRect); | 549 paintInfo.context.fillEllipse(unzoomedRect); |
| 550 | 550 |
| 551 return false; | 551 return false; |
| 552 } | 552 } |
| 553 | 553 |
| 554 bool ThemePainterMac::paintSearchFieldDecoration(const LayoutObject&, const Pain
tInfo&, const IntRect&) | 554 bool ThemePainterMac::paintSearchFieldDecoration(const LayoutObject&, const Pain
tInfo&, const IntRect&) |
| 555 { | 555 { |
| 556 return false; | 556 return false; |
| 557 } | 557 } |
| 558 | 558 |
| 559 bool ThemePainterMac::paintSearchFieldResultsDecoration(const LayoutObject& o, c
onst PaintInfo& paintInfo, const IntRect& r) | 559 bool ThemePainterMac::paintSearchFieldResultsDecoration(const LayoutObject& o, c
onst PaintInfo& paintInfo, const IntRect& r) |
| 560 { | 560 { |
| 561 if (!o.node()) | 561 if (!o.node()) |
| 562 return false; | 562 return false; |
| 563 Node* input = o.node()->shadowHost(); | 563 Node* input = o.node()->shadowHost(); |
| 564 if (!input) | 564 if (!input) |
| 565 input = o.node(); | 565 input = o.node(); |
| 566 if (!input->layoutObject()->isBox()) | 566 if (!input->layoutObject()->isBox()) |
| 567 return false; | 567 return false; |
| 568 | 568 |
| 569 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 569 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 570 | 570 |
| 571 float zoomLevel = o.styleRef().effectiveZoom(); | 571 float zoomLevel = o.styleRef().effectiveZoom(); |
| 572 FloatRect unzoomedRect(r); | 572 FloatRect unzoomedRect(r); |
| 573 if (zoomLevel != 1) { | 573 if (zoomLevel != 1) { |
| 574 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); | 574 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); |
| 575 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 575 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 576 paintInfo.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 576 paintInfo.context.translate(unzoomedRect.x(), unzoomedRect.y()); |
| 577 paintInfo.context->scale(zoomLevel, zoomLevel); | 577 paintInfo.context.scale(zoomLevel, zoomLevel); |
| 578 paintInfo.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 578 paintInfo.context.translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 579 } | 579 } |
| 580 | 580 |
| 581 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, r); | 581 LocalCurrentGraphicsContext localContext(paintInfo.context, &paintInfo.cullR
ect().m_rect, r); |
| 582 | 582 |
| 583 NSSearchFieldCell* search = m_layoutTheme.search(); | 583 NSSearchFieldCell* search = m_layoutTheme.search(); |
| 584 m_layoutTheme.setSearchCellState(*input->layoutObject(), r); | 584 m_layoutTheme.setSearchCellState(*input->layoutObject(), r); |
| 585 [search setControlSize:searchFieldControlSizeForFont(o.styleRef())]; | 585 [search setControlSize:searchFieldControlSizeForFont(o.styleRef())]; |
| 586 if ([search searchMenuTemplate] != nil) | 586 if ([search searchMenuTemplate] != nil) |
| 587 [search setSearchMenuTemplate:nil]; | 587 [search setSearchMenuTemplate:nil]; |
| 588 | 588 |
| 589 m_layoutTheme.updateActiveState([search searchButtonCell], o); | 589 m_layoutTheme.updateActiveState([search searchButtonCell], o); |
| 590 | 590 |
| 591 [[search searchButtonCell] drawWithFrame:unzoomedRect inView:m_layoutTheme.d
ocumentViewFor(o)]; | 591 [[search searchButtonCell] drawWithFrame:unzoomedRect inView:m_layoutTheme.d
ocumentViewFor(o)]; |
| 592 [[search searchButtonCell] setControlView:nil]; | 592 [[search searchButtonCell] setControlView:nil]; |
| 593 return false; | 593 return false; |
| 594 } | 594 } |
| 595 | 595 |
| 596 } // namespace blink | 596 } // namespace blink |
| OLD | NEW |