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 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 // tell any potential compositing layers | 272 // tell any potential compositing layers |
273 // that the image is done and they can reference it directly. | 273 // that the image is done and they can reference it directly. |
274 contentChanged(ImageChanged); | 274 contentChanged(ImageChanged); |
275 } | 275 } |
276 } | 276 } |
277 | 277 |
278 void RenderImage::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) | 278 void RenderImage::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf
fset) |
279 { | 279 { |
280 LayoutUnit cWidth = contentWidth(); | 280 LayoutUnit cWidth = contentWidth(); |
281 LayoutUnit cHeight = contentHeight(); | 281 LayoutUnit cHeight = contentHeight(); |
282 LayoutUnit leftBorder = borderLeft(); | |
283 LayoutUnit topBorder = borderTop(); | |
284 LayoutUnit leftPad = paddingLeft(); | |
285 LayoutUnit topPad = paddingTop(); | |
286 | 282 |
287 GraphicsContext* context = paintInfo.context; | 283 GraphicsContext* context = paintInfo.context; |
288 | 284 |
289 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred()) { | 285 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred()) { |
290 if (paintInfo.phase == PaintPhaseSelection) | 286 if (paintInfo.phase == PaintPhaseSelection) |
291 return; | 287 return; |
292 | 288 |
293 if (cWidth > 2 && cHeight > 2) { | 289 if (cWidth > 2 && cHeight > 2) { |
294 const int borderWidth = 1; | 290 const int borderWidth = 1; |
295 | 291 |
| 292 LayoutUnit leftBorder = borderLeft(); |
| 293 LayoutUnit topBorder = borderTop(); |
| 294 LayoutUnit leftPad = paddingLeft(); |
| 295 LayoutUnit topPad = paddingTop(); |
| 296 |
296 // Draw an outline rect where the image should be. | 297 // Draw an outline rect where the image should be. |
297 context->setStrokeStyle(SolidStroke); | 298 context->setStrokeStyle(SolidStroke); |
298 context->setStrokeColor(Color::lightGray); | 299 context->setStrokeColor(Color::lightGray); |
299 context->setFillColor(Color::transparent); | 300 context->setFillColor(Color::transparent); |
300 context->drawRect(pixelSnappedIntRect(LayoutRect(paintOffset.x() + l
eftBorder + leftPad, paintOffset.y() + topBorder + topPad, cWidth, cHeight))); | 301 context->drawRect(pixelSnappedIntRect(LayoutRect(paintOffset.x() + l
eftBorder + leftPad, paintOffset.y() + topBorder + topPad, cWidth, cHeight))); |
301 | 302 |
302 bool errorPictureDrawn = false; | 303 bool errorPictureDrawn = false; |
303 LayoutSize imageOffset; | 304 LayoutSize imageOffset; |
304 // When calculating the usable dimensions, exclude the pixels of | 305 // When calculating the usable dimensions, exclude the pixels of |
305 // the ouline rect so the error image/alt text doesn't draw on it. | 306 // the ouline rect so the error image/alt text doesn't draw on it. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 } | 349 } |
349 if (errorPictureDrawn) { | 350 if (errorPictureDrawn) { |
350 if (usableWidth >= textWidth && fontMetrics.height() <= imag
eOffset.height()) | 351 if (usableWidth >= textWidth && fontMetrics.height() <= imag
eOffset.height()) |
351 context->drawBidiText(font, textRunPaintInfo, textOrigin
); | 352 context->drawBidiText(font, textRunPaintInfo, textOrigin
); |
352 } else if (usableWidth >= textWidth && usableHeight >= fontMetri
cs.height()) { | 353 } else if (usableWidth >= textWidth && usableHeight >= fontMetri
cs.height()) { |
353 context->drawBidiText(font, textRunPaintInfo, textOrigin); | 354 context->drawBidiText(font, textRunPaintInfo, textOrigin); |
354 } | 355 } |
355 } | 356 } |
356 } | 357 } |
357 } else if (m_imageResource->hasImage() && cWidth > 0 && cHeight > 0) { | 358 } else if (m_imageResource->hasImage() && cWidth > 0 && cHeight > 0) { |
358 RefPtr<Image> img = m_imageResource->image(cWidth, cHeight); | |
359 if (!img || img->isNull()) | |
360 return; | |
361 | |
362 LayoutRect contentRect = contentBoxRect(); | 359 LayoutRect contentRect = contentBoxRect(); |
363 contentRect.moveBy(paintOffset); | 360 contentRect.moveBy(paintOffset); |
364 LayoutRect paintRect = replacedContentRect(); | 361 LayoutRect paintRect = replacedContentRect(); |
365 paintRect.moveBy(paintOffset); | 362 paintRect.moveBy(paintOffset); |
366 bool clip = !contentRect.contains(paintRect); | 363 bool clip = !contentRect.contains(paintRect); |
367 if (clip) { | 364 if (clip) { |
368 context->save(); | 365 context->save(); |
369 context->clip(contentRect); | 366 context->clip(contentRect); |
370 } | 367 } |
371 | 368 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
443 IntRect alignedRect = pixelSnappedIntRect(rect); | 440 IntRect alignedRect = pixelSnappedIntRect(rect); |
444 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred() || alig
nedRect.width() <= 0 || alignedRect.height() <= 0) | 441 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred() || alig
nedRect.width() <= 0 || alignedRect.height() <= 0) |
445 return; | 442 return; |
446 | 443 |
447 RefPtr<Image> img = m_imageResource->image(alignedRect.width(), alignedRect.
height()); | 444 RefPtr<Image> img = m_imageResource->image(alignedRect.width(), alignedRect.
height()); |
448 if (!img || img->isNull()) | 445 if (!img || img->isNull()) |
449 return; | 446 return; |
450 | 447 |
451 HTMLImageElement* imageElt = isHTMLImageElement(node()) ? toHTMLImageElement
(node()) : 0; | 448 HTMLImageElement* imageElt = isHTMLImageElement(node()) ? toHTMLImageElement
(node()) : 0; |
452 CompositeOperator compositeOperator = imageElt ? imageElt->compositeOperator
() : CompositeSourceOver; | 449 CompositeOperator compositeOperator = imageElt ? imageElt->compositeOperator
() : CompositeSourceOver; |
453 Image* image = m_imageResource->image().get(); | 450 Image* image = img.get(); |
454 InterpolationQuality interpolationQuality = chooseInterpolationQuality(conte
xt, image, image, alignedRect.size()); | 451 InterpolationQuality interpolationQuality = chooseInterpolationQuality(conte
xt, image, image, alignedRect.size()); |
455 | 452 |
456 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", "
data", InspectorPaintImageEvent::data(*this)); | 453 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", "
data", InspectorPaintImageEvent::data(*this)); |
457 // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeli
ne migrates to tracing. | 454 // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeli
ne migrates to tracing. |
458 InspectorInstrumentation::willPaintImage(this); | 455 InspectorInstrumentation::willPaintImage(this); |
459 InterpolationQuality previousInterpolationQuality = context->imageInterpolat
ionQuality(); | 456 InterpolationQuality previousInterpolationQuality = context->imageInterpolat
ionQuality(); |
460 context->setImageInterpolationQuality(interpolationQuality); | 457 context->setImageInterpolationQuality(interpolationQuality); |
461 context->drawImage(m_imageResource->image(alignedRect.width(), alignedRect.h
eight()).get(), alignedRect, compositeOperator, shouldRespectImageOrientation())
; | 458 context->drawImage(image, alignedRect, compositeOperator, shouldRespectImage
Orientation()); |
462 context->setImageInterpolationQuality(previousInterpolationQuality); | 459 context->setImageInterpolationQuality(previousInterpolationQuality); |
463 InspectorInstrumentation::didPaintImage(this); | 460 InspectorInstrumentation::didPaintImage(this); |
464 } | 461 } |
465 | 462 |
466 bool RenderImage::boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoidance
bleedAvoidance, InlineFlowBox*) const | 463 bool RenderImage::boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoidance
bleedAvoidance, InlineFlowBox*) const |
467 { | 464 { |
468 if (!RenderBoxModelObject::boxShadowShouldBeAppliedToBackground(bleedAvoidan
ce)) | 465 if (!RenderBoxModelObject::boxShadowShouldBeAppliedToBackground(bleedAvoidan
ce)) |
469 return false; | 466 return false; |
470 | 467 |
471 return !const_cast<RenderImage*>(this)->boxDecorationBackgroundIsKnownToBeOb
scured(); | 468 return !const_cast<RenderImage*>(this)->boxDecorationBackgroundIsKnownToBeOb
scured(); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 return 0; | 625 return 0; |
629 | 626 |
630 ImageResource* cachedImage = m_imageResource->cachedImage(); | 627 ImageResource* cachedImage = m_imageResource->cachedImage(); |
631 if (cachedImage && cachedImage->image() && cachedImage->image()->isSVGImage(
)) | 628 if (cachedImage && cachedImage->image() && cachedImage->image()->isSVGImage(
)) |
632 return toSVGImage(cachedImage->image())->embeddedContentBox(); | 629 return toSVGImage(cachedImage->image())->embeddedContentBox(); |
633 | 630 |
634 return 0; | 631 return 0; |
635 } | 632 } |
636 | 633 |
637 } // namespace blink | 634 } // namespace blink |
OLD | NEW |