Rework WidgetUtil sprite rendering helpers.

This commit is contained in:
Paul Chote
2021-07-22 21:43:14 +01:00
committed by reaperrr
parent 2e6f444285
commit 8e94e1d5ec
21 changed files with 54 additions and 53 deletions

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Widgets
var icon = playerDatabase.GetIcon(Badge);
if (icon != null)
Game.Renderer.RgbaSpriteRenderer.DrawSprite(icon, RenderOrigin);
WidgetUtils.DrawSprite(icon, RenderOrigin);
}
}
}

View File

@@ -75,7 +75,7 @@ namespace OpenRA.Mods.Common.Widgets
checkType += "-disabled";
var offset = new float2(rect.Left + CheckOffset, rect.Top + CheckOffset);
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("checkbox-bits", checkType), offset);
WidgetUtils.DrawSprite(ChromeProvider.GetImage("checkbox-bits", checkType), offset);
}
}

View File

@@ -89,12 +89,12 @@ namespace OpenRA.Mods.Common.Widgets
public override void Draw()
{
Game.Renderer.RgbaSpriteRenderer.DrawSprite(mixerSprite, RenderOrigin, new float2(RenderBounds.Size));
WidgetUtils.DrawSprite(mixerSprite, RenderOrigin, RenderBounds.Size);
var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker");
var pos = RenderOrigin + PxFromValue() - new int2((int)sprite.Size.X, (int)sprite.Size.Y) / 2;
WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X + 1, pos.Y + 1, (int)sprite.Size.X - 2, (int)sprite.Size.Y - 2), Color);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
WidgetUtils.DrawSprite(sprite, pos);
}
void SetValueFromPx(int2 xy)

View File

@@ -61,11 +61,11 @@ namespace OpenRA.Mods.Common.Widgets
var isHover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget);
var arrowImage = getMarkerImage.Update((isDisabled, Depressed, isHover, false));
WidgetUtils.DrawRGBA(arrowImage, stateOffset + new float2(rb.Right - (int)((rb.Height + arrowImage.Size.X) / 2), rb.Top + (int)((rb.Height - arrowImage.Size.Y) / 2)));
WidgetUtils.DrawSprite(arrowImage, stateOffset + new float2(rb.Right - (int)((rb.Height + arrowImage.Size.X) / 2), rb.Top + (int)((rb.Height - arrowImage.Size.Y) / 2)));
var separatorImage = getSeparatorImage.Update((isDisabled, Depressed, isHover, false));
if (separatorImage != null)
WidgetUtils.DrawRGBA(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));
WidgetUtils.DrawSprite(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));
}
public override Widget Clone() { return new DropDownButtonWidget(this); }

View File

@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Widgets
if (sprite == null)
throw new ArgumentException($"Sprite {collection}/{name} was not found.");
WidgetUtils.DrawRGBA(sprite, RenderOrigin);
WidgetUtils.DrawSprite(sprite, RenderOrigin);
}
public override bool HandleMouseInput(MouseInput mi)

View File

@@ -181,7 +181,7 @@ namespace OpenRA.Mods.Common.Widgets
var y = RenderBounds.Y + (RenderBounds.Height - h) / 2;
mapRect = new Rectangle(x, y, w, h);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(minimap, new float2(mapRect.Location), new float2(mapRect.Size));
WidgetUtils.DrawSprite(minimap, mapRect.Location, mapRect.Size);
TooltipSpawnIndex = -1;
if (ShowSpawnPoints)
@@ -207,14 +207,14 @@ namespace OpenRA.Mods.Common.Widgets
if (disabled)
{
Game.Renderer.RgbaSpriteRenderer.DrawSprite(spawnDisabled, pos - offset);
WidgetUtils.DrawSprite(spawnDisabled, pos - offset);
continue;
}
if (occupied)
WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X - offset.X + 1, pos.Y - offset.Y + 1, (int)sprite.Size.X - 2, (int)sprite.Size.Y - 2), occupant.Color);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos - offset);
WidgetUtils.DrawSprite(sprite, pos - offset);
var number = Convert.ToChar('A' + spawnPoints.IndexOf(p)).ToString();
var textOffset = spawnFont.Measure(number) / 2 + spawnLabelOffset;

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Widgets
// Cursor is rendered in native window coordinates
// Apply same scaling rules as hardware cursors
var scale = (graphicSettings.CursorDouble ? 2 : 1) * (Game.Renderer.NativeWindowScale > 1.5f ? 2 : 1);
WidgetUtils.DrawSHPCentered(sprite, ChildOrigin, directionPalette, scale / Game.Renderer.WindowScale);
WidgetUtils.DrawSpriteCentered(sprite, directionPalette, ChildOrigin, scale / Game.Renderer.WindowScale);
}
}

