현재 체크, 호버 및 활성 상태에 맞게 상자, 체크 표시와 라벨을 그립니다.
207 {
208 var g = e.Graphics;
209 g.SmoothingMode = SmoothingMode.AntiAlias;
210
211 int x = BoxMargin, y = (Height - BoxSize) / 2;
212 var boxRect = new Rectangle(x, y, BoxSize, BoxSize);
213
214
215 var bg = _isChecked
216 ? DreamineTheme.AccentBlue
217 : DreamineTheme.InputBackground;
218 if (_isHover && !_isChecked)
219 bg = DreamineDrawHelper.Blend(bg, Color.White, 0.1f);
220
221 using var bgBrush = new SolidBrush(bg);
222 using var borderPen = new Pen(_isHover || _isChecked ? DreamineTheme.BorderFocus : DreamineTheme.BorderNormal, 1.5f);
223 DreamineDrawHelper.FillRoundedRect(g, bgBrush, borderPen, boxRect, 3f);
224
225
226 if (_isChecked)
227 {
228 using var ckPen = new Pen(Color.White, 2f) { LineJoin = LineJoin.Round };
229 int cx = x + 3, cy = y + BoxSize / 2;
230 g.DrawLines(ckPen, new[]
231 {
232 new Point(cx, cy),
233 new Point(cx + 3, cy + 3),
234 new Point(cx + 8, cy - 3)
235 });
236 }
237
238
239 using var brush = new SolidBrush(Enabled ? ForeColor : DreamineTheme.TextSecondary);
240 int textX = BoxMargin + BoxSize + 6;
241 var textRect = new Rectangle(textX, 0, Width - textX, Height);
242 var sf = new StringFormat { LineAlignment = StringAlignment.Center };
243 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
244 g.DrawString(_content, Font, brush, textRect, sf);
245 }