| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 // Keep border_y in synch with DragController::LinkDragBorderInset. | 62 // Keep border_y in synch with DragController::LinkDragBorderInset. |
| 63 const float kDragLabelBorderY = 2; | 63 const float kDragLabelBorderY = 2; |
| 64 const float kLabelBorderYOffset = 2; | 64 const float kLabelBorderYOffset = 2; |
| 65 | 65 |
| 66 const float kMaxDragLabelWidth = 300; | 66 const float kMaxDragLabelWidth = 300; |
| 67 const float kMaxDragLabelStringWidth = (kMaxDragLabelWidth - 2 * kDragLabelBorde
rX); | 67 const float kMaxDragLabelStringWidth = (kMaxDragLabelWidth - 2 * kDragLabelBorde
rX); |
| 68 | 68 |
| 69 const float kDragLinkLabelFontSize = 11; | 69 const float kDragLinkLabelFontSize = 11; |
| 70 const float kDragLinkUrlFontSize = 10; | 70 const float kDragLinkUrlFontSize = 10; |
| 71 | 71 |
| 72 PassOwnPtr<DragImage> DragImage::create(Image* image, RespectImageOrientationEnu
m shouldRespectImageOrientation, float deviceScaleFactor) | 72 PassOwnPtr<DragImage> DragImage::create(Image* image, RespectImageOrientationEnu
m shouldRespectImageOrientation, float deviceScaleFactor, ResizeMethod resizeMet
hod) |
| 73 { | 73 { |
| 74 if (!image) | 74 if (!image) |
| 75 return nullptr; | 75 return nullptr; |
| 76 | 76 |
| 77 RefPtr<NativeImageSkia> bitmap = image->nativeImageForCurrentFrame(); | 77 RefPtr<NativeImageSkia> bitmap = image->nativeImageForCurrentFrame(); |
| 78 if (!bitmap) | 78 if (!bitmap) |
| 79 return nullptr; | 79 return nullptr; |
| 80 | 80 |
| 81 if (image->isBitmapImage()) { | 81 if (image->isBitmapImage()) { |
| 82 ImageOrientation orientation = DefaultImageOrientation; | 82 ImageOrientation orientation = DefaultImageOrientation; |
| 83 BitmapImage* bitmapImage = toBitmapImage(image); | 83 BitmapImage* bitmapImage = toBitmapImage(image); |
| 84 IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientati
on(); | 84 IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientati
on(); |
| 85 | 85 |
| 86 if (shouldRespectImageOrientation == RespectImageOrientation) | 86 if (shouldRespectImageOrientation == RespectImageOrientation) |
| 87 orientation = bitmapImage->currentFrameOrientation(); | 87 orientation = bitmapImage->currentFrameOrientation(); |
| 88 | 88 |
| 89 if (orientation != DefaultImageOrientation) { | 89 if (orientation != DefaultImageOrientation) { |
| 90 FloatRect destRect(FloatPoint(), sizeRespectingOrientation); | 90 FloatRect destRect(FloatPoint(), sizeRespectingOrientation); |
| 91 if (orientation.usesWidthAsHeight()) | 91 if (orientation.usesWidthAsHeight()) |
| 92 destRect = destRect.transposedRect(); | 92 destRect = destRect.transposedRect(); |
| 93 | 93 |
| 94 SkBitmap skBitmap; | 94 SkBitmap skBitmap; |
| 95 if (!skBitmap.tryAllocN32Pixels(sizeRespectingOrientation.width(), s
izeRespectingOrientation.height())) | 95 if (!skBitmap.tryAllocN32Pixels(sizeRespectingOrientation.width(), s
izeRespectingOrientation.height())) |
| 96 return nullptr; | 96 return nullptr; |
| 97 | 97 |
| 98 SkCanvas canvas(skBitmap); | 98 SkCanvas canvas(skBitmap); |
| 99 canvas.concat(affineTransformToSkMatrix(orientation.transformFromDef
ault(sizeRespectingOrientation))); | 99 canvas.concat(affineTransformToSkMatrix(orientation.transformFromDef
ault(sizeRespectingOrientation))); |
| 100 canvas.drawBitmapRect(bitmap->bitmap(), 0, destRect); | 100 canvas.drawBitmapRect(bitmap->bitmap(), 0, destRect); |
| 101 | 101 |
| 102 return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); | 102 return adoptPtr(new DragImage(skBitmap, deviceScaleFactor, resizeMet
hod)); |
| 103 } | 103 } |
| 104 } | 104 } |
| 105 | 105 |
| 106 SkBitmap skBitmap; | 106 SkBitmap skBitmap; |
| 107 if (!bitmap->bitmap().copyTo(&skBitmap, kN32_SkColorType)) | 107 if (!bitmap->bitmap().copyTo(&skBitmap, kN32_SkColorType)) |
| 108 return nullptr; | 108 return nullptr; |
| 109 return adoptPtr(new DragImage(skBitmap, deviceScaleFactor)); | 109 return adoptPtr(new DragImage(skBitmap, deviceScaleFactor, resizeMethod)); |
| 110 } | 110 } |
| 111 | 111 |
| 112 static Font deriveDragLabelFont(int size, FontWeight fontWeight, const FontDescr
iption& systemFont) | 112 static Font deriveDragLabelFont(int size, FontWeight fontWeight, const FontDescr
iption& systemFont) |
| 113 { | 113 { |
| 114 FontDescription description = systemFont; | 114 FontDescription description = systemFont; |
| 115 description.setWeight(fontWeight); | 115 description.setWeight(fontWeight); |
| 116 description.setSpecifiedSize(size); | 116 description.setSpecifiedSize(size); |
| 117 description.setComputedSize(size); | 117 description.setComputedSize(size); |
| 118 Font result(description); | 118 Font result(description); |
| 119 result.update(nullptr); | 119 result.update(nullptr); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 context->drawBidiText(labelFont, TextRunPaintInfo(textRun), FloatPoint(t
extPos)); | 214 context->drawBidiText(labelFont, TextRunPaintInfo(textRun), FloatPoint(t
extPos)); |
| 215 } | 215 } |
| 216 | 216 |
| 217 if (RuntimeEnabledFeatures::slimmingPaintEnabled()) | 217 if (RuntimeEnabledFeatures::slimmingPaintEnabled()) |
| 218 displayItemList->replay(buffer->context()); | 218 displayItemList->replay(buffer->context()); |
| 219 | 219 |
| 220 RefPtr<Image> image = buffer->copyImage(); | 220 RefPtr<Image> image = buffer->copyImage(); |
| 221 return DragImage::create(image.get(), DoNotRespectImageOrientation, deviceSc
aleFactor); | 221 return DragImage::create(image.get(), DoNotRespectImageOrientation, deviceSc
aleFactor); |
| 222 } | 222 } |
| 223 | 223 |
| 224 DragImage::DragImage(const SkBitmap& bitmap, float resolutionScale) | 224 DragImage::DragImage(const SkBitmap& bitmap, float resolutionScale, ResizeMethod
resizeMethod) |
| 225 : m_bitmap(bitmap) | 225 : m_bitmap(bitmap) |
| 226 , m_resolutionScale(resolutionScale) | 226 , m_resolutionScale(resolutionScale) |
| 227 , m_resizeMethod(resizeMethod) |
| 227 { | 228 { |
| 228 } | 229 } |
| 229 | 230 |
| 230 DragImage::~DragImage() | 231 DragImage::~DragImage() |
| 231 { | 232 { |
| 232 } | 233 } |
| 233 | 234 |
| 234 void DragImage::fitToMaxSize(const IntSize& srcSize, const IntSize& maxSize) | 235 void DragImage::fitToMaxSize(const IntSize& srcSize, const IntSize& maxSize) |
| 235 { | 236 { |
| 236 float heightResizeRatio = 0.0f; | 237 float heightResizeRatio = 0.0f; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 264 } | 265 } |
| 265 | 266 |
| 266 scale(scaleX, scaleY); | 267 scale(scaleX, scaleY); |
| 267 } | 268 } |
| 268 | 269 |
| 269 void DragImage::scale(float scaleX, float scaleY) | 270 void DragImage::scale(float scaleX, float scaleY) |
| 270 { | 271 { |
| 271 int imageWidth = scaleX * m_bitmap.width(); | 272 int imageWidth = scaleX * m_bitmap.width(); |
| 272 int imageHeight = scaleY * m_bitmap.height(); | 273 int imageHeight = scaleY * m_bitmap.height(); |
| 273 m_bitmap = skia::ImageOperations::Resize( | 274 m_bitmap = skia::ImageOperations::Resize( |
| 274 m_bitmap, skia::ImageOperations::RESIZE_LANCZOS3, imageWidth, imageHeigh
t); | 275 m_bitmap, m_resizeMethod, imageWidth, imageHeight); |
| 275 } | 276 } |
| 276 | 277 |
| 277 void DragImage::dissolveToFraction(float fraction) | 278 void DragImage::dissolveToFraction(float fraction) |
| 278 { | 279 { |
| 279 m_bitmap.setAlphaType(kPremul_SkAlphaType); | 280 m_bitmap.setAlphaType(kPremul_SkAlphaType); |
| 280 SkAutoLockPixels lock(m_bitmap); | 281 SkAutoLockPixels lock(m_bitmap); |
| 281 | 282 |
| 282 for (int row = 0; row < m_bitmap.height(); ++row) { | 283 for (int row = 0; row < m_bitmap.height(); ++row) { |
| 283 for (int column = 0; column < m_bitmap.width(); ++column) { | 284 for (int column = 0; column < m_bitmap.width(); ++column) { |
| 284 uint32_t* pixel = m_bitmap.getAddr32(column, row); | 285 uint32_t* pixel = m_bitmap.getAddr32(column, row); |
| 285 *pixel = SkPreMultiplyARGB( | 286 *pixel = SkPreMultiplyARGB( |
| 286 SkColorGetA(*pixel) * fraction, | 287 SkColorGetA(*pixel) * fraction, |
| 287 SkColorGetR(*pixel), | 288 SkColorGetR(*pixel), |
| 288 SkColorGetG(*pixel), | 289 SkColorGetG(*pixel), |
| 289 SkColorGetB(*pixel)); | 290 SkColorGetB(*pixel)); |
| 290 } | 291 } |
| 291 } | 292 } |
| 292 } | 293 } |
| 293 | 294 |
| 294 } // namespace blink | 295 } // namespace blink |
| OLD | NEW |