move LastMousePosition et al from Widget to Viewport

This commit is contained in:
Bob
2010-07-30 20:07:39 +12:00
parent 3cd9a1e0e4
commit 2dd558a065
8 changed files with 31 additions and 29 deletions

View File

@@ -30,6 +30,9 @@ namespace OpenRA.Graphics
float cursorFrame = 0f; float cursorFrame = 0f;
public static int TicksSinceLastMove = 0;
public static int2 LastMousePos;
public void Scroll(float2 delta) public void Scroll(float2 delta)
{ {
scrollPosition = scrollPosition + delta; scrollPosition = scrollPosition + delta;
@@ -60,9 +63,9 @@ namespace OpenRA.Graphics
Widget.DoDraw(world); Widget.DoDraw(world);
Timer.Time( "widgets: {0}" ); Timer.Time( "widgets: {0}" );
var cursorName = Widget.RootWidget.GetCursorOuter(Widget.LastMousePos) ?? "default"; var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default";
var c = new Cursor(cursorName); var c = new Cursor(cursorName);
c.Draw((int)cursorFrame, Widget.LastMousePos + Location); c.Draw((int)cursorFrame, Viewport.LastMousePos + Location);
Timer.Time( "cursors: {0}" ); Timer.Time( "cursors: {0}" );
renderer.RgbaSpriteRenderer.Flush(); renderer.RgbaSpriteRenderer.Flush();

View File

@@ -55,7 +55,7 @@ namespace OpenRA
public void DrawBuildingGrid( World world, string name, BuildingInfo bi ) public void DrawBuildingGrid( World world, string name, BuildingInfo bi )
{ {
var position = Game.viewport.ViewToWorld(Widget.LastMousePos).ToInt2(); var position = Game.viewport.ViewToWorld(Viewport.LastMousePos).ToInt2();
var topLeft = position - Footprint.AdjustForBuildingSize( bi ); var topLeft = position - Footprint.AdjustForBuildingSize( bi );
// Linebuild for walls. // Linebuild for walls.

View File

@@ -226,7 +226,7 @@ namespace OpenRA.Widgets
var firstOfThis = queue.AllItems(queueName).FirstOrDefault(a => a.Item == item.Name); var firstOfThis = queue.AllItems(queueName).FirstOrDefault(a => a.Item == item.Name);
if (rect.Contains(Widget.LastMousePos.ToPoint())) if (rect.Contains(Viewport.LastMousePos.ToPoint()))
tooltipItem = item.Name; tooltipItem = item.Name;
var overlayPos = drawPos + new float2((64 - ready.Image.size.X) / 2, 2); var overlayPos = drawPos + new float2((64 - ready.Image.size.X) / 2, 2);
@@ -424,7 +424,7 @@ namespace OpenRA.Widgets
var rect = new Rectangle((int)x,(int)y,(int)tabWidth,(int)tabHeight); var rect = new Rectangle((int)x,(int)y,(int)tabWidth,(int)tabHeight);
tabs.Add(Pair.New(rect, HandleTabClick(groupName, world))); tabs.Add(Pair.New(rect, HandleTabClick(groupName, world)));
if (rect.Contains(Widget.LastMousePos.ToPoint())) if (rect.Contains(Viewport.LastMousePos.ToPoint()))
{ {
var text = CategoryNameRemaps.ContainsKey(groupName) ? CategoryNameRemaps[groupName] : groupName; var text = CategoryNameRemaps.ContainsKey(groupName) ? CategoryNameRemaps[groupName] : groupName;
var sz = Game.Renderer.BoldFont.Measure(text); var sz = Game.Renderer.BoldFont.Measure(text);

View File

@@ -24,7 +24,7 @@ namespace OpenRA.Widgets
var image = ChromeProvider.GetImage(Image + "-button", GetImage()); var image = ChromeProvider.GetImage(Image + "-button", GetImage());
var rect = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y); var rect = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y);
if (rect.Contains(Widget.LastMousePos.ToPoint())) if (rect.Contains(Viewport.LastMousePos.ToPoint()))
{ {
rect = rect.InflateBy(3, 3, 3, 3); rect = rect.InflateBy(3, 3, 3, 3);
var pos = new int2(rect.Left, rect.Top); var pos = new int2(rect.Left, rect.Top);

View File

@@ -91,7 +91,7 @@ namespace OpenRA.Widgets
var drawPos = new float2(rectBounds.X + 5, y); var drawPos = new float2(rectBounds.X + 5, y);
var rect = new Rectangle(rectBounds.X + 5, y, 64, 48); var rect = new Rectangle(rectBounds.X + 5, y, 64, 48);
if (rect.Contains(Widget.LastMousePos.ToPoint())) if (rect.Contains(Viewport.LastMousePos.ToPoint()))
{ {
var pos = drawPos.ToInt2(); var pos = drawPos.ToInt2();
var tl = new int2(pos.X-3,pos.Y-3); var tl = new int2(pos.X-3,pos.Y-3);

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using OpenRA.Graphics;
namespace OpenRA.Widgets namespace OpenRA.Widgets
{ {
@@ -38,7 +39,7 @@ namespace OpenRA.Widgets
if (mi.Event == MouseInputEvent.Move && if (mi.Event == MouseInputEvent.Move &&
(mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right))) (mi.Button == MouseButton.Middle || mi.Button == (MouseButton.Left | MouseButton.Right)))
{ {
Game.viewport.Scroll(Widget.LastMousePos - mi.Location); Game.viewport.Scroll(Viewport.LastMousePos - mi.Location);
return true; return true;
} }
return false; return false;
@@ -94,13 +95,13 @@ namespace OpenRA.Widgets
if (Game.Settings.ViewportEdgeScroll) if (Game.Settings.ViewportEdgeScroll)
{ {
// Check for edge-scroll // Check for edge-scroll
if (Widget.LastMousePos.X < EdgeScrollThreshold) if (Viewport.LastMousePos.X < EdgeScrollThreshold)
Edge = Edge.Set(ScrollDirection.Left, true); Edge = Edge.Set(ScrollDirection.Left, true);
if (Widget.LastMousePos.Y < EdgeScrollThreshold) if (Viewport.LastMousePos.Y < EdgeScrollThreshold)
Edge = Edge.Set(ScrollDirection.Up, true); Edge = Edge.Set(ScrollDirection.Up, true);
if (Widget.LastMousePos.X >= Game.viewport.Width - EdgeScrollThreshold) if (Viewport.LastMousePos.X >= Game.viewport.Width - EdgeScrollThreshold)
Edge = Edge.Set(ScrollDirection.Right, true); Edge = Edge.Set(ScrollDirection.Right, true);
if (Widget.LastMousePos.Y >= Game.viewport.Height - EdgeScrollThreshold) if (Viewport.LastMousePos.Y >= Game.viewport.Height - EdgeScrollThreshold)
Edge = Edge.Set(ScrollDirection.Down, true); Edge = Edge.Set(ScrollDirection.Down, true);
} }
var scroll = new float2(0,0); var scroll = new float2(0,0);

View File

@@ -203,8 +203,6 @@ namespace OpenRA.Widgets
public virtual bool HandleInputInner(MouseInput mi) { return !ClickThrough; } public virtual bool HandleInputInner(MouseInput mi) { return !ClickThrough; }
public static int TicksSinceLastMove = 0;
public static int2 LastMousePos;
public static bool HandleInput(World world, MouseInput mi) public static bool HandleInput(World world, MouseInput mi)
{ {
bool handled = false; bool handled = false;
@@ -216,8 +214,8 @@ namespace OpenRA.Widgets
if (mi.Event == MouseInputEvent.Move) if (mi.Event == MouseInputEvent.Move)
{ {
LastMousePos = mi.Location; Viewport.LastMousePos = mi.Location;
TicksSinceLastMove = 0; Viewport.TicksSinceLastMove = 0;
} }
return handled; return handled;
} }
@@ -344,7 +342,7 @@ namespace OpenRA.Widgets
if (!world.GameHasStarted) return; if (!world.GameHasStarted) return;
if (world.LocalPlayer == null) return; if (world.LocalPlayer == null) return;
++TicksSinceLastMove; ++Viewport.TicksSinceLastMove;
} }
public static void DoDraw(World world) public static void DoDraw(World world)

View File

@@ -22,10 +22,10 @@ namespace OpenRA.Widgets
public WorldTooltipWidget() : base() { } public WorldTooltipWidget() : base() { }
public override void DrawInner(World world) public override void DrawInner(World world)
{ {
if (Widget.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null) if (Viewport.TicksSinceLastMove < TooltipDelay || world == null || world.LocalPlayer == null)
return; return;
var cell = Game.viewport.ViewToWorld(Widget.LastMousePos).ToInt2(); var cell = Game.viewport.ViewToWorld(Viewport.LastMousePos).ToInt2();
if (!world.Map.IsInMap(cell)) return; if (!world.Map.IsInMap(cell)) return;
if (!world.LocalPlayer.Shroud.IsExplored(cell)) if (!world.LocalPlayer.Shroud.IsExplored(cell))
@@ -34,16 +34,16 @@ namespace OpenRA.Widgets
var usz = Game.Renderer.BoldFont.Measure(utext) + new int2(20, 24); var usz = Game.Renderer.BoldFont.Measure(utext) + new int2(20, 24);
WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB( WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB(
Widget.LastMousePos.X + 20, Widget.LastMousePos.Y + 20, Viewport.LastMousePos.X + 20, Viewport.LastMousePos.Y + 20,
Widget.LastMousePos.X + usz.X + 20, Widget.LastMousePos.Y + usz.Y + 20)); Viewport.LastMousePos.X + usz.X + 20, Viewport.LastMousePos.Y + usz.Y + 20));
Game.Renderer.BoldFont.DrawText(utext, Game.Renderer.BoldFont.DrawText(utext,
new float2(Widget.LastMousePos.X + 30, Widget.LastMousePos.Y + 30), Color.White); new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 30), Color.White);
return; return;
} }
var actor = world.FindUnitsAtMouse(Widget.LastMousePos).FirstOrDefault(); var actor = world.FindUnitsAtMouse(Viewport.LastMousePos).FirstOrDefault();
if (actor == null || !actor.IsVisible()) if (actor == null || !actor.IsVisible())
return; return;
@@ -67,23 +67,23 @@ namespace OpenRA.Widgets
sz.Y += 24; sz.Y += 24;
WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB( WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB(
Widget.LastMousePos.X + 20, Widget.LastMousePos.Y + 20, Viewport.LastMousePos.X + 20, Viewport.LastMousePos.Y + 20,
Widget.LastMousePos.X + sz.X + 20, Widget.LastMousePos.Y + sz.Y + 20)); Viewport.LastMousePos.X + sz.X + 20, Viewport.LastMousePos.Y + sz.Y + 20));
Game.Renderer.BoldFont.DrawText(text, Game.Renderer.BoldFont.DrawText(text,
new float2(Widget.LastMousePos.X + 30, Widget.LastMousePos.Y + 30), Color.White); new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 30), Color.White);
if (text2 != "") if (text2 != "")
{ {
Game.Renderer.RegularFont.DrawText(text2, Game.Renderer.RegularFont.DrawText(text2,
new float2(Widget.LastMousePos.X + 65, Widget.LastMousePos.Y + 50), actor.Owner.Color); new float2(Viewport.LastMousePos.X + 65, Viewport.LastMousePos.Y + 50), actor.Owner.Color);
Game.Renderer.RegularFont.DrawText(text3, Game.Renderer.RegularFont.DrawText(text3,
new float2(Widget.LastMousePos.X + 65 + sz2.X, Widget.LastMousePos.Y + 50), Color.White); new float2(Viewport.LastMousePos.X + 65 + sz2.X, Viewport.LastMousePos.Y + 50), Color.White);
WidgetUtils.DrawRGBA( WidgetUtils.DrawRGBA(
ChromeProvider.GetImage("flags", actor.Owner.Country.Race), ChromeProvider.GetImage("flags", actor.Owner.Country.Race),
new float2(Widget.LastMousePos.X + 30, Widget.LastMousePos.Y + 50)); new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 50));
} }
Game.Renderer.RgbaSpriteRenderer.Flush(); Game.Renderer.RgbaSpriteRenderer.Flush();
} }