diff -r f3749624973173fd8d694da660e0433ed7c26e50 -r 08bf2cedf0798c62217888da9eb7f32beb451d11 README --- a/README Thu Nov 27 22:42:06 2014 -0600 +++ b/README Fri Nov 28 19:16:37 2014 -0600 @@ -31,16 +31,17 @@ Official versions can be downloaded here: - http://code.google.com/p/axiosengine/downloads/list + https://srchub.org/p/axiosengine/downloads/ Of course you can always build from source from: - http://code.google.com/p/axiosengine/source/checkout + https://srchub.org/hg/axiosengine Authors ------- General questions/comments/concerns can be directed at: + Nathan Adams - adamsna[at]datanethost.net Contributors: @@ -65,4 +66,7 @@ http://xnacc.codeplex.com/ -Portions of this product are (C) 2009-2011 JRTwine Software, LLC \ No newline at end of file +Portions of this product are (C) 2009-2011 JRTwine Software, LLC + +Prompt Factory - By Blaze Phoenix +http://stackoverflow.com/a/17260476/195722 diff -r f3749624973173fd8d694da660e0433ed7c26e50 -r 08bf2cedf0798c62217888da9eb7f32beb451d11 axios/Axios_Windows.csproj --- a/axios/Axios_Windows.csproj Thu Nov 27 22:42:06 2014 -0600 +++ b/axios/Axios_Windows.csproj Fri Nov 28 19:16:37 2014 -0600 @@ -249,6 +249,7 @@ + diff -r f3749624973173fd8d694da660e0433ed7c26e50 -r 08bf2cedf0798c62217888da9eb7f32beb451d11 axios/Factories/Prompt.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/axios/Factories/Prompt.cs Fri Nov 28 19:16:37 2014 -0600 @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace Axios.Factories +{ + public static class Prompt + { + // Copied from http://stackoverflow.com/a/17260476/195722 + // Written by Blaze Phoenix + /// + /// Creates a rounded rectangle + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Texture2D CreateRoundedRectangleTexture(this GraphicsDevice graphics, int width, int height, int borderThickness, int borderRadius, int borderShadow, List backgroundColors, List borderColors, float initialShadowIntensity, float finalShadowIntensity) + { + if (backgroundColors == null || backgroundColors.Count == 0) throw new ArgumentException("Must define at least one background color (up to four)."); + if (borderColors == null || borderColors.Count == 0) throw new ArgumentException("Must define at least one border color (up to three)."); + if (borderRadius < 1) throw new ArgumentException("Must define a border radius (rounds off edges)."); + if (borderThickness < 1) throw new ArgumentException("Must define border thikness."); + if (borderThickness + borderRadius > height / 2 || borderThickness + borderRadius > width / 2) throw new ArgumentException("Border will be too thick and/or rounded to fit on the texture."); + if (borderShadow > borderRadius) throw new ArgumentException("Border shadow must be lesser in magnitude than the border radius (suggeted: shadow <= 0.25 * radius)."); + + Texture2D texture = new Texture2D(graphics, width, height, false, SurfaceFormat.Color); + Color[] color = new Color[width * height]; + + for (int x = 0; x < texture.Width; x++) + { + for (int y = 0; y < texture.Height; y++) + { + switch (backgroundColors.Count) + { + case 4: + Color leftColor0 = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)y / (width - 1))); + Color rightColor0 = Color.Lerp(backgroundColors[2], backgroundColors[3], ((float)y / (height - 1))); + color[x + width * y] = Color.Lerp(leftColor0, rightColor0, ((float)x / (width - 1))); + break; + case 3: + Color leftColor1 = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)y / (width - 1))); + Color rightColor1 = Color.Lerp(backgroundColors[1], backgroundColors[2], ((float)y / (height - 1))); + color[x + width * y] = Color.Lerp(leftColor1, rightColor1, ((float)x / (width - 1))); + break; + case 2: + color[x + width * y] = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)x / (width - 1))); + break; + default: + color[x + width * y] = backgroundColors[0]; + break; + } + + color[x + width * y] = ColorBorder(x, y, width, height, borderThickness, borderRadius, borderShadow, color[x + width * y], borderColors, initialShadowIntensity, finalShadowIntensity); + } + } + + texture.SetData(color); + return texture; + } + + private static Color ColorBorder(int x, int y, int width, int height, int borderThickness, int borderRadius, int borderShadow, Color initialColor, List borderColors, float initialShadowIntensity, float finalShadowIntensity) + { + Rectangle internalRectangle = new Rectangle((borderThickness + borderRadius), (borderThickness + borderRadius), width - 2 * (borderThickness + borderRadius), height - 2 * (borderThickness + borderRadius)); + + if (internalRectangle.Contains(x, y)) return initialColor; + + Vector2 origin = Vector2.Zero; + Vector2 point = new Vector2(x, y); + + if (x < borderThickness + borderRadius) + { + if (y < borderRadius + borderThickness) + origin = new Vector2(borderRadius + borderThickness, borderRadius + borderThickness); + else if (y > height - (borderRadius + borderThickness)) + origin = new Vector2(borderRadius + borderThickness, height - (borderRadius + borderThickness)); + else + origin = new Vector2(borderRadius + borderThickness, y); + } + else if (x > width - (borderRadius + borderThickness)) + { + if (y < borderRadius + borderThickness) + origin = new Vector2(width - (borderRadius + borderThickness), borderRadius + borderThickness); + else if (y > height - (borderRadius + borderThickness)) + origin = new Vector2(width - (borderRadius + borderThickness), height - (borderRadius + borderThickness)); + else + origin = new Vector2(width - (borderRadius + borderThickness), y); + } + else + { + if (y < borderRadius + borderThickness) + origin = new Vector2(x, borderRadius + borderThickness); + else if (y > height - (borderRadius + borderThickness)) + origin = new Vector2(x, height - (borderRadius + borderThickness)); + } + + if (!origin.Equals(Vector2.Zero)) + { + float distance = Vector2.Distance(point, origin); + + if (distance > borderRadius + borderThickness + 1) + { + return Color.Transparent; + } + else if (distance > borderRadius + 1) + { + if (borderColors.Count > 2) + { + float modNum = distance - borderRadius; + + if (modNum < borderThickness / 2) + { + return Color.Lerp(borderColors[2], borderColors[1], (float)((modNum) / (borderThickness / 2.0))); + } + else + { + return Color.Lerp(borderColors[1], borderColors[0], (float)((modNum - (borderThickness / 2.0)) / (borderThickness / 2.0))); + } + } + + + if (borderColors.Count > 0) + return borderColors[0]; + } + else if (distance > borderRadius - borderShadow + 1) + { + float mod = (distance - (borderRadius - borderShadow)) / borderShadow; + float shadowDiff = initialShadowIntensity - finalShadowIntensity; + return DarkenColor(initialColor, ((shadowDiff * mod) + finalShadowIntensity)); + } + } + + return initialColor; + } + + private static Color DarkenColor(Color color, float shadowIntensity) + { + return Color.Lerp(color, Color.Black, shadowIntensity); + } + } +}