Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Side by Side Diff: third_party/WebKit/Source/core/paint/NinePieceImagePainter.cpp

Issue 2942123002: Break LayoutObject dependency for NinePieceImagePainter (Closed)
Patch Set: Pass document explicitly Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/paint/NinePieceImagePainter.h" 5 #include "core/paint/NinePieceImagePainter.h"
6 6
7 #include "core/layout/ImageQualityController.h" 7 #include "core/layout/ImageQualityController.h"
8 #include "core/layout/LayoutBoxModelObject.h" 8 #include "core/layout/LayoutBoxModelObject.h"
9 #include "core/page/ChromeClient.h" 9 #include "core/page/ChromeClient.h"
10 #include "core/page/Page.h" 10 #include "core/page/Page.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 draw_info.tile_rule.horizontal, 46 draw_info.tile_rule.horizontal,
47 draw_info.tile_rule.vertical, op); 47 draw_info.tile_rule.vertical, op);
48 } 48 }
49 } 49 }
50 } 50 }
51 } 51 }
52 52
53 } // anonymous namespace 53 } // anonymous namespace
54 54
55 bool NinePieceImagePainter::Paint(GraphicsContext& graphics_context, 55 bool NinePieceImagePainter::Paint(GraphicsContext& graphics_context,
56 const LayoutBoxModelObject& layout_object, 56 const ImageResourceObserver& observer,
57 const Document& document,
58 Node* node,
57 const LayoutRect& rect, 59 const LayoutRect& rect,
58 const ComputedStyle& style, 60 const ComputedStyle& style,
59 const NinePieceImage& nine_piece_image, 61 const NinePieceImage& nine_piece_image,
60 SkBlendMode op) const { 62 SkBlendMode op) {
61 StyleImage* style_image = nine_piece_image.GetImage(); 63 StyleImage* style_image = nine_piece_image.GetImage();
62 if (!style_image) 64 if (!style_image)
63 return false; 65 return false;
64 66
65 if (!style_image->IsLoaded()) 67 if (!style_image->IsLoaded())
66 return true; // Never paint a nine-piece image incrementally, but don't 68 return true; // Never paint a nine-piece image incrementally, but don't
67 // paint the fallback borders either. 69 // paint the fallback borders either.
68 70
69 if (!style_image->CanRender()) 71 if (!style_image->CanRender())
70 return false; 72 return false;
71 73
72 // FIXME: border-image is broken with full page zooming when tiling has to 74 // FIXME: border-image is broken with full page zooming when tiling has to
73 // happen, since the tiling function doesn't have any understanding of the 75 // happen, since the tiling function doesn't have any understanding of the
74 // zoom that is in effect on the tile. 76 // zoom that is in effect on the tile.
75 LayoutRect rect_with_outsets = rect; 77 LayoutRect rect_with_outsets = rect;
76 rect_with_outsets.Expand(style.ImageOutsets(nine_piece_image)); 78 rect_with_outsets.Expand(style.ImageOutsets(nine_piece_image));
77 LayoutRect border_image_rect = rect_with_outsets; 79 LayoutRect border_image_rect = rect_with_outsets;
78 80
79 // NinePieceImage returns the image slices without effective zoom applied and 81 // NinePieceImage returns the image slices without effective zoom applied and
80 // thus we compute the nine piece grid on top of the image in unzoomed 82 // thus we compute the nine piece grid on top of the image in unzoomed
81 // coordinates. 83 // coordinates.
82 // 84 //
83 // FIXME: The default object size passed to imageSize() should be scaled by 85 // FIXME: The default object size passed to imageSize() should be scaled by
84 // the zoom factor passed in. In this case it means that borderImageRect 86 // the zoom factor passed in. In this case it means that borderImageRect
85 // should be passed in compensated by effective zoom, since the scale factor 87 // should be passed in compensated by effective zoom, since the scale factor
86 // is one. For generated images, the actual image data (gradient stops, etc.) 88 // is one. For generated images, the actual image data (gradient stops, etc.)
87 // are scaled to effective zoom instead so we must take care not to cause 89 // are scaled to effective zoom instead so we must take care not to cause
88 // scale of them again. 90 // scale of them again.
89 const Document& document = layout_object.GetDocument();
90 IntSize image_size = RoundedIntSize( 91 IntSize image_size = RoundedIntSize(
91 style_image->ImageSize(document, 1, border_image_rect.Size())); 92 style_image->ImageSize(document, 1, border_image_rect.Size()));
92 RefPtr<Image> image = style_image->GetImage( 93 RefPtr<Image> image =
93 layout_object, document, layout_object.StyleRef(), image_size); 94 style_image->GetImage(observer, document, style, image_size);
94 95
95 double time = document.GetPage()->GetChromeClient().LastFrameTimeMonotonic(); 96 double time = document.GetPage()->GetChromeClient().LastFrameTimeMonotonic();
96 InterpolationQuality interpolation_quality = 97 InterpolationQuality interpolation_quality =
97 ImageQualityController::GetImageQualityController() 98 ImageQualityController::GetImageQualityController()
98 ->ChooseInterpolationQuality(layout_object, layout_object.StyleRef(), 99 ->ChooseInterpolationQuality(observer, style, document.GetSettings(),
99 document.GetSettings(), image.Get(), 100 image.Get(), nullptr,
100 nullptr, rect_with_outsets.Size(), time); 101 rect_with_outsets.Size(), time);
101 InterpolationQuality previous_interpolation_quality = 102 InterpolationQuality previous_interpolation_quality =
102 graphics_context.ImageInterpolationQuality(); 103 graphics_context.ImageInterpolationQuality();
103 graphics_context.SetImageInterpolationQuality(interpolation_quality); 104 graphics_context.SetImageInterpolationQuality(interpolation_quality);
104 105
105 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", 106 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage",
106 "data", 107 "data", InspectorPaintImageEvent::Data(node, *style_image));
107 InspectorPaintImageEvent::Data(layout_object, *style_image));
108 108
109 PaintPieces(graphics_context, border_image_rect, style, nine_piece_image, 109 PaintPieces(graphics_context, border_image_rect, style, nine_piece_image,
110 image.Get(), image_size, op); 110 image.Get(), image_size, op);
111 111
112 graphics_context.SetImageInterpolationQuality(previous_interpolation_quality); 112 graphics_context.SetImageInterpolationQuality(previous_interpolation_quality);
113 return true; 113 return true;
114 } 114 }
115 115
116 } // namespace blink 116 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698