1 /* 2 * Copyright (C) 2015-2019, by Laszlo Szeremi under the Boost license. 3 * 4 * Pixel Perfect Engine, concrete.interfaces module 5 */ 6 7 module pixelperfectengine.concrete.interfaces; 8 9 public import pixelperfectengine.graphics.fontsets; 10 public import pixelperfectengine.graphics.bitmap; 11 public import pixelperfectengine.graphics.common; 12 public import pixelperfectengine.graphics.text; 13 14 public import pixelperfectengine.concrete.elements.base; 15 public import pixelperfectengine.concrete.popup.base; 16 17 public import pixelperfectengine.system.input.types; 18 19 /+/** 20 * Checkbox interface. 21 */ 22 public interface ICheckBox { 23 ///Returns whether the object is checked. 24 public @property bool isChecked() @safe pure @nogc nothrow const; 25 ///Sets the object to checked position and returns the new state. 26 public bool check() @trusted; 27 ///Sets the object to unchecked position and returns the new state. 28 public bool unCheck() @trusted; 29 }+/ 30 /** 31 * Radio button interface. Can be used to implement radio button style behavior on almost any component that implements this interface. 32 */ 33 public interface IRadioButton { 34 /** 35 * If the radio button is pressed, then it sets to unpressed. Does nothing otherwise. 36 */ 37 public void latchOff() @trusted; 38 /** 39 * Sets the radio button into its pressed state. 40 */ 41 public void latchOn() @trusted; 42 /** 43 * Sets the group of the radio button. 44 */ 45 public void setGroup(IRadioButtonGroup group) @safe @property; 46 /** 47 * Workaround the stupid issue of object.opEquals having to be `@system inpure throw`. 48 * The @gc would be fine still. 49 * 50 * Hey DLang foundation! Don't be cowards and commit to some meaningful changes! 51 */ 52 public bool equals(IRadioButton rhs) @safe pure @nogc nothrow const; 53 /** 54 * Returns the assigned value of the radio button. 55 */ 56 public string value() @property @safe @nogc pure nothrow const; 57 } 58 /** 59 * Implements the basis of a radio button group. 60 */ 61 public interface IRadioButtonGroup { 62 /** 63 * Adds a radio button to the group. 64 */ 65 public void add(IRadioButton rg) @safe; 66 /** 67 * Removes a radio button from the group. 68 */ 69 public void remove(IRadioButton rg) @safe; 70 /** 71 * Groups receive latch signals here. 72 */ 73 public void latch(IRadioButton sender) @safe; 74 } 75 /** 76 * Implements the frontend of a drawable canvas, primarily for GUI elements. 77 * Used to avoid using individual bitmaps for each elements. 78 * Colors are mostly limited to 256 by the `ubyte` type. However certain window types will enable more. 79 */ 80 public interface Canvas { 81 ///Draws a line. 82 public void drawLine(Point from, Point to, ubyte color) @trusted; 83 ///Draws a line pattern. 84 public void drawLinePattern(Point from, Point to, ubyte[] pattern) @trusted; 85 ///Draws an empty rectangle. 86 public void drawBox(Box target, ubyte color) @trusted; 87 ///Draws an empty rectangle with line patterns. 88 public void drawBoxPattern(Box target, ubyte[] pattern) @trusted; 89 ///Draws a filled rectangle with a specified color. 90 public void drawFilledBox(Box target, ubyte color) @trusted; 91 ///Pastes a bitmap to the given point using blitter, which threats color #0 as transparency. 92 public void bitBLT(Point target, ABitmap source) @trusted; 93 ///Pastes a slice of a bitmap to the given point using blitter, which threats color #0 as transparency. 94 public void bitBLT(Point target, ABitmap source, Box slice) @trusted; 95 ///Pastes a repeated bitmap pattern over the specified area. 96 public void bitBLTPattern(Box target, ABitmap pattern) @trusted; 97 ///XOR blits a repeated bitmap pattern over the specified area. 98 public void xorBitBLT(Box target, ABitmap pattern) @trusted; 99 ///XOR blits a color index over a specified area. 100 public void xorBitBLT(Box target, ubyte color) @trusted; 101 ///Fills an area with the specified color. 102 public void fill(Point target, ubyte color, ubyte background = 0) @trusted; 103 ///Draws a single line text within the given prelimiter. 104 public void drawTextSL(Box target, Text text, Point offset) @trusted; 105 ///Draws a multi line text within the given prelimiter. 106 public void drawTextML(Box target, Text text, Point offset) @trusted; 107 ///Clears the area within the target 108 public void clearArea(Box target) @trusted; 109 } 110 /** 111 * TODO: Use this for implement tabbing and etc. 112 */ 113 public interface Focusable { 114 ///Called when an object receives focus. 115 public void focusGiven(); 116 ///Called when an object loses focus. 117 public void focusTaken(); 118 ///Cycles the focus on a single element. 119 ///Returns -1 if end is reached, or the number of remaining elements that 120 ///are cycleable in the direction. 121 public int cycleFocus(int direction); 122 ///Passes key events to the focused element when not in text editing mode. 123 public void passKey(uint keyCode, ubyte mod); 124 } 125 /** 126 * Implements the 127 */ 128 public interface ElementContainer : PopUpHandler, Canvas { 129 /** 130 * Returns the absolute position of the element. 131 */ 132 public Box getAbsolutePosition(WindowElement sender); 133 /** 134 * Gives focus to the element if applicable 135 */ 136 public void requestFocus(WindowElement sender); 137 /** 138 * Sets the cursor to the given type on request. 139 */ 140 public void requestCursor(CursorType type); 141 } 142 /** 143 * Implemented by any object that can store stylesheets. 144 */ 145 public interface StyleSheetContainer { 146 /** 147 * Returns the stylesheet stored by the object. 148 */ 149 public StyleSheet getStyleSheet(); 150 public int[2] getRasterSizes(); 151 } 152 /** 153 * Implements mouse event passing. 154 */ 155 public interface MouseEventReceptor { 156 ///Passes mouse click event 157 public void passMCE(MouseEventCommons mec, MouseClickEvent mce); 158 ///Passes mouse move event 159 public void passMME(MouseEventCommons mec, MouseMotionEvent mme); 160 ///Passes mouse scroll event 161 public void passMWE(MouseEventCommons mec, MouseWheelEvent mwe); 162 } 163 /** 164 * Implements identification of small buttons. 165 */ 166 public interface ISmallButton { 167 ///Returns true if element is in small button capable and is the supplied height. 168 public bool isSmallButtonHeight(int height); 169 ///Returns true if left side justified, false otherwise. 170 public bool isLeftSide() @nogc @safe pure nothrow const; 171 ///Sets the small button to the left side if true. 172 public bool isLeftSide(bool val) @nogc @safe pure nothrow; 173 } 174 /** 175 * Defines functions for pop up handling. 176 */ 177 public interface PopUpHandler : StyleSheetContainer { 178 /** 179 * Puts a PopUpElement on the GUI. 180 */ 181 public void addPopUpElement(PopUpElement p); 182 /** 183 * Puts a PopUpElement on the GUI at the given position. 184 */ 185 public void addPopUpElement(PopUpElement p, int x, int y); 186 /** 187 * Ends the popup session and closes all popups. 188 */ 189 public void endPopUpSession(PopUpElement p); 190 /** 191 * Closes a single popup element. 192 */ 193 public void closePopUp(PopUpElement p); 194 }