OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/ScrollableAreaPainter.h" | 5 #include "core/paint/ScrollableAreaPainter.h" |
6 | 6 |
7 #include "core/layout/LayoutView.h" | 7 #include "core/layout/LayoutView.h" |
8 #include "core/page/Page.h" | 8 #include "core/page/Page.h" |
9 #include "core/paint/LayoutObjectDrawingRecorder.h" | 9 #include "core/paint/LayoutObjectDrawingRecorder.h" |
10 #include "core/paint/ObjectPaintProperties.h" | 10 #include "core/paint/ObjectPaintProperties.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 context.SetStrokeColor(Color(217, 217, 217)); | 63 context.SetStrokeColor(Color(217, 217, 217)); |
64 context.SetStrokeThickness(1.0f); | 64 context.SetStrokeThickness(1.0f); |
65 context.SetFillColor(Color::kTransparent); | 65 context.SetFillColor(Color::kTransparent); |
66 context.DrawRect(larger_corner); | 66 context.DrawRect(larger_corner); |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 void ScrollableAreaPainter::DrawPlatformResizerImage( | 70 void ScrollableAreaPainter::DrawPlatformResizerImage( |
71 GraphicsContext& context, | 71 GraphicsContext& context, |
72 IntRect resizer_corner_rect) { | 72 IntRect resizer_corner_rect) { |
73 float old_device_scale_factor = | 73 IntPoint points[4]; |
74 blink::DeviceScaleFactorDeprecated(GetScrollableArea().Box().GetFrame()); | 74 bool on_left = false; |
75 // |blink::deviceScaleFactor| returns different values between MAC (2 or 1) | |
76 // and other platforms (always 1). For this reason we cannot hardcode the | |
77 // value of 1 in the call for |windowToViewportScalar|. Since zoom-for-dsf is | |
78 // disabled on MAC, |windowToViewportScalar| will be a no-op on it. | |
79 float device_scale_factor = | |
80 GetScrollableArea().GetChromeClient()->WindowToViewportScalar( | |
81 old_device_scale_factor); | |
82 | |
83 RefPtr<Image> resize_corner_image; | |
84 IntSize corner_resizer_size; | |
85 if (device_scale_factor >= 2) { | |
86 DEFINE_STATIC_REF(Image, resize_corner_image_hi_res, | |
87 (Image::LoadPlatformResource("textAreaResizeCorner@2x"))); | |
88 resize_corner_image = resize_corner_image_hi_res; | |
89 corner_resizer_size = resize_corner_image->Size(); | |
90 if (old_device_scale_factor >= 2) | |
91 corner_resizer_size.Scale(0.5f); | |
92 } else { | |
93 DEFINE_STATIC_REF(Image, resize_corner_image_lo_res, | |
94 (Image::LoadPlatformResource("textAreaResizeCorner"))); | |
95 resize_corner_image = resize_corner_image_lo_res; | |
96 corner_resizer_size = resize_corner_image->Size(); | |
97 } | |
98 | |
99 if (GetScrollableArea() | 75 if (GetScrollableArea() |
100 .Box() | 76 .Box() |
101 .ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) { | 77 .ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) { |
102 context.Save(); | 78 on_left = true; |
103 context.Translate(resizer_corner_rect.X() + corner_resizer_size.Width(), | 79 points[0].SetX(resizer_corner_rect.X() + 1); |
104 resizer_corner_rect.Y() + resizer_corner_rect.Height() - | 80 points[1].SetX(resizer_corner_rect.X() + resizer_corner_rect.Width() - |
105 corner_resizer_size.Height()); | 81 resizer_corner_rect.Width() / 2); |
106 context.Scale(-1.0, 1.0); | 82 points[2].SetX(points[0].X()); |
107 context.DrawImage(resize_corner_image.Get(), | 83 points[3].SetX(resizer_corner_rect.X() + resizer_corner_rect.Width() - |
108 IntRect(IntPoint(), corner_resizer_size)); | 84 resizer_corner_rect.Width() * 3 / 4); |
109 context.Restore(); | 85 } else { |
110 return; | 86 points[0].SetX(resizer_corner_rect.X() + resizer_corner_rect.Width() - 1); |
| 87 points[1].SetX(resizer_corner_rect.X() + resizer_corner_rect.Width() / 2); |
| 88 points[2].SetX(points[0].X()); |
| 89 points[3].SetX(resizer_corner_rect.X() + |
| 90 resizer_corner_rect.Width() * 3 / 4); |
111 } | 91 } |
112 IntRect image_rect(resizer_corner_rect.MaxXMaxYCorner() - corner_resizer_size, | 92 points[0].SetY(resizer_corner_rect.Y() + resizer_corner_rect.Height() / 2); |
113 corner_resizer_size); | 93 points[1].SetY(resizer_corner_rect.Y() + resizer_corner_rect.Height() - 1); |
114 context.DrawImage(resize_corner_image.Get(), image_rect); | 94 points[2].SetY(resizer_corner_rect.Y() + |
| 95 resizer_corner_rect.Height() * 3 / 4); |
| 96 points[3].SetY(points[1].Y()); |
| 97 |
| 98 PaintFlags paint_flags; |
| 99 paint_flags.setStyle(PaintFlags::kStroke_Style); |
| 100 paint_flags.setStrokeWidth(1); |
| 101 |
| 102 SkPath line_path; |
| 103 |
| 104 // Draw a dark line, to ensure contrast against a light background |
| 105 line_path.moveTo(points[0].X(), points[0].Y()); |
| 106 line_path.lineTo(points[1].X(), points[1].Y()); |
| 107 line_path.moveTo(points[2].X(), points[2].Y()); |
| 108 line_path.lineTo(points[3].X(), points[3].Y()); |
| 109 paint_flags.setARGB(153, 0, 0, 0); |
| 110 context.DrawPath(line_path, paint_flags); |
| 111 |
| 112 // Draw a light line one pixel below the light line, |
| 113 // to ensure contrast against a dark background |
| 114 line_path.rewind(); |
| 115 line_path.moveTo(points[0].X(), points[0].Y() + 1); |
| 116 line_path.lineTo(points[1].X() + (on_left ? -1 : 1), points[1].Y()); |
| 117 line_path.moveTo(points[2].X(), points[2].Y() + 1); |
| 118 line_path.lineTo(points[3].X() + (on_left ? -1 : 1), points[3].Y()); |
| 119 paint_flags.setARGB(153, 255, 255, 255); |
| 120 context.DrawPath(line_path, paint_flags); |
115 } | 121 } |
116 | 122 |
117 void ScrollableAreaPainter::PaintOverflowControls( | 123 void ScrollableAreaPainter::PaintOverflowControls( |
118 GraphicsContext& context, | 124 GraphicsContext& context, |
119 const IntPoint& paint_offset, | 125 const IntPoint& paint_offset, |
120 const CullRect& cull_rect, | 126 const CullRect& cull_rect, |
121 bool painting_overlay_controls) { | 127 bool painting_overlay_controls) { |
122 // Don't do anything if we have no overflow. | 128 // Don't do anything if we have no overflow. |
123 if (!GetScrollableArea().Box().HasOverflowClip()) | 129 if (!GetScrollableArea().Box().HasOverflowClip()) |
124 return; | 130 return; |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 LayoutObjectDrawingRecorder recorder(context, GetScrollableArea().Box(), | 275 LayoutObjectDrawingRecorder recorder(context, GetScrollableArea().Box(), |
270 DisplayItem::kScrollbarCorner, abs_rect); | 276 DisplayItem::kScrollbarCorner, abs_rect); |
271 context.FillRect(abs_rect, Color::kWhite); | 277 context.FillRect(abs_rect, Color::kWhite); |
272 } | 278 } |
273 | 279 |
274 PaintLayerScrollableArea& ScrollableAreaPainter::GetScrollableArea() const { | 280 PaintLayerScrollableArea& ScrollableAreaPainter::GetScrollableArea() const { |
275 return *scrollable_area_; | 281 return *scrollable_area_; |
276 } | 282 } |
277 | 283 |
278 } // namespace blink | 284 } // namespace blink |
OLD | NEW |