Jypeli 10
The simple game programming library
Window.cs
Siirry tämän tiedoston dokumentaatioon.
1#region MIT License
2/*
3 * Copyright (c) 2009-2011 University of Jyväskylä, Department of Mathematical
4 * Information Technology.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#endregion
25
26/*
27 * Authors: Tomi Karppinen, Tero Jäntti, Rami Pasanen
28 */
29
30
31namespace Jypeli
32{
36 public class Window : Widget
37 {
38 private Color _actColor = new Color( 255, 255, 255, 200 );
39 private Color _inactColor = new Color( 50, 50, 50, 50 );
40 private Color _actTitle = new Color( 255, 255, 255, 100 );
41 private Color _inactTitle = new Color( 128, 128, 128, 50 );
42
43 private bool moving = false;
45 private bool prevMouseVisible = true;
46
50 public override Color Color
51 {
52 get
53 {
54 return base.Color;
55 }
56 set
57 {
58 ActiveColor = value;
59 InactiveColor = Color.Darker( value, 75 );
60 base.Color = value;
61 }
62 }
63
68 {
69 get { return _actColor; }
70 set { _actColor = value; }
71 }
72
77 {
78 get { return _inactColor; }
79 set { _inactColor = value; }
80 }
81
85 public delegate void WindowHandler( Window sender );
86
92 public event WindowHandler Closed;
93
94 private void OnClosed()
95 {
96 if ( Closed != null )
97 Closed( this );
98 }
99
103 public Window()
104 : base( new VerticalLayout() )
105 {
106 initialize();
107 }
108
114 public Window( double width, double height )
115 : base( width, height )
116 {
117 SizingByLayout = false;
118 Layout = new VerticalLayout();
119 initialize();
120 }
121
125 protected override Vector GetMaximumSize()
126 {
127 var screen = Game.Screen;
128 return new Vector( screen.Width * ( 7.0 / 8.0 ), screen.Height * ( 7.0 / 8.0 ) );
129 }
130
131 private void initialize()
132 {
135
136 Removed += OnClosed;
137 ControlContext.Activated += Window_Activated;
138 ControlContext.Deactivated += Window_Deactivated;
139
141
142 CapturesMouse = true;
143 this.IsModal = true;
144
146 }
147
148 private void ShowMouse()
149 {
150 if (!IsModal)
151 return;
152
153 if ( Game.Instance != null )
154 {
155 prevMouseVisible = Game.Instance.IsMouseVisible;
156 Game.Instance.IsMouseVisible = true;
157 }
158 }
159
160 private void RestoreMouse()
161 {
162 if (!IsModal)
163 return;
164
165 if ( Game.Instance != null )
166 Game.Instance.IsMouseVisible = prevMouseVisible;
167 }
168
170 {
171 var l1 = Game.Mouse.ListenOn( this, MouseButton.Left, ButtonState.Pressed, StartMoveWindow, null ).InContext( this );
172 var l2 = Game.Mouse.Listen( MouseButton.Left, ButtonState.Down, MoveWindow, null ).InContext( this );
173 var l3 = Game.Mouse.ListenOn( this, MouseButton.Left, ButtonState.Released, EndMoveWindow, null ).InContext( this );
174 associatedListeners.AddItems(l1, l2, l3);
175 }
176
178 {
179 if ( Game == null ) return;
180 if (!CapturesMouse) return;
181 foreach (var obj in Objects)
182 {
183 if (obj is Widget w && w.IsCapturingMouse)
184 return;
185 }
186
188 moving = true;
189 }
190
192 {
193 if ( !moving ) return;
194 this.Position = movementCenter + Game.Mouse.PositionOnScreen;
195 }
196
198 {
199 moving = false;
200 }
201
203 {
204 base.Color = ActiveColor;
205 }
206
208 {
209 base.Color = InactiveColor;
210 }
211
215 public void Close()
216 {
217 if ( Parent != null )
218 Parent.Remove( this );
219 else
220 Game.Remove( this );
221 }
222 }
223}
Mouse Mouse
Hiiri.
Definition: Controls.cs:49
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:96
static void AssertInitialized(Action actionMethod)
Suorittaa aliohjelman kun peli on varmasti alustettu.
static ScreenView Screen
Näytön dimensiot, eli koko ja reunat.
Definition: Graphics.cs:90
void Remove(IGameObject o)
Poistaa olion pelistä. Jos haluat tuhota olion, kutsu mielummin olion Destroy-metodia.
Definition: Layers.cs:211
override Vector?? Position
Definition: Dimensions.cs:72
SynchronousList< GameObject > Objects
Olion lapsioliot. Saa muuttaa.
Definition: ChildObjects.cs:46
bool SizingByLayout
Onko olion koko asettelijan muokkaama
Definition: Layout.cs:74
void RefreshLayout()
Päivittää lapsiolioiden paikat ja koot, jos widgetille on asetettu asettelija. Tätä metodia EI yleens...
Definition: Layout.cs:149
ILayout Layout
Asettelija lapsiolioille. Asettaa lapsiolioiden koon sekä paikan.
Definition: Layout.cs:99
IGameObject Parent
Olio, jonka lapsiolio tämä olio on. Jos null, olio ei ole minkään olion lapsiolio.
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Action Removed
Tapahtuu, kun olio poistetaan pelistä (tuhotaan tai ei).
Vector PositionOnScreen
Kursorin paikka ruutukoordinaateissa.
Definition: Mouse.cs:75
Listener ListenOn(GameObject obj, HoverState hoverstate, MouseButton button, ButtonState state, Action handler, string helpText)
Kuuntelee hiirenpainalluksia annetun peliolion päällä.
Definition: Mouse.cs:476
Listener Listen(MouseButton button, ButtonState state, Action handler, string helpText)
Kuuntelee hiiren nappulan painalluksia.
Definition: Mouse.cs:350
Asettelee widgetit päällekäin, järjestyksessä ylhäältä alas.
Käyttöliittymän komponentti.
Definition: Appearance.cs:6
bool IsModal
Jos true, pelin sekä ikkunan alla olevien widgettien ohjaimet eivät ole käytössä kun ikkuna on n...
Definition: Control.cs:25
List< Listener > associatedListeners
Tähän listaan lisätyt kuuntelijat tuhotaan automaattisesti kun Widget poistetaan pelistä.
Definition: Control.cs:14
bool IsCapturingMouse
Kaappaako hiirtä tällä hetkellä, eli: CapturesMouse on true ja hiiri on tämän olion päällä,...
Definition: Control.cs:38
bool CapturesMouse
Kaappaako hiiren, eli meneekö hiiren tapahtumat tämän alla sijaitsevalle oliolle
Definition: Control.cs:30
ListenContext ControlContext
Tämän Widgetin ohjainkuuntelijoiden konteksti
Definition: Control.cs:19
Ikkuna.
Definition: Window.cs:37
void OnClosed()
Definition: Window.cs:94
void StartMoveWindow()
Definition: Window.cs:177
Window()
Alustaa uuden ikkunan.
Definition: Window.cs:103
delegate void WindowHandler(Window sender)
Ikkunatapahtumien käsittelijä.
Window(double width, double height)
Alustaa uuden ikkunan.
Definition: Window.cs:114
void RestoreMouse()
Definition: Window.cs:160
override Vector GetMaximumSize()
Ikkunalla maksimikoko on siten, että se mahtuu näytölle.
Definition: Window.cs:125
bool moving
Definition: Window.cs:43
Color _actColor
Definition: Window.cs:38
void Window_Activated()
Definition: Window.cs:202
void EndMoveWindow()
Definition: Window.cs:197
bool prevMouseVisible
Definition: Window.cs:45
Color ActiveColor
Ikkunan väri, kun ikkuna on aktiivinen.
Definition: Window.cs:68
void ShowMouse()
Definition: Window.cs:148
void Close()
Sulkee ikkunan.
Definition: Window.cs:215
WindowHandler Closed
Tapahtuu kun ikkuna suljetaan. TODO: ClearAllin kutsuminen samalla updatella kuin Closed-eventti tapa...
Definition: Window.cs:92
Vector movementCenter
Definition: Window.cs:44
void AddControls()
Definition: Window.cs:169
Color _actTitle
Definition: Window.cs:40
Color InactiveColor
Ikkunan väri, kun ikkuna ei ole aktiivinen.
Definition: Window.cs:77
Color _inactTitle
Definition: Window.cs:41
Color _inactColor
Definition: Window.cs:39
override Color Color
Ikkunan väri.
Definition: Window.cs:51
void Window_Deactivated()
Definition: Window.cs:207
void initialize()
Definition: Window.cs:131
void MoveWindow()
Definition: Window.cs:191
void Remove(IGameObject childObject)
Listener InContext(ListenContext context)
Kuuntelee tapahtumaa vain tietyssä kontekstissa.
ButtonState
Napin (minkä tahansa) asento.
Definition: ButtonState.cs:37
MouseButton
Hiiren napit.
Definition: MouseButton.cs:7
Väri.
Definition: Color.cs:13
Color(XnaColor c)
Definition: Color.cs:38
static Color Darker(Color c, int howMuch)
Antaa tummemman värin. Vähentaa jokaista kolmea osaväriä arvon howMuch verran.
Definition: Color.cs:470
2D-vektori.
Definition: Vector.cs:67
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:71