29 #include YFM_YSLib_UI_Button
30 #include YFM_YSLib_UI_YGUI
37 using namespace Drawing;
47 RectDrawButton(
const PaintContext& pc,
const Size&
s, Hue base_hue,
48 CursorState cursor_state,
bool is_enabled,
bool is_focused)
50 const bool inside(cursor_state != CursorState::Outside);
52 const auto&
g(pc.Target);
53 const Rect
r(pc.Location, s);
56 ? hsl_t{29.2F, .86F, .916F} : hsl_t{30.F, .786F, .945F}, base_hue)
57 : MakeGray(234)) : MakeGray(239));
59 ? hsl_t{30.2F, .733F, .618F} : hsl_t{30.F, .72F, .706F}, base_hue)
60 : (is_focused ?
RollColor({30.F, 1.F, .6F}, base_hue)
70 using namespace Styles;
76 [](PaintEventArgs&& e){
78 ystdex::polymorphic_downcast<Thumb&>(e.GetSender()));
80 RectDrawButton(e,
GetSizeOf(tmb), tmb.GetHue(),
87 yunseq(hue = h, Background = Painter(
typeid(Thumb), ThumbBackground));
93 const auto invalidator([
this]{
107 if(!IsPressed() && e.Keys.any())
120 FetchEvent<GotFocus>(*this) += invalidator,
121 FetchEvent<LostFocus>(*this) += invalidator
132 if(
const auto pCon = FetchContainerPtr(tmb))
136 DrawCross(e.Target, e.ClipArea, {e.Location, GetSizeOf(tmb)},
YF_API HandlerTable & FetchDefault()
取默认样式处理器表。
pt pt Y const IWidget &wgt const IWidget &wgt GetSizeOf
无效化:使相对于部件的子部件的指定区域在直接和间接的窗口缓冲区中无效。
YF_API void DrawCross(const Graphics &, const Rect &, const Rect &, Color)
在指定图形接口上下文中使用指定颜色描画交叉直线段(“×”)。
YF_API GUIState & FetchGUIState()
取默认图形用户界面公共状态。
YF_API void FillRect(const Graphics &g, const Rect &, Color c)
填充标准矩形。
YF_API void Invalidate(IWidget &, const Rect &)
无效化:使相对于部件的指定区域在直接和间接的窗口缓冲区中无效。
Thumb(const Rect &={}, Drawing::Hue=180)
构造:使用指定边界和色调。
CursorState
指针设备光标相对于控件的状态。
#define yunseq
无序列依赖表达式组求值。
YF_API bool IsFocused(const IWidget &)
判断部件是否取得焦点。
CursorState csCurrent
指针设备光标状态。
YF_API void DrawText(const Graphics &g, TextState &ts, const String &str, bool line_wrap)
绘制文本。
bool IsEnabled(const IWidget &wgt)
判断部件是否为可用的控件。
empty_base<> raw_tag
直接构造类型(直接构造重载用)。
virtual void Refresh(PaintEventArgs &&)
刷新:按指定参数绘制界面并更新状态。
YF_API Color RollColor(hsl_t, Hue)
色调偏移。
Button(const Rect &={}, const Drawing::Font &={}, TextAlignment=TextAlignment::Center)
构造:使用指定边界、字体和文本对齐样式。
p1 p1 p2 p2 c YF_API void DrawRect(const Graphics &g, const Rect &bounds, const Point &pt, const Size &s, Color c)
描画标准矩形。
void DecorateAsCloseButton(Thumb &tmb)