29 #include YFM_YSLib_UI_YControl
30 #include YFM_YSLib_UI_YGUI
31 #include YFM_YSLib_UI_YUIContainer
32 #include YFM_YSLib_Core_YStorage
34 #include YFM_YSLib_UI_YBrush
46 FetchEnabledBoundControlPtr(KeyEventArgs&& e)
51 dynamic_cast<Control&>(e.GetSender()).BoundControlPtr(e.GetKeys()));
53 return p_ctl &&
IsEnabled(*p_ctl) ? p_ctl :
nullptr;
55 catch(std::bad_function_call&)
64 TouchHeld_DragWidget(IWidget* p = {})
69 p = st.GetIndependentFocusPtr();
70 if(st.CheckDraggingOffset(p))
92 const auto enability_changed(
IsEnabled(wgt) != b);
97 return enability_changed;
114 CallEvent<KeyDown>(e.GetSender(), e);
120 IWidget&
wgt(e.GetSender());
137 if(st.GetIndependentFocusPtr() && st.HeldTimer.RefreshHeld(
139 CallEvent<TouchDown>(*st.GetIndependentFocusPtr(), e);
147 TouchHeld_DragWidget();
154 TouchHeld_DragWidget(&wgt);
161 if(
const auto p_ctl = FetchEnabledBoundControlPtr(std::move(e)))
165 CallEvent<TouchUp>(*p_ctl, et);
173 if(
const auto p_ctl = FetchEnabledBoundControlPtr(std::move(e)))
177 CallEvent<TouchDown>(*p_ctl, et);
185 if(
const auto p_ctl = FetchEnabledBoundControlPtr(std::move(e)))
189 CallEvent<Click>(*p_ctl, et);
195 Control::ControlEventMap::ControlEventMap()
201 : Widget(new View(r), new Renderer(),
203 BoundControlPtr(std::bind(&Control::GetBoundControlPtr, this,
204 std::placeholders::_1))
208 FetchEvent<Move>(*
this) += [](UIEventArgs&& e){
220 :
Widget(ctl), BoundControlPtr(ctl.BoundControlPtr)
void InvalidateParent(IWidget &wgt)
const _type & FetchPrototype()
取指定类型的静态原型对象。
YF_API void OnKeyHeld(KeyEventArgs &&)
处理键接触保持事件。
YF_API void OnKey_Bound_TouchDown(KeyEventArgs &&)
处理按键事件:按键-指针设备接触开始。
YF_API void SetLocationOf(IWidget &, const Point &)
设置部件左上角所在位置(相对于容器的偏移坐标)。
YF_API GUIState & FetchGUIState()
取默认图形用户界面公共状态。
GEventPointerWrapper< UIEventArgs && > MappedType
映射项类型。
YF_API void Invalidate(IWidget &, const Rect &)
无效化:使相对于部件的指定区域在直接和间接的窗口缓冲区中无效。
GIHEvent< UIEventArgs && > ItemType
YF_API EventMapping::ItemType & GetEvent(EventMapping::MapType &, const VisualEvent &, EventMapping::MappedType(&)())
在事件映射表中取指定 id 对应的事件。
YF_API void OnTouchHeld_DraggingRaw(CursorEventArgs &&, IWidget &)
处理屏幕接触移动事件:拖放指定部件。
static const GBinaryGroup Invalid
无效(不在屏幕坐标系中)对象。
YF_API bool Enable(IWidget &, bool=true)
设置部件可用性,且当可用性改变时无效化部件区域。
YF_API void OnTouchHeld_Dragging(CursorEventArgs &&)
处理屏幕接触移动事件:拖放按下部件。
void SetEnabledOf(IWidget &wgt, bool b)
设置部件可用性。
YF_API void OnTouchHeld(CursorEventArgs &&)
处理屏幕接触保持事件。
#define yunseq
无序列依赖表达式组求值。
YF_API void OnTouchDown_RequestToFrontFocused(CursorEventArgs &&)
处理屏幕接触开始事件:使用一般接触策略。
std::function< void(PaintEventArgs &&)> HBrush
画刷回调函数。
wgt wgt YF_API void ClearFocusingOf(IWidget &)
清除焦点指针并以此部件作为事件源调用被清除焦点部件的 LostFocus 事件。
bool IsEnabled(const IWidget &wgt)
判断部件是否为可用的控件。
EventMapping::MapType EventMap
事件映射表。
void Wrap(IWidget &)
包装部件响应 Enter/Leave 事件。
YF_API void OnKey_Bound_TouchUp(KeyEventArgs &&)
处理按键事件:按键-指针设备接触结束。
YF_API void RequestToFront(IWidget &)
请求提升至容器前端。
YF_API void OnKey_Bound_Click(KeyEventArgs &&)
处理按键事件:按键-指针设备按下。
std::chrono::milliseconds TimeSpan
低精度时间间隔。
YF_API void OnUIEvent_Invalidate(UIEventArgs &&)
处理用户界面事件:无效化发送者。
Control(const Rect &, HBrush, Drawing::Color=Drawing::ColorSpace::Black)
构造:使用指定边界、背景画刷和前景色。