Mercurial > projects > mde
annotate mde/gui/WMScreen.d @ 132:264028f4115a
Cleaned up mde.imde and a couple of widget functions.
New mde.menus module to add default menus.
The input singleton is now created in mde.input.Input instead of mde.imde.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Fri, 23 Jan 2009 14:59:05 +0000 |
parents | 9cff74f68b84 |
children | 783969f4665c |
rev | line source |
---|---|
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
1 /* LICENSE BLOCK |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
2 Part of mde: a Modular D game-oriented Engine |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
3 Copyright © 2007-2008 Diggory Hardy |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
4 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify it under the terms |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
6 of the GNU General Public License as published by the Free Software Foundation, either |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
7 version 2 of the License, or (at your option) any later version. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
8 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
10 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
11 See the GNU General Public License for more details. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
12 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
13 You should have received a copy of the GNU General Public License |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
14 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
15 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
16 /****************************************************************************** |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
17 * A gui manager class using mde.setup.Screen and mde.input.Input. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
18 * |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
19 * This is the module to use externally to create a graphical user interface |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
20 * (likely also with content modules). |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
21 *****************************************************************************/ |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
22 module mde.gui.WMScreen; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
23 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
24 import mde.gui.WidgetManager; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
25 import mde.gui.widget.Ifaces; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
26 import mde.gui.renderer.createRenderer; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
27 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
28 import mde.setup.Screen; |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
29 import mde.input.Input; |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
30 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
31 import tango.util.log.Log : Log, Logger; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
32 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
33 private Logger logger; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
34 static this () { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
35 logger = Log.getLogger ("mde.gui.WMScreen"); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
36 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
37 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
38 /****************************************************************************** |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
39 * The widget manager. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
40 * |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
41 * This provides a layer on top of WidgetLoader, handling input and rendering. |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
42 * Other functionality is contained in the super class, to simplify supporting |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
43 * new input/graphics libraries. |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
44 * |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
45 * Currently mouse coordinates are passed to widgets untranslated. It may make |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
46 * sense to translate them and possibly drop events for some uses, such as if |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
47 * the gui is drawn to a texture. |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
48 * |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
49 * Public non IWidget* methods should be thread-safe. |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
50 *****************************************************************************/ |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
51 scope class WMScreen : AWidgetManager, Screen.IDrawable { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
52 /** Construct a new widget manager. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
53 * |
128
41582439a42b
Added support for dynamic EnumContent loading and saving, with translation loading.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
126
diff
changeset
|
54 * Must be run after static this. |
41582439a42b
Added support for dynamic EnumContent loading and saving, with translation loading.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
126
diff
changeset
|
55 * |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
56 * params: |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
57 * fileName = Name of file specifying the gui, excluding path and extension. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
58 */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
59 this (char[] file) { |
128
41582439a42b
Added support for dynamic EnumContent loading and saving, with translation loading.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
126
diff
changeset
|
60 // Doesn't need a lock - cannot conflict with other class functions. |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
61 super(file); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
62 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
63 Screen.addDrawable (this); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
64 // Events we want to know about: |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
65 input = Input.singleton; |
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
66 input.addMouseClickCallback(&clickEvent) |
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
67 .addMouseMotionCallback(&motionEvent); |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
68 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
69 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
70 /** Draw the gui. */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
71 void draw() { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
72 synchronized(mutex) { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
73 if (child) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
74 child.draw; |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
75 if (childIPPW) |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
76 childIPPW.drawPopup; |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
77 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
78 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
79 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
80 /** For mouse click events. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
81 * |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
82 * Sends the event on to the relevant windows and all click callbacks. */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
83 void clickEvent (ushort usx, ushort usy, ubyte b, bool state) { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
84 debug scope (failure) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
85 logger.warn ("clickEvent: failed!"); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
86 mutex.lock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
87 scope(exit) mutex.unlock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
88 if (child is null) return; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
89 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
90 wdabs cx = cast(wdabs) usx, cy = cast(wdabs) usy; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
91 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
92 // Callbacks have the highest priority receiving events (e.g. a button release) |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
93 foreach (dg; clickCallbacks) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
94 if (dg (cx, cy, b, state)) return; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
95 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
96 // Update underMouse to get the widget clicked on |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
97 updateUnderMouse (cx, cy, state); |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
98 |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
99 // Disable keyboard input if on another widget: |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
100 if (keyFocus && keyFocus !is underMouse) { |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
101 keyFocus.keyFocusLost; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
102 keyFocus = null; |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
103 input.setLetterCallback (null); |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
104 } |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
105 // Finally, post the actual event: |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
106 if (underMouse.clickEvent (cast(wdabs)cx,cast(wdabs)cy,b,state) & 1) { |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
107 // keyboard input requested |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
108 keyFocus = underMouse; |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
109 input.setLetterCallback (&underMouse.keyEvent); |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
110 } |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
111 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
112 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
113 /** For mouse motion events. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
114 * |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
115 * Sends the event on to all motion callbacks. */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
116 void motionEvent (ushort scx, ushort scy) { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
117 debug scope (failure) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
118 logger.warn ("motionEvent: failed!"); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
119 mutex.lock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
120 scope(exit) mutex.unlock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
121 wdabs cx = cast(wdabs) scx, cy = cast(wdabs) scy; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
122 foreach (dg; motionCallbacks) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
123 dg (cx, cy); |
131
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
124 |
9cff74f68b84
Major revisions to popup handling. Buttons can close menus now, plus some smaller impovements. Removed Widget module.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
128
diff
changeset
|
125 updateUnderMouse (cx, cy, false); |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
126 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
127 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
128 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
129 void sizeEvent (int nw, int nh) { // IDrawable function |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
130 mutex.lock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
131 scope(exit) mutex.unlock; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
132 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
133 w = cast(wdim) nw; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
134 h = cast(wdim) nh; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
135 |
126
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
136 if (w < mw) { |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
137 logger.warn ("Min width for gui, {}, not met: {}", mw, w); |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
138 w = mw; |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
139 } |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
140 if (h < mh) { |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
141 logger.warn ("Min height for gui, {}, not met: {}", mh, h); |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
142 h = mh; |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
143 } |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
144 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
145 if (!child) return; // if not created yet. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
146 child.setWidth (w, -1); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
147 child.setHeight (h, -1); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
148 child.setPosition (0,0); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
149 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
150 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
151 protected: |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
152 /* Second stage of widget loading. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
153 * Note: sizeEvent should be called with window size before this. */ |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
154 final override void createRootWidget () { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
155 // The renderer needs to be created on the first load, but not after this. |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
156 if (rend is null) |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
157 rend = createRenderer (rendName); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
158 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
159 debug (mdeWidgets) logger.trace ("Creating root widget..."); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
160 child = makeWidget (this, "root"); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
161 debug (mdeWidgets) logger.trace ("Setting up root widget..."); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
162 child.setup (0, 3); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
163 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
164 mw = child.minWidth; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
165 mh = child.minHeight; |
126
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
166 if (w < mw) { |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
167 logger.warn ("Min width for gui, {}, not met: {}", mw, w); |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
168 w = mw; |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
169 } |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
170 if (h < mh) { |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
171 logger.warn ("Min height for gui, {}, not met: {}", mh, h); |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
172 h = mh; |
c9843fbaac88
Dynamic minimal size changing improved; works over layouts sharing alignment.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
122
diff
changeset
|
173 } |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
174 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
175 debug (mdeWidgets) logger.trace ("Setting size and position of root widget..."); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
176 child.setWidth (w, -1); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
177 child.setHeight (h, -1); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
178 child.setPosition (0,0); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
179 debug (mdeWidgets) logger.trace ("Done creating root widget."); |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
180 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
181 |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
182 final override void preSave () { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
183 if (keyFocus) { |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
184 keyFocus.keyFocusLost; |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
185 keyFocus = null; |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
186 input.setLetterCallback (null); |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
187 } |
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
188 } |
132
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
189 |
264028f4115a
Cleaned up mde.imde and a couple of widget functions.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
131
diff
changeset
|
190 Input input; // input singleton |
122
f96e8d18c00a
Missed file from last commit.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff
changeset
|
191 } |