| 171 | } |
| 172 | |
| 173 | void Element::ProcessEvent(Rml::Event &event) { |
| 174 | ContextId prev_context = recompui::try_close_current_context(); |
| 175 | ContextId context = ContextId::null(); |
| 176 | Rml::ElementDocument* doc = event.GetTargetElement()->GetOwnerDocument(); |
| 177 | if (doc != nullptr) { |
| 178 | context = get_context_from_document(doc); |
| 179 | } |
| 180 | |
| 181 | bool did_open = false; |
| 182 | |
| 183 | // TODO disallow null contexts once the entire UI system has been migrated. |
| 184 | if (context != ContextId::null()) { |
| 185 | did_open = context.open_if_not_already(); |
| 186 | } |
| 187 | |
| 188 | // Events that are processed during any phase. |
| 189 | switch (event.GetId()) { |
| 190 | case Rml::EventId::Click: |
| 191 | handle_event(Event::click_event(event.GetParameter("mouse_x", 0.0f), event.GetParameter("mouse_y", 0.0f))); |
| 192 | break; |
| 193 | case Rml::EventId::Mousedown: |
| 194 | { |
| 195 | MouseButton mouse_button = convert_rml_mouse_button(event.GetParameter("button", 3)); |
| 196 | if (mouse_button != MouseButton::Count) { |
| 197 | handle_event(Event::mousebutton_event(event.GetParameter("mouse_x", 0.0f), event.GetParameter("mouse_y", 0.0f), mouse_button, true)); |
| 198 | } |
| 199 | } |
| 200 | break; |
| 201 | case Rml::EventId::Mouseup: |
| 202 | { |
| 203 | MouseButton mouse_button = convert_rml_mouse_button(event.GetParameter("button", 3)); |
| 204 | if (mouse_button != MouseButton::Count) { |
| 205 | handle_event(Event::mousebutton_event(event.GetParameter("mouse_x", 0.0f), event.GetParameter("mouse_y", 0.0f), mouse_button, false)); |
| 206 | } |
| 207 | } |
| 208 | break; |
| 209 | case Rml::EventId::Keydown: |
| 210 | switch ((Rml::Input::KeyIdentifier)event.GetParameter<int>("key_identifier", 0)) { |
| 211 | case Rml::Input::KeyIdentifier::KI_LEFT: |
| 212 | handle_event(Event::navigate_event(NavDirection::Left)); |
| 213 | break; |
| 214 | case Rml::Input::KeyIdentifier::KI_UP: |
| 215 | handle_event(Event::navigate_event(NavDirection::Up)); |
| 216 | break; |
| 217 | case Rml::Input::KeyIdentifier::KI_RIGHT: |
| 218 | handle_event(Event::navigate_event(NavDirection::Right)); |
| 219 | break; |
| 220 | case Rml::Input::KeyIdentifier::KI_DOWN: |
| 221 | handle_event(Event::navigate_event(NavDirection::Down)); |
| 222 | break; |
| 223 | } |
| 224 | break; |
| 225 | case Rml::EventId::Drag: |
| 226 | handle_event(Event::drag_event(event.GetParameter("mouse_x", 0.0f), event.GetParameter("mouse_y", 0.0f), DragPhase::Move)); |
| 227 | break; |
| 228 | default: |
| 229 | break; |
| 230 | } |
nothing calls this directly
no test coverage detected