Dreamine.UI.WinForms
1.0.1
Dreamine.UI.WinForms 사용자 인터페이스 기능과 구성 요소를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
DreamineButton.cs
이 파일의 문서화 페이지로 가기
1
using
System.Drawing;
2
using
System.Drawing.Drawing2D;
3
using
System.Windows.Input;
4
using
Dreamine.UI.WinForms
;
5
6
namespace
Dreamine.UI.WinForms.Controls
;
7
16
public
class
DreamineButton
: Control
17
{
26
private
bool
_isHover
;
35
private
bool
_isPressed
;
36
37
// ── Properties ────────────────────────────────────────
46
private
string
_content
=
string
.Empty;
55
public
string
Content
56
{
57
get
=>
_content
;
58
set
{
_content
= value; Invalidate(); }
59
}
60
69
private
Color
_shineColor
= Color.Empty;
78
public
Color
ShineColor
79
{
80
get
=>
_shineColor
;
81
set
{
_shineColor
= value; Invalidate(); }
82
}
83
92
private
Color
_borderColor
=
DreamineTheme
.
BorderNormal
;
101
public
Color
BorderColor
102
{
103
get
=>
_borderColor
;
104
set
{
_borderColor
= value; Invalidate(); }
105
}
106
115
private
int
_cornerRadius
=
DreamineTheme
.
CornerRadius
;
124
public
int
CornerRadius
125
{
126
get
=>
_cornerRadius
;
127
set
{
_cornerRadius
= value; Invalidate(); }
128
}
129
138
private
bool
_isSelected
;
147
public
bool
IsSelected
148
{
149
get
=>
_isSelected
;
150
set
{
_isSelected
= value; Invalidate(); }
151
}
152
161
public
ICommand?
Command
{
get
;
set
; }
170
public
object
?
CommandParameter
{
get
;
set
; }
171
172
// ── Constructor ───────────────────────────────────────
181
public
DreamineButton
()
182
{
183
SetStyle(
184
ControlStyles.AllPaintingInWmPaint |
185
ControlStyles.UserPaint |
186
ControlStyles.DoubleBuffer |
187
ControlStyles.ResizeRedraw |
188
ControlStyles.SupportsTransparentBackColor,
true
);
189
190
BackColor =
DreamineTheme
.
NavBackground
;
191
ForeColor =
DreamineTheme
.
TextPrimary
;
192
Font =
new
Font(
"Segoe UI"
, 10f, FontStyle.Regular, GraphicsUnit.Point);
193
Size =
new
Size(100, 34);
194
Cursor = Cursors.Hand;
195
}
196
197
// ── Mouse Events ──────────────────────────────────────
214
protected
override
void
OnMouseEnter
(EventArgs e)
215
{
216
base.OnMouseEnter(e);
217
_isHover
=
true
;
218
Invalidate();
219
}
220
236
protected
override
void
OnMouseLeave
(EventArgs e)
237
{
238
base.OnMouseLeave(e);
239
_isHover
=
false
;
240
_isPressed
=
false
;
241
Invalidate();
242
}
243
259
protected
override
void
OnMouseDown
(MouseEventArgs e)
260
{
261
base.OnMouseDown(e);
262
if
(e.Button == MouseButtons.Left) {
_isPressed
=
true
; Invalidate(); }
263
}
264
280
protected
override
void
OnMouseUp
(MouseEventArgs e)
281
{
282
base.OnMouseUp(e);
283
if
(e.Button == MouseButtons.Left)
284
{
285
_isPressed
=
false
;
286
Invalidate();
287
if
(ClientRectangle.Contains(e.Location))
288
ExecuteCommand
();
289
}
290
}
291
300
private
void
ExecuteCommand
()
301
{
302
if
(
Command
?.CanExecute(
CommandParameter
) ==
true
)
303
Command
.Execute(
CommandParameter
);
304
}
305
322
private
Color
GetEffectiveParentBackColor
()
323
{
324
for
(Control? p = Parent; p !=
null
; p = p.Parent)
325
{
326
if
(p.BackColor.A == 255)
327
return
p.BackColor;
328
}
329
return
FindForm()?.BackColor ??
DreamineTheme
.
AppBackground
;
330
}
331
332
// ── Paint ─────────────────────────────────────────────
349
protected
override
void
OnPaint
(PaintEventArgs e)
350
{
351
var g = e.Graphics;
352
var rect =
new
Rectangle(1, 1, Width - 2, Height - 2);
353
354
// 둥근 사각형 바깥쪽(네 귀퉁이)을 부모의 실제 배경색으로 먼저 채운다.
355
// Win32 Region으로 잘라내는 방식은 안티앨리어싱이 없어 작은 반경에서 오히려
356
// 더 거칠게 보이므로, 대신 "부모 배경색 채우기 + AA 처리된 둥근 도형"으로
357
// 귀퉁이가 부모 배경에 자연스럽게 섞여 보이도록 한다(부모가 단색 배경일 때 효과적).
358
using
(var cornerBrush =
new
SolidBrush(
GetEffectiveParentBackColor
()))
359
g.FillRectangle(cornerBrush, 0, 0, Width, Height);
360
361
// background color
362
var bg = BackColor;
363
if
(
_isPressed
)
364
bg =
DreamineDrawHelper
.
Blend
(bg,
DreamineTheme
.
PressOverlay
, 0.6f);
365
else
if
(
_isHover
)
366
bg =
DreamineDrawHelper
.
Blend
(bg,
DreamineTheme
.
HoverOverlay
, 0.4f);
367
368
var topColor =
_isSelected
369
?
DreamineDrawHelper
.
Blend
(bg,
DreamineTheme
.
AccentBlue
, 0.3f)
370
: bg;
371
372
// border
373
var borderColor =
_isSelected
||
_isHover
374
?
DreamineTheme.BorderFocus
375
:
_borderColor
;
376
377
using
var borderPen =
new
Pen(borderColor, 1f);
378
DreamineDrawHelper
.
FillRoundedGradient
(g, topColor, bg, borderPen, rect,
_cornerRadius
);
379
380
// shine overlay
381
if
(
_shineColor
!= Color.Empty)
382
DreamineDrawHelper
.
DrawShineOverlay
(g,
_shineColor
, rect,
_cornerRadius
);
383
384
// selected indicator (bottom line)
385
if
(
_isSelected
)
386
{
387
using
var selPen =
new
Pen(
DreamineTheme
.
AccentBlue
, 2f);
388
int
y = Height - 3;
389
g.DrawLine(selPen,
_cornerRadius
, y, Width -
_cornerRadius
, y);
390
}
391
392
// text
393
DreamineDrawHelper
.
DrawCenteredText
(g,
_content
, Font, Enabled ? ForeColor :
DreamineTheme
.
TextSecondary
, rect);
394
}
395
}
Dreamine.UI.WinForms
Definition
DreamineButton.cs:6
Dreamine.UI.WinForms.Controls
Definition
DreamineButton.cs:6
Dreamine.UI.WinForms.Controls.DreamineButton.GetEffectiveParentBackColor
Color GetEffectiveParentBackColor()
Definition
DreamineButton.cs:322
Dreamine.UI.WinForms.Controls.DreamineButton.CommandParameter
object? CommandParameter
Definition
DreamineButton.cs:170
Dreamine.UI.WinForms.Controls.DreamineButton.DreamineButton
DreamineButton()
Definition
DreamineButton.cs:181
Dreamine.UI.WinForms.Controls.DreamineButton._borderColor
Color _borderColor
Definition
DreamineButton.cs:92
Dreamine.UI.WinForms.Controls.DreamineButton.OnMouseDown
override void OnMouseDown(MouseEventArgs e)
Definition
DreamineButton.cs:259
Dreamine.UI.WinForms.Controls.DreamineButton.OnPaint
override void OnPaint(PaintEventArgs e)
Definition
DreamineButton.cs:349
Dreamine.UI.WinForms.Controls.DreamineButton.Command
ICommand? Command
Definition
DreamineButton.cs:161
Dreamine.UI.WinForms.Controls.DreamineButton.BorderColor
Color BorderColor
Definition
DreamineButton.cs:102
Dreamine.UI.WinForms.Controls.DreamineButton._isHover
bool _isHover
Definition
DreamineButton.cs:26
Dreamine.UI.WinForms.Controls.DreamineButton.OnMouseUp
override void OnMouseUp(MouseEventArgs e)
Definition
DreamineButton.cs:280
Dreamine.UI.WinForms.Controls.DreamineButton.ShineColor
Color ShineColor
Definition
DreamineButton.cs:79
Dreamine.UI.WinForms.Controls.DreamineButton.CornerRadius
int CornerRadius
Definition
DreamineButton.cs:125
Dreamine.UI.WinForms.Controls.DreamineButton.ExecuteCommand
void ExecuteCommand()
Definition
DreamineButton.cs:300
Dreamine.UI.WinForms.Controls.DreamineButton._cornerRadius
int _cornerRadius
Definition
DreamineButton.cs:115
Dreamine.UI.WinForms.Controls.DreamineButton.Content
string Content
Definition
DreamineButton.cs:56
Dreamine.UI.WinForms.Controls.DreamineButton.IsSelected
bool IsSelected
Definition
DreamineButton.cs:148
Dreamine.UI.WinForms.Controls.DreamineButton._content
string _content
Definition
DreamineButton.cs:46
Dreamine.UI.WinForms.Controls.DreamineButton._shineColor
Color _shineColor
Definition
DreamineButton.cs:69
Dreamine.UI.WinForms.Controls.DreamineButton.OnMouseLeave
override void OnMouseLeave(EventArgs e)
Definition
DreamineButton.cs:236
Dreamine.UI.WinForms.Controls.DreamineButton._isSelected
bool _isSelected
Definition
DreamineButton.cs:138
Dreamine.UI.WinForms.Controls.DreamineButton.OnMouseEnter
override void OnMouseEnter(EventArgs e)
Definition
DreamineButton.cs:214
Dreamine.UI.WinForms.Controls.DreamineButton._isPressed
bool _isPressed
Definition
DreamineButton.cs:35
Dreamine.UI.WinForms.DreamineDrawHelper
Definition
DreamineDrawHelper.cs:15
Dreamine.UI.WinForms.DreamineDrawHelper.Blend
static Color Blend(Color base_, Color overlay, float alpha)
Definition
DreamineDrawHelper.cs:373
Dreamine.UI.WinForms.DreamineDrawHelper.FillRoundedGradient
static void FillRoundedGradient(Graphics g, Color top, Color bottom, Pen? border, Rectangle rect, float radius)
Definition
DreamineDrawHelper.cs:209
Dreamine.UI.WinForms.DreamineDrawHelper.DrawCenteredText
static void DrawCenteredText(Graphics g, string text, Font font, Color color, Rectangle rect)
Definition
DreamineDrawHelper.cs:320
Dreamine.UI.WinForms.DreamineDrawHelper.DrawShineOverlay
static void DrawShineOverlay(Graphics g, Color shineColor, Rectangle rect, float radius)
Definition
DreamineDrawHelper.cs:260
Dreamine.UI.WinForms.DreamineTheme
Definition
DreamineTheme.cs:14
Dreamine.UI.WinForms.DreamineTheme.TextSecondary
static readonly Color TextSecondary
Definition
DreamineTheme.cs:100
Dreamine.UI.WinForms.DreamineTheme.AppBackground
static readonly Color AppBackground
Definition
DreamineTheme.cs:24
Dreamine.UI.WinForms.DreamineTheme.NavBackground
static readonly Color NavBackground
Definition
DreamineTheme.cs:51
Dreamine.UI.WinForms.DreamineTheme.HoverOverlay
static Color HoverOverlay
Definition
DreamineTheme.cs:196
Dreamine.UI.WinForms.DreamineTheme.BorderFocus
static readonly Color BorderFocus
Definition
DreamineTheme.cs:80
Dreamine.UI.WinForms.DreamineTheme.TextPrimary
static readonly Color TextPrimary
Definition
DreamineTheme.cs:91
Dreamine.UI.WinForms.DreamineTheme.BorderNormal
static readonly Color BorderNormal
Definition
DreamineTheme.cs:71
Dreamine.UI.WinForms.DreamineTheme.AccentBlue
static readonly Color AccentBlue
Definition
DreamineTheme.cs:129
Dreamine.UI.WinForms.DreamineTheme.CornerRadius
const int CornerRadius
Definition
DreamineTheme.cs:216
Dreamine.UI.WinForms.DreamineTheme.PressOverlay
static Color PressOverlay
Definition
DreamineTheme.cs:205
Controls
DreamineButton.cs
다음에 의해 생성됨 :
1.17.0