View File

@@ -108,7 +108,7 @@ namespace OpenRA.Mods.Common.Widgets
var centerPosition = iconTopLeft;
var palette = unit.IconPaletteIsPlayerPalette ? unit.IconPalette + player.InternalName : unit.IconPalette;
WidgetUtils.DrawSHPCentered(icon.Image, centerPosition + 0.5f * iconSize, worldRenderer.Palette(palette), 0.5f);
WidgetUtils.DrawSpriteCentered(icon.Image, worldRenderer.Palette(palette), centerPosition + 0.5f * iconSize, 0.5f);
armyIcons.Add(new ArmyIcon
{

View File

@@ -144,7 +144,7 @@ namespace OpenRA.Mods.Common.Widgets
var centerPosition = iconTopLeft + 0.5f * iconSize;
var palette = bi.IconPaletteIsPlayerPalette ? bi.IconPalette + player.InternalName : bi.IconPalette;
WidgetUtils.DrawSHPCentered(icon.Image, centerPosition, worldRenderer.Palette(palette), 0.5f);
WidgetUtils.DrawSpriteCentered(icon.Image, worldRenderer.Palette(palette), centerPosition, 0.5f);
var rect = new Rectangle((int)iconTopLeft.X, (int)iconTopLeft.Y, (int)iconSize.X, (int)iconSize.Y);
productionIcons.Add(new ProductionIcon
@@ -161,15 +161,15 @@ namespace OpenRA.Mods.Common.Widgets
.FirstOrDefault(p => p.IsOverlayActive(actor));
if (pio != null)
WidgetUtils.DrawSHPCentered(pio.Sprite, centerPosition + pio.Offset(iconSize),
worldRenderer.Palette(pio.Palette), 0.5f);
WidgetUtils.DrawSpriteCentered(pio.Sprite, worldRenderer.Palette(pio.Palette),
centerPosition + pio.Offset(iconSize), 0.5f);
var clock = clocks[queue];
clock.PlayFetchIndex(ClockSequence, () => current.TotalTime == 0 ? 0 :
(current.TotalTime - current.RemainingTime) * (clock.CurrentSequence.Length - 1) / current.TotalTime);
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, centerPosition, worldRenderer.Palette(ClockPalette), 0.5f);
WidgetUtils.DrawSpriteCentered(clock.Image, worldRenderer.Palette(ClockPalette), centerPosition, 0.5f);
queueCol++;
}

View File

@@ -124,14 +124,14 @@ namespace OpenRA.Mods.Common.Widgets
supportPowerIconsIcons.Add(new SupportPowersWidget.SupportPowerIcon { Power = item, Pos = location });
supportPowerIconsBounds.Add(new Rectangle((int)location.X, (int)location.Y, (int)iconSize.X, (int)iconSize.Y));
WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer.Palette(item.Info.IconPalette), 0.5f);
WidgetUtils.DrawSpriteCentered(icon.Image, worldRenderer.Palette(item.Info.IconPalette), location + 0.5f * iconSize, 0.5f);
var clock = clocks[power.a.Key];
clock.PlayFetchIndex(ClockSequence,
() => item.TotalTicks == 0 ? 0 : ((item.TotalTicks - item.RemainingTicks)
* (clock.CurrentSequence.Length - 1) / item.TotalTicks));
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, location + 0.5f * iconSize, worldRenderer.Palette(ClockPalette), 0.5f);
WidgetUtils.DrawSpriteCentered(clock.Image, worldRenderer.Palette(ClockPalette), location + 0.5f * iconSize, 0.5f);
}
Game.Renderer.DisableAntialiasingFilter();

View File

@@ -499,12 +499,12 @@ namespace OpenRA.Mods.Common.Widgets
Game.Renderer.EnableAntialiasingFilter();
foreach (var icon in icons.Values)
{
WidgetUtils.DrawSHPCentered(icon.Sprite, icon.Pos + iconOffset, icon.Palette);
WidgetUtils.DrawSpriteCentered(icon.Sprite, icon.Palette, icon.Pos + iconOffset);
// Draw the ProductionIconOverlay's sprite
var pio = pios.FirstOrDefault(p => p.IsOverlayActive(icon.Actor));
if (pio != null)
WidgetUtils.DrawSHPCentered(pio.Sprite, icon.Pos + iconOffset + pio.Offset(IconSize), worldRenderer.Palette(pio.Palette), 1f);
WidgetUtils.DrawSpriteCentered(pio.Sprite, worldRenderer.Palette(pio.Palette), icon.Pos + iconOffset + pio.Offset(IconSize));
// Build progress
if (icon.Queued.Count > 0)
@@ -515,10 +515,10 @@ namespace OpenRA.Mods.Common.Widgets
* (clock.CurrentSequence.Length - 1) / first.TotalTime);
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, icon.Pos + iconOffset, icon.IconClockPalette);
WidgetUtils.DrawSpriteCentered(clock.Image, icon.IconClockPalette, icon.Pos + iconOffset);
}
else if (!buildableItems.Any(a => a.Name == icon.Name))
WidgetUtils.DrawSHPCentered(cantBuild.Image, icon.Pos + iconOffset, icon.IconDarkenPalette);
WidgetUtils.DrawSpriteCentered(cantBuild.Image, icon.IconDarkenPalette, icon.Pos + iconOffset);
}
Game.Renderer.DisableAntialiasingFilter();

