Mercurial > projects > mde
view mde/gui/widget/miscWidgets.d @ 57:9e1f05fbbcef
Coloured and alpha-blended text is now supported.
TextWidgets get text colour from argument.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 14 Jun 2008 13:09:03 +0100 |
parents | bca7e2342d77 |
children | d43523ed4b62 |
line wrap: on
line source
/* LICENSE BLOCK Part of mde: a Modular D game-oriented Engine Copyright © 2007-2008 Diggory Hardy This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** Some GUI Miscelaneas widgets. */ module mde.gui.widget.miscWidgets; import mde.gui.widget.Widget; import mde.gui.exception; import mde.gui.renderer.IRenderer; import mde.resource.font; import tango.io.Stdout; /// A fixed-size blank widget. class FixedBlankWidget : FixedWidget { this (IWindow wind, int[] data) { if (data.length != 3) throw new WidgetDataException; super (wind, data); } void draw () { super.draw; window.renderer.drawBlank (x,y, w,h); } } /// A completely resizable blank widget (initial size zero). class SizableBlankWidget : SizableWidget { this (IWindow wind, int[] data) { if (data.length != 1) throw new WidgetDataException; super (wind, data); } void draw () { super.draw; window.renderer.drawBlank (x,y, w,h); } } /// First interactible widget class ButtonWidget : FixedWidget { bool pushed = false; // true if button is pushed in (visually) // pushed is not the same as the button being clicked but not yet released. // it is whether the mouse is over the button after being clicked. this (IWindow wind, int[] data) { if (data.length != 3) throw new WidgetDataException; super (wind, data); } void draw () { window.renderer.drawButton (x,y, w,h, pushed); } void clickEvent (ushort, ushort, ubyte b, bool state) { if (b == 1 && state == true) { pushed = true; window.requestRedraw; window.gui.addClickCallback (&clickWhileHeld); window.gui.addMotionCallback (&motionWhileHeld); } } // Called when a mouse motion/click event occurs while (held == true) bool clickWhileHeld (ushort cx, ushort cy, ubyte b, bool state) { if (b == 1 && state == false) { if (cx >= x && cx < x+w && cy >= y && cy < y+h) // button event Stdout ("Button clicked!").newline; pushed = false; window.requestRedraw; window.gui.removeCallbacks (cast(void*) this); return true; } return false; } void motionWhileHeld (ushort cx, ushort cy) { bool oldPushed = pushed; if (cx >= x && cx < x+w && cy >= y && cy < y+h) pushed = true; else pushed = false; if (oldPushed != pushed) window.requestRedraw; } } /// Basic text widget class TextWidget : Widget { this (IWindow wind, int[] data) { if (data.length != 2) throw new WidgetDataException; if (font is null) font = FontStyle.get("default"); font.updateBlock (str, textCache); mw = textCache.w; mh = textCache.h; colour = Colour (cast(ubyte) (data[1] >> 16u), cast(ubyte) (data[1] >> 8u), cast(ubyte) data[1] ); super (wind,data); } void draw () { super.draw(); font.textBlock (x,y, str, textCache, colour); // test new-lines and unicode characters } protected: const str = "Text Widget\nαβγ − ΑΒΓ"; TextBlock textCache; Colour colour; static FontStyle font; }