1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22 #include "precompiled_sfx2.hxx"
23
24 #include "DrawHelper.hxx"
25 #include "Paint.hxx"
26
27 #include <vcl/lineinfo.hxx>
28
29
30 namespace sfx2 { namespace sidebar {
31
DrawBorder(OutputDevice & rDevice,const Rectangle rBox,const SvBorder aBorderSize,const Paint & rHorizontalPaint,const Paint & rVerticalPaint)32 void DrawHelper::DrawBorder (
33 OutputDevice& rDevice,
34 const Rectangle rBox,
35 const SvBorder aBorderSize,
36 const Paint& rHorizontalPaint,
37 const Paint& rVerticalPaint)
38 {
39 // Draw top line.
40 DrawHorizontalLine(
41 rDevice,
42 rBox.Left(),
43 rBox.Right(),
44 rBox.Top(),
45 aBorderSize.Top(),
46 rHorizontalPaint);
47 // Draw bottom line.
48 DrawHorizontalLine(
49 rDevice,
50 rBox.Left()+aBorderSize.Left(),
51 rBox.Right(),
52 rBox.Bottom()-aBorderSize.Bottom()+1,
53 aBorderSize.Bottom(),
54 rHorizontalPaint);
55 // Draw left line.
56 DrawVerticalLine(
57 rDevice,
58 rBox.Top()+aBorderSize.Top(),
59 rBox.Bottom(),
60 rBox.Left(),
61 aBorderSize.Left(),
62 rVerticalPaint);
63 // Draw right line.
64 DrawVerticalLine(
65 rDevice,
66 rBox.Top()+aBorderSize.Top(),
67 rBox.Bottom()-aBorderSize.Bottom(),
68 rBox.Right()-aBorderSize.Right()+1,
69 aBorderSize.Right(),
70 rVerticalPaint);
71 }
72
73
74
75
DrawBevelBorder(OutputDevice & rDevice,const Rectangle rBox,const SvBorder aBorderSize,const Paint & rTopLeftPaint,const Paint & rCenterPaint,const Paint & rBottomRightPaint)76 void DrawHelper::DrawBevelBorder (
77 OutputDevice& rDevice,
78 const Rectangle rBox,
79 const SvBorder aBorderSize,
80 const Paint& rTopLeftPaint,
81 const Paint& rCenterPaint,
82 const Paint& rBottomRightPaint)
83 {
84 // Draw top line.
85 DrawHorizontalLine(
86 rDevice,
87 rBox.Left(),
88 rBox.Right() - aBorderSize.Right(),
89 rBox.Top(),
90 aBorderSize.Top(),
91 rTopLeftPaint);
92 // Draw bottom line.
93 DrawHorizontalLine(
94 rDevice,
95 rBox.Left()+aBorderSize.Left(),
96 rBox.Right(),
97 rBox.Bottom()-aBorderSize.Bottom()+1,
98 aBorderSize.Bottom(),
99 rBottomRightPaint);
100 // Draw left line.
101 DrawVerticalLine(
102 rDevice,
103 rBox.Top()+aBorderSize.Top(),
104 rBox.Bottom() - aBorderSize.Bottom(),
105 rBox.Left(),
106 aBorderSize.Left(),
107 rTopLeftPaint);
108 // Draw right line.
109 DrawVerticalLine(
110 rDevice,
111 rBox.Top()+aBorderSize.Top(),
112 rBox.Bottom()-aBorderSize.Bottom(),
113 rBox.Right()-aBorderSize.Right()+1,
114 aBorderSize.Right(),
115 rBottomRightPaint);
116 // Draw top right corner.
117 DrawVerticalLine(
118 rDevice,
119 rBox.Top(),
120 rBox.Top()+aBorderSize.Top()-1,
121 rBox.Right()-aBorderSize.Right()+1,
122 aBorderSize.Right(),
123 rCenterPaint);
124 // Draw bottom right corner.
125 DrawVerticalLine(
126 rDevice,
127 rBox.Bottom() - aBorderSize.Bottom()+1,
128 rBox.Bottom(),
129 rBox.Left(),
130 aBorderSize.Left(),
131 rCenterPaint);
132 }
133
134
135
136
DrawHorizontalLine(OutputDevice & rDevice,const sal_Int32 nLeft,const sal_Int32 nRight,const sal_Int32 nY,const sal_Int32 nHeight,const Paint & rPaint)137 void DrawHelper::DrawHorizontalLine(
138 OutputDevice& rDevice,
139 const sal_Int32 nLeft,
140 const sal_Int32 nRight,
141 const sal_Int32 nY,
142 const sal_Int32 nHeight,
143 const Paint& rPaint)
144 {
145 switch (rPaint.GetType())
146 {
147 case Paint::NoPaint:
148 default:
149 break;
150
151 case Paint::ColorPaint:
152 {
153 const Color aColor (rPaint.GetColor());
154 rDevice.SetLineColor(aColor);
155 for (sal_Int32 nYOffset=0; nYOffset<nHeight; ++nYOffset)
156 rDevice.DrawLine(
157 Point(nLeft,nY+nYOffset),
158 Point(nRight,nY+nYOffset));
159 break;
160 }
161 case Paint::GradientPaint:
162 rDevice.DrawGradient(
163 Rectangle(
164 nLeft,
165 nY,
166 nRight,
167 nY+nHeight-1),
168 rPaint.GetGradient());
169 break;
170 }
171 }
172
173
174
175
DrawVerticalLine(OutputDevice & rDevice,const sal_Int32 nTop,const sal_Int32 nBottom,const sal_Int32 nX,const sal_Int32 nWidth,const Paint & rPaint)176 void DrawHelper::DrawVerticalLine(
177 OutputDevice& rDevice,
178 const sal_Int32 nTop,
179 const sal_Int32 nBottom,
180 const sal_Int32 nX,
181 const sal_Int32 nWidth,
182 const Paint& rPaint)
183 {
184 switch (rPaint.GetType())
185 {
186 case Paint::NoPaint:
187 default:
188 break;
189
190 case Paint::ColorPaint:
191 {
192 const Color aColor (rPaint.GetColor());
193 rDevice.SetLineColor(aColor);
194 for (sal_Int32 nXOffset=0; nXOffset<nWidth; ++nXOffset)
195 rDevice.DrawLine(
196 Point(nX+nXOffset, nTop),
197 Point(nX+nXOffset, nBottom));
198 break;
199 }
200 case Paint::GradientPaint:
201 rDevice.DrawGradient(
202 Rectangle(
203 nX,
204 nTop,
205 nX+nWidth-1,
206 nBottom),
207 rPaint.GetGradient());
208 break;
209 }
210 }
211
212
213
214
DrawRoundedRectangle(OutputDevice & rDevice,const Rectangle & rBox,const sal_Int32 nCornerRadius,const Color & rBorderColor,const Paint & rFillPaint)215 void DrawHelper::DrawRoundedRectangle (
216 OutputDevice& rDevice,
217 const Rectangle& rBox,
218 const sal_Int32 nCornerRadius,
219 const Color& rBorderColor,
220 const Paint& rFillPaint)
221 {
222 rDevice.SetLineColor(rBorderColor);
223 switch(rFillPaint.GetType())
224 {
225 case Paint::NoPaint:
226 default:
227 rDevice.SetFillColor();
228 rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius);
229 break;
230
231 case Paint::ColorPaint:
232 rDevice.SetFillColor(rFillPaint.GetColor());
233 rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius);
234 break;
235
236 case Paint::GradientPaint:
237 rDevice.DrawGradient(
238 rBox,
239 rFillPaint.GetGradient());
240 rDevice.SetFillColor();
241 rDevice.DrawRect(rBox, nCornerRadius, nCornerRadius);
242 break;
243 }
244 }
245
246
247
248
249 } } // end of namespace sfx2::sidebar
250