1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_widget_ScrollbarDrawingCocoa_h
8 #define mozilla_widget_ScrollbarDrawingCocoa_h
10 #include "ScrollbarDrawing.h"
12 #include "mozilla/Array.h"
13 #include "nsNativeBasicTheme.h"
15 namespace mozilla::widget
{
17 class ScrollbarDrawingCocoa final
: public ScrollbarDrawing
{
19 ScrollbarDrawingCocoa() = default;
20 virtual ~ScrollbarDrawingCocoa() = default;
27 // The caller can draw this rectangle with rounded corners as appropriate.
36 using ScrollbarTrackRects
= Array
<FillRectType
, 4>;
37 using ScrollCornerRects
= Array
<FillRectType
, 7>;
39 LayoutDeviceIntSize
GetMinimumWidgetSize(nsPresContext
*,
40 StyleAppearance aAppearance
,
41 nsIFrame
* aFrame
) override
;
43 static CSSIntCoord
GetScrollbarSize(StyleScrollbarWidth aWidth
,
45 static LayoutDeviceIntCoord
GetScrollbarSize(StyleScrollbarWidth aWidth
,
48 ScrollbarSizes
GetScrollbarSizes(nsPresContext
*, StyleScrollbarWidth
,
51 static ThumbRect
GetThumbRect(const gfx::Rect
& aRect
,
52 const ScrollbarParams
& aParams
, float aScale
);
53 static bool GetScrollbarTrackRects(const gfx::Rect
& aRect
,
54 const ScrollbarParams
& aParams
,
55 float aScale
, ScrollbarTrackRects
& aRects
);
56 static bool GetScrollCornerRects(const gfx::Rect
& aRect
,
57 const ScrollbarParams
& aParams
, float aScale
,
58 ScrollCornerRects
& aRects
);
60 template <typename PaintBackendData
>
61 void DoPaintScrollbarThumb(PaintBackendData
&, const LayoutDeviceRect
& aRect
,
62 bool aHorizontal
, nsIFrame
* aFrame
,
63 const ComputedStyle
& aStyle
,
64 const EventStates
& aElementState
,
65 const EventStates
& aDocumentState
,
67 bool PaintScrollbarThumb(DrawTarget
&, const LayoutDeviceRect
&,
68 bool aHorizontal
, nsIFrame
*, const ComputedStyle
&,
69 const EventStates
& aElementState
,
70 const EventStates
& aDocumentState
, const Colors
&,
71 const DPIRatio
&) override
;
72 bool PaintScrollbarThumb(WebRenderBackendData
&, const LayoutDeviceRect
&,
73 bool aHorizontal
, nsIFrame
*, const ComputedStyle
&,
74 const EventStates
& aElementState
,
75 const EventStates
& aDocumentState
, const Colors
&,
76 const DPIRatio
&) override
;
78 template <typename PaintBackendData
>
79 void DoPaintScrollbarTrack(PaintBackendData
&, const LayoutDeviceRect
&, bool,
80 nsIFrame
*, const ComputedStyle
&,
81 const EventStates
&, const DPIRatio
&);
82 bool PaintScrollbarTrack(DrawTarget
&, const LayoutDeviceRect
& aRect
,
83 bool aHorizontal
, nsIFrame
* aFrame
,
84 const ComputedStyle
& aStyle
,
85 const EventStates
& aDocumentState
, const Colors
&,
86 const DPIRatio
&) override
;
87 bool PaintScrollbarTrack(WebRenderBackendData
&, const LayoutDeviceRect
& aRect
,
88 bool aHorizontal
, nsIFrame
* aFrame
,
89 const ComputedStyle
& aStyle
,
90 const EventStates
& aDocumentState
, const Colors
&,
91 const DPIRatio
&) override
;
93 template <typename PaintBackendData
>
94 void DoPaintScrollCorner(PaintBackendData
&, const LayoutDeviceRect
&,
95 nsIFrame
*, const ComputedStyle
&, const EventStates
&,
97 bool PaintScrollCorner(DrawTarget
&, const LayoutDeviceRect
& aRect
,
98 nsIFrame
* aFrame
, const ComputedStyle
& aStyle
,
99 const EventStates
& aDocumentState
, const Colors
&,
100 const DPIRatio
&) override
;
101 bool PaintScrollCorner(WebRenderBackendData
&, const LayoutDeviceRect
& aRect
,
102 nsIFrame
* aFrame
, const ComputedStyle
& aStyle
,
103 const EventStates
& aDocumentState
, const Colors
&,
104 const DPIRatio
&) override
;
106 void RecomputeScrollbarParams() override
;
108 bool ShouldDrawScrollbarButtons() override
{ return false; }
111 } // namespace mozilla::widget