View File

@@ -194,11 +194,11 @@ namespace OpenRA.Mods.Common.Widgets
ButtonWidget.DrawBackground(Button, rightButtonRect, rightDisabled, rightPressed, rightHover, false);
var leftArrowImage = getLeftArrowImage.Update((leftDisabled, leftPressed, leftHover, false));
WidgetUtils.DrawRGBA(leftArrowImage,
WidgetUtils.DrawSprite(leftArrowImage,
new float2(leftButtonRect.Left + 2, leftButtonRect.Top + 2));
var rightArrowImage = getRightArrowImage.Update((rightDisabled, rightPressed, rightHover, false));
WidgetUtils.DrawRGBA(rightArrowImage,
WidgetUtils.DrawSprite(rightArrowImage,
new float2(rightButtonRect.Left + 2, rightButtonRect.Top + 2));
// Draw tab buttons

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.Widgets
{
var sprite = GetSprite();
if (sprite != null)
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, RenderOrigin);
WidgetUtils.DrawSprite(sprite, RenderOrigin);
}
}
}

View File

@@ -339,12 +339,11 @@ namespace OpenRA.Mods.Common.Widgets
var o = new float2(mapRect.Location.X, mapRect.Location.Y + world.Map.Bounds.Height * previewScale * (1 - radarMinimapHeight) / 2);
var s = new float2(mapRect.Size.Width, mapRect.Size.Height * radarMinimapHeight);
var rsr = Game.Renderer.RgbaSpriteRenderer;
rsr.DrawSprite(terrainSprite, o, s);
rsr.DrawSprite(actorSprite, o, s);
WidgetUtils.DrawSprite(terrainSprite, o, s);
WidgetUtils.DrawSprite(actorSprite, o, s);
if (shroud != null)
rsr.DrawSprite(shroudSprite, o, s);
WidgetUtils.DrawSprite(shroudSprite, o, s);
// Draw viewport rect
if (hasRadar)

View File

@@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Widgets
var x = (b.Left + b.Right - indicator.Size.X) / 2;
var y = float2.Lerp(b.Bottom, b.Top, usedFrac) - indicator.Size.Y / 2;
Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
WidgetUtils.DrawSprite(indicator, new float2(x, y));
}
else
{
@@ -100,7 +100,7 @@ namespace OpenRA.Mods.Common.Widgets
var x = float2.Lerp(b.Left, b.Right, usedFrac) - indicator.Size.X / 2;
var y = (b.Bottom + b.Top - indicator.Size.Y) / 2;
Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
WidgetUtils.DrawSprite(indicator, new float2(x, y));
}
}
}

View File

@@ -210,11 +210,11 @@ namespace OpenRA.Mods.Common.Widgets
var downOffset = !downPressed || downDisabled ? 4 : 4 + ButtonDepth;
var upArrowImage = getUpArrowImage.Update((upDisabled, upPressed, upHover, false));
WidgetUtils.DrawRGBA(upArrowImage,
WidgetUtils.DrawSprite(upArrowImage,
new float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
var downArrowImage = getDownArrowImage.Update((downDisabled, downPressed, downHover, false));
WidgetUtils.DrawRGBA(downArrowImage,
WidgetUtils.DrawSprite(downArrowImage,
new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));
}

View File

@@ -132,7 +132,7 @@ namespace OpenRA.Mods.Common.Widgets
trackOrigin + (i * (trackRect.Width - (int)tick.Size.X) / (Ticks - 1)) - tick.Size.X / 2,
trackRect.Bottom);
WidgetUtils.DrawRGBA(tick, tickPos);
WidgetUtils.DrawSprite(tick, tickPos);
}
// Track

View File

