ZenScript main repository
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

BaseComponentGroup.java 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package org.openzen.drawablegui;
  7. import java.util.function.Consumer;
  8. import java.util.function.Predicate;
  9. /**
  10. *
  11. * @author Hoofdgebruiker
  12. */
  13. public abstract class BaseComponentGroup implements DComponent {
  14. private DComponent hovering = null;
  15. protected abstract void forEachChild(Consumer<DComponent> children);
  16. protected abstract DComponent findChild(Predicate<DComponent> predicate);
  17. protected void onComponentRemoved(DComponent component) {
  18. if (hovering == component)
  19. hovering = null;
  20. }
  21. @Override
  22. public void onMouseEnter(DMouseEvent e) {
  23. DComponent target = getComponent(e.x, e.y);
  24. setHovering(target, e);
  25. }
  26. @Override
  27. public void onMouseExit(DMouseEvent e) {
  28. setHovering(null, e);
  29. }
  30. @Override
  31. public void onMouseMove(DMouseEvent e) {
  32. DComponent target = getComponent(e.x, e.y);
  33. if (target == hovering) {
  34. if (target != null)
  35. target.onMouseMove(e);
  36. } else {
  37. setHovering(target, e);
  38. }
  39. }
  40. @Override
  41. public void onMouseDrag(DMouseEvent e) {
  42. if (hovering != null)
  43. hovering.onMouseDrag(e);
  44. }
  45. @Override
  46. public void onMouseClick(DMouseEvent e) {
  47. if (hovering != null)
  48. hovering.onMouseClick(e);
  49. }
  50. @Override
  51. public void onMouseDown(DMouseEvent e) {
  52. if (hovering != null)
  53. hovering.onMouseDown(e);
  54. }
  55. @Override
  56. public void onMouseRelease(DMouseEvent e) {
  57. if (hovering != null)
  58. hovering.onMouseRelease(e);
  59. onMouseMove(e);
  60. }
  61. @Override
  62. public void onMouseScroll(DMouseEvent e) {
  63. if (hovering != null)
  64. hovering.onMouseScroll(e);
  65. }
  66. private void setHovering(DComponent component, DMouseEvent e) {
  67. if (component == hovering)
  68. return;
  69. if (hovering != null)
  70. hovering.onMouseExit(e);
  71. hovering = component;
  72. if (hovering != null)
  73. hovering.onMouseEnter(e);
  74. }
  75. private DComponent getComponent(int x, int y) {
  76. return findChild(child -> child.getBounds().contains(x, y));
  77. }
  78. }