| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2006 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 6 * (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
| 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
| 8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 9 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved. | 9 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved. |
| 10 * | 10 * |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 | 275 |
| 276 void RenderImage::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) | 276 void RenderImage::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) |
| 277 { | 277 { |
| 278 LayoutUnit cWidth = contentWidth(); | 278 LayoutUnit cWidth = contentWidth(); |
| 279 LayoutUnit cHeight = contentHeight(); | 279 LayoutUnit cHeight = contentHeight(); |
| 280 LayoutUnit leftBorder = borderLeft(); | 280 LayoutUnit leftBorder = borderLeft(); |
| 281 LayoutUnit topBorder = borderTop(); | 281 LayoutUnit topBorder = borderTop(); |
| 282 LayoutUnit leftPad = paddingLeft(); | 282 LayoutUnit leftPad = paddingLeft(); |
| 283 LayoutUnit topPad = paddingTop(); | 283 LayoutUnit topPad = paddingTop(); |
| 284 | 284 |
| 285 GraphicsContext* context = paintInfo.context; | 285 GraphicsContext* context = paintInfo.getContext(); |
| 286 | 286 |
| 287 Page* page = 0; | 287 Page* page = 0; |
| 288 if (Frame* frame = this->frame()) | 288 if (Frame* frame = this->frame()) |
| 289 page = frame->page(); | 289 page = frame->page(); |
| 290 | 290 |
| 291 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred()) { | 291 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred()) { |
| 292 if (paintInfo.phase == PaintPhaseSelection) | 292 if (paintInfo.getPhase() == PaintPhaseSelection) |
| 293 return; | 293 return; |
| 294 | 294 |
| 295 if (page && paintInfo.phase == PaintPhaseForeground) | 295 if (page && paintInfo.getPhase() == PaintPhaseForeground) |
| 296 page->addRelevantUnpaintedObject(this, visualOverflowRect()); | 296 page->addRelevantUnpaintedObject(this, visualOverflowRect()); |
| 297 | 297 |
| 298 if (cWidth > 2 && cHeight > 2) { | 298 if (cWidth > 2 && cHeight > 2) { |
| 299 const int borderWidth = 1; | 299 const int borderWidth = 1; |
| 300 | 300 |
| 301 // Draw an outline rect where the image should be. | 301 // Draw an outline rect where the image should be. |
| 302 context->setStrokeStyle(SolidStroke); | 302 context->setStrokeStyle(SolidStroke); |
| 303 context->setStrokeColor(Color::lightGray); | 303 context->setStrokeColor(Color::lightGray); |
| 304 context->setFillColor(Color::transparent); | 304 context->setFillColor(Color::transparent); |
| 305 context->drawRect(pixelSnappedIntRect(LayoutRect(paintOffset.x() + l
eftBorder + leftPad, paintOffset.y() + topBorder + topPad, cWidth, cHeight))); | 305 context->drawRect(pixelSnappedIntRect(LayoutRect(paintOffset.x() + l
eftBorder + leftPad, paintOffset.y() + topBorder + topPad, cWidth, cHeight))); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 if (errorPictureDrawn) { | 351 if (errorPictureDrawn) { |
| 352 if (usableWidth >= textWidth && fontMetrics.height() <= imag
eOffset.height()) | 352 if (usableWidth >= textWidth && fontMetrics.height() <= imag
eOffset.height()) |
| 353 context->drawText(font, textRunPaintInfo, textOrigin); | 353 context->drawText(font, textRunPaintInfo, textOrigin); |
| 354 } else if (usableWidth >= textWidth && usableHeight >= fontMetri
cs.height()) | 354 } else if (usableWidth >= textWidth && usableHeight >= fontMetri
cs.height()) |
| 355 context->drawText(font, textRunPaintInfo, textOrigin); | 355 context->drawText(font, textRunPaintInfo, textOrigin); |
| 356 } | 356 } |
| 357 } | 357 } |
| 358 } else if (m_imageResource->hasImage() && cWidth > 0 && cHeight > 0) { | 358 } else if (m_imageResource->hasImage() && cWidth > 0 && cHeight > 0) { |
| 359 RefPtr<Image> img = m_imageResource->image(cWidth, cHeight); | 359 RefPtr<Image> img = m_imageResource->image(cWidth, cHeight); |
| 360 if (!img || img->isNull()) { | 360 if (!img || img->isNull()) { |
| 361 if (page && paintInfo.phase == PaintPhaseForeground) | 361 if (page && paintInfo.getPhase() == PaintPhaseForeground) |
| 362 page->addRelevantUnpaintedObject(this, visualOverflowRect()); | 362 page->addRelevantUnpaintedObject(this, visualOverflowRect()); |
| 363 return; | 363 return; |
| 364 } | 364 } |
| 365 | 365 |
| 366 LayoutSize contentSize(cWidth, cHeight); | 366 LayoutSize contentSize(cWidth, cHeight); |
| 367 LayoutPoint contentLocation = paintOffset; | 367 LayoutPoint contentLocation = paintOffset; |
| 368 contentLocation.move(leftBorder + leftPad, topBorder + topPad); | 368 contentLocation.move(leftBorder + leftPad, topBorder + topPad); |
| 369 paintIntoRect(context, LayoutRect(contentLocation, contentSize)); | 369 paintIntoRect(context, LayoutRect(contentLocation, contentSize)); |
| 370 | 370 |
| 371 if (cachedImage() && page && paintInfo.phase == PaintPhaseForeground) { | 371 if (cachedImage() && page && paintInfo.getPhase() == PaintPhaseForegroun
d) { |
| 372 // For now, count images as unpainted if they are still progressivel
y loading. We may want | 372 // For now, count images as unpainted if they are still progressivel
y loading. We may want |
| 373 // to refine this in the future to account for the portion of the im
age that has painted. | 373 // to refine this in the future to account for the portion of the im
age that has painted. |
| 374 if (cachedImage()->isLoading()) | 374 if (cachedImage()->isLoading()) |
| 375 page->addRelevantUnpaintedObject(this, LayoutRect(contentLocatio
n, contentSize)); | 375 page->addRelevantUnpaintedObject(this, LayoutRect(contentLocatio
n, contentSize)); |
| 376 else | 376 else |
| 377 page->addRelevantRepaintedObject(this, LayoutRect(contentLocatio
n, contentSize)); | 377 page->addRelevantRepaintedObject(this, LayoutRect(contentLocatio
n, contentSize)); |
| 378 } | 378 } |
| 379 } | 379 } |
| 380 } | 380 } |
| 381 | 381 |
| 382 void RenderImage::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) | 382 void RenderImage::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
| 383 { | 383 { |
| 384 RenderReplaced::paint(paintInfo, paintOffset); | 384 RenderReplaced::paint(paintInfo, paintOffset); |
| 385 | 385 |
| 386 if (paintInfo.phase == PaintPhaseOutline) | 386 if (paintInfo.getPhase() == PaintPhaseOutline) |
| 387 paintAreaElementFocusRing(paintInfo); | 387 paintAreaElementFocusRing(paintInfo); |
| 388 } | 388 } |
| 389 | 389 |
| 390 void RenderImage::paintAreaElementFocusRing(PaintInfo& paintInfo) | 390 void RenderImage::paintAreaElementFocusRing(PaintInfo& paintInfo) |
| 391 { | 391 { |
| 392 Document* document = this->document(); | 392 Document* document = this->document(); |
| 393 | 393 |
| 394 if (document->printing() || !document->frame()->selection()->isFocusedAndAct
ive()) | 394 if (document->printing() || !document->frame()->selection()->isFocusedAndAct
ive()) |
| 395 return; | 395 return; |
| 396 | 396 |
| 397 if (paintInfo.context->paintingDisabled() && !paintInfo.context->updatingCon
trolTints()) | 397 if (paintInfo.getContext()->paintingDisabled() && !paintInfo.getContext()->u
pdatingControlTints()) |
| 398 return; | 398 return; |
| 399 | 399 |
| 400 Element* focusedElement = document->focusedElement(); | 400 Element* focusedElement = document->focusedElement(); |
| 401 if (!focusedElement || !isHTMLAreaElement(focusedElement)) | 401 if (!focusedElement || !isHTMLAreaElement(focusedElement)) |
| 402 return; | 402 return; |
| 403 | 403 |
| 404 HTMLAreaElement* areaElement = toHTMLAreaElement(focusedElement); | 404 HTMLAreaElement* areaElement = toHTMLAreaElement(focusedElement); |
| 405 if (areaElement->imageElement() != node()) | 405 if (areaElement->imageElement() != node()) |
| 406 return; | 406 return; |
| 407 | 407 |
| 408 // Even if the theme handles focus ring drawing for entire elements, it won'
t do it for | 408 // Even if the theme handles focus ring drawing for entire elements, it won'
t do it for |
| 409 // an area within an image, so we don't call RenderTheme::supportsFocusRing
here. | 409 // an area within an image, so we don't call RenderTheme::supportsFocusRing
here. |
| 410 | 410 |
| 411 Path path = areaElement->computePath(this); | 411 Path path = areaElement->computePath(this); |
| 412 if (path.isEmpty()) | 412 if (path.isEmpty()) |
| 413 return; | 413 return; |
| 414 | 414 |
| 415 RenderStyle* areaElementStyle = areaElement->computedStyle(); | 415 RenderStyle* areaElementStyle = areaElement->computedStyle(); |
| 416 unsigned short outlineWidth = areaElementStyle->outlineWidth(); | 416 unsigned short outlineWidth = areaElementStyle->outlineWidth(); |
| 417 if (!outlineWidth) | 417 if (!outlineWidth) |
| 418 return; | 418 return; |
| 419 | 419 |
| 420 // FIXME: Clip path instead of context when Skia pathops is ready. | 420 // FIXME: Clip path instead of context when Skia pathops is ready. |
| 421 // https://crbug.com/251206 | 421 // https://crbug.com/251206 |
| 422 GraphicsContextStateSaver savedContext(*paintInfo.context); | 422 GraphicsContextStateSaver savedContext(*(paintInfo.getContext())); |
| 423 paintInfo.context->clip(absoluteContentBox()); | 423 paintInfo.getContext()->clip(absoluteContentBox()); |
| 424 paintInfo.context->drawFocusRing(path, outlineWidth, | 424 paintInfo.getContext()->drawFocusRing(path, outlineWidth, |
| 425 areaElementStyle->outlineOffset(), | 425 areaElementStyle->outlineOffset(), |
| 426 resolveColor(areaElementStyle, CSSPropertyOutlineColor)); | 426 resolveColor(areaElementStyle, CSSPropertyOutlineColor)); |
| 427 } | 427 } |
| 428 | 428 |
| 429 void RenderImage::areaElementFocusChanged(HTMLAreaElement* areaElement) | 429 void RenderImage::areaElementFocusChanged(HTMLAreaElement* areaElement) |
| 430 { | 430 { |
| 431 ASSERT(areaElement->imageElement() == node()); | 431 ASSERT(areaElement->imageElement() == node()); |
| 432 | 432 |
| 433 Path path = areaElement->computePath(this); | 433 Path path = areaElement->computePath(this); |
| 434 if (path.isEmpty()) | 434 if (path.isEmpty()) |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 return 0; | 586 return 0; |
| 587 | 587 |
| 588 CachedImage* cachedImage = m_imageResource->cachedImage(); | 588 CachedImage* cachedImage = m_imageResource->cachedImage(); |
| 589 if (cachedImage && cachedImage->image() && cachedImage->image()->isSVGImage(
)) | 589 if (cachedImage && cachedImage->image() && cachedImage->image()->isSVGImage(
)) |
| 590 return static_cast<SVGImage*>(cachedImage->image())->embeddedContentBox(
); | 590 return static_cast<SVGImage*>(cachedImage->image())->embeddedContentBox(
); |
| 591 | 591 |
| 592 return 0; | 592 return 0; |
| 593 } | 593 } |
| 594 | 594 |
| 595 } // namespace WebCore | 595 } // namespace WebCore |
| OLD | NEW |