@@ -47,12 +47,12 @@ namespace OpenRA.Mods.Common.Widgets
foreach (var a in svc.AllPoints)
{
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(rb.Left + curX, rb.Top));
WidgetUtils.DrawSprite(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(rb.Left + curX, rb.Top));
if (world.LocalPlayer != null && a.Owner.RelationshipWith(world.LocalPlayer) == PlayerRelationship.Ally)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(rb.Left + curX, rb.Top));
WidgetUtils.DrawSprite(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(rb.Left + curX, rb.Top));
else if (!a.Owner.NonCombatant)
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(rb.Left + curX, rb.Top));
WidgetUtils.DrawSprite(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(rb.Left + curX, rb.Top));
curX += 32;
}

View File

@@ -202,7 +202,7 @@ namespace OpenRA.Mods.Common.Widgets
Game.Renderer.EnableAntialiasingFilter();
foreach (var p in icons.Values)
{
WidgetUtils.DrawSHPCentered(p.Sprite, p.Pos + iconOffset, p.Palette);
WidgetUtils.DrawSpriteCentered(p.Sprite, p.Palette, p.Pos + iconOffset);
// Charge progress
var sp = p.Power;
@@ -211,7 +211,7 @@ namespace OpenRA.Mods.Common.Widgets
* (clock.CurrentSequence.Length - 1) / sp.TotalTicks);
clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, p.Pos + iconOffset, p.IconClockPalette);
WidgetUtils.DrawSpriteCentered(clock.Image, p.IconClockPalette, p.Pos + iconOffset);
}
Game.Renderer.DisableAntialiasingFilter();

View File

@@ -118,10 +118,7 @@ namespace OpenRA.Mods.Common.Widgets
Log.Write("perf", "VqaPlayer : {0} skipped {1} frames at position {2}", cachedVideo, skippedFrames, video.CurrentFrame);
}
Game.Renderer.RgbaSpriteRenderer.DrawSprite(
videoSprite,
videoOrigin,
videoSize);
WidgetUtils.DrawSprite(videoSprite, videoOrigin, videoSize);
if (DrawOverlay)
{
@@ -161,7 +158,7 @@ namespace OpenRA.Mods.Common.Widgets
overlayScale = scale;
}
Game.Renderer.RgbaSpriteRenderer.DrawSprite(overlaySprite, overlayOrigin, overlaySize);
WidgetUtils.DrawSprite(overlaySprite, overlayOrigin, overlaySize);
}
}

View File

@@ -41,17 +41,22 @@ namespace OpenRA.Mods.Common.Widgets
});
}
public static void DrawRGBA(Sprite s, float2 pos)
public static void DrawSprite(Sprite s, float2 pos)
{
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s, pos);
}
public static void DrawSHPCentered(Sprite s, float2 pos, PaletteReference p)
public static void DrawSprite(Sprite s, float2 pos, Size size)
{
Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * s.Size, p);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s, pos, new float2(size));
}
public static void DrawSHPCentered(Sprite s, float2 pos, PaletteReference p, float scale)
public static void DrawSprite(Sprite s, float2 pos, float2 size)
{
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s, pos, size);
}
public static void DrawSpriteCentered(Sprite s, PaletteReference p, float2 pos, float scale = 1f)
{
Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * scale * s.Size, p, scale * s.Size);
}
@@ -83,7 +88,7 @@ namespace OpenRA.Mods.Common.Widgets
ss = new Sprite(s.Sheet, rr, s.Channel, scale);
}
DrawRGBA(ss, new float2(x, y));
DrawSprite(ss, new float2(x, y));
}
}
}
@@ -165,19 +170,19 @@ namespace OpenRA.Mods.Common.Widgets
// Top-left corner
if (sprites[0] != null)
DrawRGBA(sprites[0], new float2(bounds.Left, bounds.Top));
DrawSprite(sprites[0], new float2(bounds.Left, bounds.Top));
// Top-right corner
if (sprites[2] != null)
DrawRGBA(sprites[2], new float2(bounds.Right - sprites[2].Size.X, bounds.Top));
DrawSprite(sprites[2], new float2(bounds.Right - sprites[2].Size.X, bounds.Top));
// Bottom-left corner
if (sprites[6] != null)
DrawRGBA(sprites[6], new float2(bounds.Left, bounds.Bottom - sprites[6].Size.Y));
DrawSprite(sprites[6], new float2(bounds.Left, bounds.Bottom - sprites[6].Size.Y));
// Bottom-right corner
if (sprites[8] != null)
DrawRGBA(sprites[8], new float2(bounds.Right - sprites[8].Size.X, bounds.Bottom - sprites[8].Size.Y));
DrawSprite(sprites[8], new float2(bounds.Right - sprites[8].Size.X, bounds.Bottom - sprites[8].Size.Y));
}
public static string FormatTime(int ticks, int timestep)