ZenScript main repository
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DDrawableInstance.java 2.7KB

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.io.Closeable;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import org.openzen.drawablegui.draw.DDrawSurface;
  11. import org.openzen.drawablegui.draw.DDrawTarget;
  12. import org.openzen.drawablegui.draw.DDrawnColorableElement;
  13. import org.openzen.drawablegui.draw.DDrawnElement;
  14. import org.openzen.drawablegui.draw.DDrawnRectangle;
  15. import org.openzen.drawablegui.draw.DDrawnShape;
  16. import org.openzen.drawablegui.draw.DDrawnText;
  17. import org.openzen.drawablegui.style.DShadow;
  18. /**
  19. *
  20. * @author Hoofdgebruiker
  21. */
  22. public class DDrawableInstance implements Closeable {
  23. private final List<DDrawnElement> elements = new ArrayList<>();
  24. public DDrawableInstance(DDrawSurface surface, int z, DDrawable icon, DTransform2D transform) {
  25. icon.draw(new DrawTarget(surface), z, transform);
  26. }
  27. public void setTransform(DTransform2D transform) {
  28. for (DDrawnElement element : elements)
  29. element.setTransform(transform);
  30. }
  31. @Override
  32. public void close() {
  33. for (DDrawnElement element : elements)
  34. element.close();
  35. }
  36. private class DrawTarget implements DDrawTarget {
  37. private final DDrawSurface surface;
  38. public DrawTarget(DDrawSurface surface) {
  39. this.surface = surface;
  40. }
  41. @Override
  42. public DFontMetrics getFontMetrics(DFont font) {
  43. return surface.getFontMetrics(font);
  44. }
  45. @Override
  46. public float getScale() {
  47. return surface.getScale();
  48. }
  49. @Override
  50. public float getTextScale() {
  51. return surface.getTextScale();
  52. }
  53. @Override
  54. public DDrawnText drawText(int z, DFont font, int color, float x, float y, String text) {
  55. return addElement(surface.drawText(z, font, color, x, y, text));
  56. }
  57. @Override
  58. public DDrawnRectangle fillRect(int z, DIRectangle rectangle, int color) {
  59. return addElement(surface.fillRect(z, rectangle, color));
  60. }
  61. @Override
  62. public DDrawnShape strokePath(int z, DPath path, DTransform2D transform, int color, float lineWidth) {
  63. return addElement(surface.strokePath(z, path, transform, color, lineWidth));
  64. }
  65. @Override
  66. public DDrawnShape fillPath(int z, DPath path, DTransform2D transform, int color) {
  67. return addElement(surface.fillPath(z, path, transform, color));
  68. }
  69. @Override
  70. public DDrawnShape shadowPath(int z, DPath path, DTransform2D transform, int color, DShadow shadow) {
  71. return addElement(surface.shadowPath(z, path, transform, color, shadow));
  72. }
  73. private <T extends DDrawnColorableElement> T addElement(T colorable) {
  74. elements.add(colorable);
  75. return colorable;
  76. }
  77. }
  78. }