void UIDrag::HandleUpdate(StringHash eventType, VariantMap& eventData) { auto* ui = GetSubsystem<UI>(); UIElement* root = ui->GetRoot(); auto* input = GetSubsystem<Input>(); unsigned n = input->GetNumTouches(); for (unsigned i = 0; i < n; i++) { Text* t = (Text*)root->GetChild("Touch " + String(i)); TouchState* ts = input->GetTouch(i); t->SetText("Touch " + String(ts->touchID_)); IntVector2 pos = ts->position_; pos.y_ -= 30; t->SetPosition(pos); t->SetVisible(true); } for (unsigned i = n; i < 10; i++) { Text* t = (Text*)root->GetChild("Touch " + String(i)); t->SetVisible(false); } if (input->GetKeyPress(KEY_SPACE)) { PODVector<UIElement*> elements; root->GetChildrenWithTag(elements, "SomeTag"); for (PODVector<UIElement*>::ConstIterator i = elements.Begin(); i != elements.End(); ++i) { UIElement* element = *i; element->SetVisible(!element->IsVisible()); } } }
void UIDrag::CreateGUI() { ResourceCache* cache = GetSubsystem<ResourceCache>(); UI* ui = GetSubsystem<UI>(); UIElement* root = ui->GetRoot(); // Load the style sheet from xml root->SetDefaultStyle(cache->GetResource<XMLFile>("UI/DefaultStyle.xml")); for (int i=0; i < 10; i++) { Button* b = new Button(context_); root->AddChild(b); // Reference a style from the style sheet loaded earlier: b->SetStyle("Button"); b->SetSize(300, 100); b->SetPosition(IntVector2(50*i, 50*i)); if (i % 2 == 0) b->AddTag("SomeTag"); SubscribeToEvent(b, E_DRAGMOVE, URHO3D_HANDLER(UIDrag, HandleDragMove)); SubscribeToEvent(b, E_DRAGBEGIN, URHO3D_HANDLER(UIDrag, HandleDragBegin)); SubscribeToEvent(b, E_DRAGCANCEL, URHO3D_HANDLER(UIDrag, HandleDragCancel)); SubscribeToEvent(b, E_DRAGEND, URHO3D_HANDLER(UIDrag, HandleDragEnd)); { Text* t = new Text(context_); b->AddChild(t); t->SetStyle("Text"); t->SetHorizontalAlignment(HA_CENTER); t->SetVerticalAlignment(VA_CENTER); t->SetName("Text"); } { Text* t = new Text(context_); b->AddChild(t); t->SetStyle("Text"); t->SetName("Event Touch"); t->SetHorizontalAlignment(HA_CENTER); t->SetVerticalAlignment(VA_BOTTOM); } { Text* t = new Text(context_); b->AddChild(t); t->SetStyle("Text"); t->SetName("Num Touch"); t->SetHorizontalAlignment(HA_CENTER); t->SetVerticalAlignment(VA_TOP); } } for (int i = 0; i < 10; i++) { Text* t = new Text(context_); root->AddChild(t); t->SetStyle("Text"); t->SetName("Touch "+ String(i)); t->SetVisible(false); } }