diff --git a/OpenRA.Game/Widgets/SpecialPowerBinWidget.cs b/OpenRA.Game/Widgets/SpecialPowerBinWidget.cs index da7541c690..81725ef807 100644 --- a/OpenRA.Game/Widgets/SpecialPowerBinWidget.cs +++ b/OpenRA.Game/Widgets/SpecialPowerBinWidget.cs @@ -116,9 +116,16 @@ namespace OpenRA.Widgets if (sp.Info.LongDesc != null) br += Game.chrome.renderer.RegularFont.Measure(sp.Info.LongDesc.Replace("\\n", "\n")); else - br += new int2(300,0); - - WidgetUtils.DrawRightTooltip("dialog4", tl, m, br); + br += new int2(300,0); + + var border = WidgetUtils.GetBorderSizes("dialog4"); + + WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(tl.X, tl.Y, m.X + border[3], m.Y), + PanelSides.Left | PanelSides.Top | PanelSides.Bottom); + WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X - border[2], tl.Y, br.X, m.Y + border[1]), + PanelSides.Top | PanelSides.Right); + WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X, m.Y - border[1], br.X, br.Y), + PanelSides.Left | PanelSides.Right | PanelSides.Bottom); pos += new int2(77, 5); Game.chrome.renderer.BoldFont.DrawText(sp.Info.Description, pos, Color.White); diff --git a/OpenRA.Game/Widgets/WidgetUtils.cs b/OpenRA.Game/Widgets/WidgetUtils.cs index 035aa618bd..e21ad2c889 100644 --- a/OpenRA.Game/Widgets/WidgetUtils.cs +++ b/OpenRA.Game/Widgets/WidgetUtils.cs @@ -70,90 +70,6 @@ namespace OpenRA.Widgets var ss = images.Select(i => ChromeProvider.GetImage(Game.chrome.renderer, "dialog4", i)).ToArray(); return new[] { (int)ss[0].size.Y, (int)ss[1].size.Y, (int)ss[2].size.X, (int)ss[3].size.X }; } - - // todo: write this in terms of 3 DrawPanelPartial calls - public static void DrawRightTooltip(string collection, int2 tl, int2 m, int2 br) - { - var images = new[] { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background"}; - var ss = images.Select(i => ChromeProvider.GetImage(Game.chrome.renderer, collection, i)).ToArray(); - - // Draw the background for the left part - FillRectWithSprite(new Rectangle(tl.X + (int)ss[2].size.X, - tl.Y + (int)ss[0].size.Y, - m.X + (int)ss[2].size.X - tl.X - (int)ss[2].size.X, - m.Y - (int)ss[1].size.Y - tl.Y - (int)ss[0].size.Y), - ss[8]); - - // Background for the right part - FillRectWithSprite(new Rectangle(m.X + (int)ss[2].size.X, - tl.Y + (int)ss[0].size.Y, - br.X - (int)ss[3].size.X - m.X - (int)ss[2].size.X, - br.Y - (int)ss[1].size.Y - tl.Y - (int)ss[0].size.Y), - ss[8]); - - // Patch the hole - FillRectWithSprite(new Rectangle(m.X, - m.Y-(int)ss[1].size.Y, - (int)ss[2].size.X, - (int)ss[1].size.Y - 1), - ss[8]); - - // Top border - FillRectWithSprite(new Rectangle(tl.X + (int)ss[2].size.X, - tl.Y, - br.X - (int)ss[3].size.X - tl.X - (int)ss[2].size.X, - (int)ss[0].size.Y), - ss[0]); - - // Right border - FillRectWithSprite(new Rectangle(br.X - (int)ss[3].size.X, - tl.Y + (int)ss[0].size.Y, - (int)ss[3].size.X, - br.Y - (int)ss[1].size.Y - tl.Y - (int)ss[0].size.Y), - ss[3]); - - // Bottom border - FillRectWithSprite(new Rectangle(m.X + (int)ss[2].size.X, - br.Y - (int)ss[1].size.Y, - br.X - (int)ss[3].size.X - m.X - (int)ss[2].size.X, - (int)ss[1].size.Y), - ss[1]); - // Left border - FillRectWithSprite(new Rectangle(tl.X, - tl.Y + (int)ss[0].size.Y, - (int)ss[2].size.X, - m.Y - (int)ss[1].size.Y - tl.Y - (int)ss[0].size.Y), - ss[2]); - - // Left-bottom border - FillRectWithSprite(new Rectangle(tl.X + (int)ss[2].size.X, - m.Y - (int)ss[1].size.Y, - m.X - (int)ss[2].size.X - tl.X, - (int)ss[1].size.Y), - ss[1]); - - // Bottom-left border - FillRectWithSprite(new Rectangle(m.X, - m.Y - 1, - (int)ss[2].size.X, - br.Y - (int)ss[1].size.Y - m.Y + 1), - ss[2]); - - // TL corner - DrawRGBA(ss[4], new float2(tl.X,tl.Y)); - - // TR corner - DrawRGBA(ss[5], new float2(br.X- (int)ss[3].size.X,tl.Y)); - - // LBL corner - DrawRGBA(ss[6], new float2(tl.X,m.Y - (int)ss[2].size.X)); - - // RBL corner - DrawRGBA(ss[6], new float2(m.X,br.Y - (int)ss[7].size.Y)); - - // BR corner - DrawRGBA(ss[7], new float2(br.X - (int)ss[7].size.X, br.Y - (int)ss[7].size.Y)); - } static bool HasFlags(this PanelSides a, PanelSides b) { return (a & b) == b; } public static Rectangle InflateBy(this Rectangle rect, int l, int t, int r, int b)