mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Fix support for alpha colors
This commit is contained in:
@@ -3,10 +3,14 @@ package forge;
|
|||||||
import com.badlogic.gdx.Screen;
|
import com.badlogic.gdx.Screen;
|
||||||
|
|
||||||
import forge.Forge.Graphics;
|
import forge.Forge.Graphics;
|
||||||
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinImage;
|
import forge.assets.FSkinImage;
|
||||||
|
import forge.assets.FSkinColor.Colors;
|
||||||
import forge.toolbox.FDisplayObject;
|
import forge.toolbox.FDisplayObject;
|
||||||
|
|
||||||
public abstract class FScreen extends FDisplayObject implements Screen {
|
public abstract class FScreen extends FDisplayObject implements Screen {
|
||||||
|
private static final FSkinColor clrTheme = FSkinColor.get(Colors.CLR_THEME);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void resize(int width, int height) {
|
public final void resize(int width, int height) {
|
||||||
setBounds(0, 0, width, height);
|
setBounds(0, 0, width, height);
|
||||||
@@ -26,6 +30,7 @@ public abstract class FScreen extends FDisplayObject implements Screen {
|
|||||||
|
|
||||||
protected void drawBackground(Graphics g) {
|
protected void drawBackground(Graphics g) {
|
||||||
g.drawImage(FSkinImage.BG_TEXTURE, 0, 0, getWidth(), getHeight());
|
g.drawImage(FSkinImage.BG_TEXTURE, 0, 0, getWidth(), getHeight());
|
||||||
|
g.fillRect(clrTheme, 0, 0, getWidth(), getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,11 +4,15 @@ import java.util.Stack;
|
|||||||
|
|
||||||
import com.badlogic.gdx.Game;
|
import com.badlogic.gdx.Game;
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.graphics.GL10;
|
import com.badlogic.gdx.graphics.GL10;
|
||||||
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
|
||||||
|
|
||||||
import forge.assets.FSkin;
|
import forge.assets.FSkin;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
@@ -20,6 +24,7 @@ public class Forge extends Game {
|
|||||||
private static Forge game;
|
private static Forge game;
|
||||||
private static int screenHeight;
|
private static int screenHeight;
|
||||||
private static SpriteBatch batch;
|
private static SpriteBatch batch;
|
||||||
|
private static ShapeRenderer shapeRenderer;
|
||||||
private static final Stack<FScreen> screens = new Stack<FScreen>();
|
private static final Stack<FScreen> screens = new Stack<FScreen>();
|
||||||
|
|
||||||
public Forge() {
|
public Forge() {
|
||||||
@@ -32,7 +37,8 @@ public class Forge extends Game {
|
|||||||
@Override
|
@Override
|
||||||
public void create() {
|
public void create() {
|
||||||
batch = new SpriteBatch();
|
batch = new SpriteBatch();
|
||||||
//Gdx.graphics.setContinuousRendering(false); //save power consumption by disabling continuous rendering
|
shapeRenderer = new ShapeRenderer();
|
||||||
|
Gdx.graphics.setContinuousRendering(false); //save power consumption by disabling continuous rendering
|
||||||
|
|
||||||
FSkin.loadLight("journeyman", true);
|
FSkin.loadLight("journeyman", true);
|
||||||
FSkin.loadFull(true);
|
FSkin.loadFull(true);
|
||||||
@@ -69,6 +75,7 @@ public class Forge extends Game {
|
|||||||
public void dispose () {
|
public void dispose () {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
batch.dispose();
|
batch.dispose();
|
||||||
|
shapeRenderer.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Graphics {
|
public static class Graphics {
|
||||||
@@ -84,6 +91,23 @@ public class Forge extends Game {
|
|||||||
offsetY = g.offsetY + y;
|
offsetY = g.offsetY + y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void fillRect(FSkinColor skinColor, float x, float y, float w, float h) {
|
||||||
|
fillRect(skinColor.getColor(), x, y, w, h);
|
||||||
|
}
|
||||||
|
public void fillRect(Color color, float x, float y, float w, float h) {
|
||||||
|
batch.end(); //must pause batch while rendering shapes
|
||||||
|
|
||||||
|
if (color.a != 0) { //enable blending so alpha colored shapes work properly
|
||||||
|
Gdx.gl.glEnable(GL20.GL_BLEND);
|
||||||
|
}
|
||||||
|
shapeRenderer.begin(ShapeType.Filled);
|
||||||
|
shapeRenderer.setColor(color);
|
||||||
|
shapeRenderer.rect(x, y, w, h);
|
||||||
|
shapeRenderer.end();
|
||||||
|
|
||||||
|
batch.begin();
|
||||||
|
}
|
||||||
|
|
||||||
public void drawImage(FSkinImage image, float x, float y) {
|
public void drawImage(FSkinImage image, float x, float y) {
|
||||||
drawImage(FSkin.getImages().get(image), x, y);
|
drawImage(FSkin.getImages().get(image), x, y);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,6 @@ public class FSkin {
|
|||||||
avatars.clear();
|
avatars.clear();
|
||||||
|
|
||||||
final Map<String, Texture> textures = new HashMap<String, Texture>();
|
final Map<String, Texture> textures = new HashMap<String, Texture>();
|
||||||
final Map<String, Pixmap> pixmaps = new HashMap<String, Pixmap>();
|
|
||||||
|
|
||||||
//FView.SINGLETON_INSTANCE.setSplashProgessBarMessage("Processing image sprites: ", 5);
|
//FView.SINGLETON_INSTANCE.setSplashProgessBarMessage("Processing image sprites: ", 5);
|
||||||
|
|
||||||
@@ -144,11 +143,9 @@ public class FSkin {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
textures.put(f1.path(), new Texture(f1));
|
textures.put(f1.path(), new Texture(f1));
|
||||||
Pixmap preferredIcons = new Pixmap(f1);
|
|
||||||
pixmaps.put(f1.path(), preferredIcons);
|
|
||||||
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
textures.put(f2.path(), new Texture(f2));
|
textures.put(f2.path(), new Texture(f2));
|
||||||
pixmaps.put(f2.path(), new Pixmap(f2));
|
Pixmap preferredIcons = new Pixmap(f2);
|
||||||
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
textures.put(f3.path(), new Texture(f3));
|
textures.put(f3.path(), new Texture(f3));
|
||||||
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
@@ -168,7 +165,7 @@ public class FSkin {
|
|||||||
//add images besides splash background
|
//add images besides splash background
|
||||||
for (FSkinImage image : FSkinImage.values()) {
|
for (FSkinImage image : FSkinImage.values()) {
|
||||||
if (image != FSkinImage.BG_SPLASH) {
|
if (image != FSkinImage.BG_SPLASH) {
|
||||||
TextureRegion textureRegion = loadTextureRegion(image, textures, pixmaps);
|
TextureRegion textureRegion = loadTextureRegion(image, textures, preferredIcons);
|
||||||
if (textureRegion != null) {
|
if (textureRegion != null) {
|
||||||
images.put(image, textureRegion);
|
images.put(image, textureRegion);
|
||||||
}
|
}
|
||||||
@@ -214,9 +211,7 @@ public class FSkin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Pixmap pixmap : pixmaps.values()) {
|
preferredIcons.dispose();
|
||||||
pixmap.dispose();
|
|
||||||
}
|
|
||||||
pxDefaultAvatars.dispose();
|
pxDefaultAvatars.dispose();
|
||||||
|
|
||||||
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
//FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p);
|
||||||
@@ -277,8 +272,9 @@ public class FSkin {
|
|||||||
addEncodingSymbol("T", GameplayImages.IMG_TAP);*/
|
addEncodingSymbol("T", GameplayImages.IMG_TAP);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TextureRegion loadTextureRegion(FSkinImage image, Map<String, Texture> textures, Map<String, Pixmap> pixmaps) {
|
private static TextureRegion loadTextureRegion(FSkinImage image, Map<String, Texture> textures, Pixmap preferredIcons) {
|
||||||
String filename = image.getSourceFile().getFilename();
|
SourceFile sourceFile = image.getSourceFile();
|
||||||
|
String filename = sourceFile.getFilename();
|
||||||
String preferredFile = preferredDir + filename;
|
String preferredFile = preferredDir + filename;
|
||||||
Texture texture = textures.get(preferredFile);
|
Texture texture = textures.get(preferredFile);
|
||||||
if (texture == null) {
|
if (texture == null) {
|
||||||
@@ -301,8 +297,7 @@ public class FSkin {
|
|||||||
int w0 = image.getWidth(fullWidth);
|
int w0 = image.getWidth(fullWidth);
|
||||||
int h0 = image.getHeight(fullHeight);
|
int h0 = image.getHeight(fullHeight);
|
||||||
|
|
||||||
Pixmap pixmap = pixmaps.get(preferredFile);
|
if (sourceFile != SourceFile.ICONS) { //just return region for preferred file if not icons file
|
||||||
if (pixmap == null) { //return region for preferred file if no pixmap
|
|
||||||
return new TextureRegion(texture, x0, y0, w0, h0);
|
return new TextureRegion(texture, x0, y0, w0, h0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -317,24 +312,24 @@ public class FSkin {
|
|||||||
// Center
|
// Center
|
||||||
x = (x0 + w0 / 2);
|
x = (x0 + w0 / 2);
|
||||||
y = (y0 + h0 / 2);
|
y = (y0 + h0 / 2);
|
||||||
c = new Color(pixmap.getPixel(x, y));
|
c = new Color(preferredIcons.getPixel(x, y));
|
||||||
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
||||||
|
|
||||||
x += 2;
|
x += 2;
|
||||||
y += 2;
|
y += 2;
|
||||||
c = new Color(pixmap.getPixel(x, y));
|
c = new Color(preferredIcons.getPixel(x, y));
|
||||||
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
||||||
|
|
||||||
x -= 4;
|
x -= 4;
|
||||||
c = new Color(pixmap.getPixel(x, y));
|
c = new Color(preferredIcons.getPixel(x, y));
|
||||||
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
||||||
|
|
||||||
y -= 4;
|
y -= 4;
|
||||||
c = new Color(pixmap.getPixel(x, y));
|
c = new Color(preferredIcons.getPixel(x, y));
|
||||||
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
||||||
|
|
||||||
x += 4;
|
x += 4;
|
||||||
c = new Color(pixmap.getPixel(x, y));
|
c = new Color(preferredIcons.getPixel(x, y));
|
||||||
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
if (c.a != 0) { return new TextureRegion(texture, x0, y0, w0, h0); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class FSkinColor {
|
|||||||
private final int brightnessDelta;
|
private final int brightnessDelta;
|
||||||
private final int step;
|
private final int step;
|
||||||
private final int contrastStep;
|
private final int contrastStep;
|
||||||
private final int alpha;
|
private final float alpha;
|
||||||
protected Color color;
|
protected Color color;
|
||||||
|
|
||||||
public Color getColor() { return color; }
|
public Color getColor() { return color; }
|
||||||
@@ -67,7 +67,7 @@ public class FSkinColor {
|
|||||||
private FSkinColor(Colors baseColor0) {
|
private FSkinColor(Colors baseColor0) {
|
||||||
this(baseColor0, NO_BRIGHTNESS_DELTA, NO_STEP, NO_STEP, NO_ALPHA);
|
this(baseColor0, NO_BRIGHTNESS_DELTA, NO_STEP, NO_STEP, NO_ALPHA);
|
||||||
}
|
}
|
||||||
private FSkinColor(Colors baseColor0, int brightnessDelta0, int step0, int contrastStep0, int alpha0) {
|
private FSkinColor(Colors baseColor0, int brightnessDelta0, int step0, int contrastStep0, float alpha0) {
|
||||||
this.baseColor = baseColor0;
|
this.baseColor = baseColor0;
|
||||||
this.brightnessDelta = brightnessDelta0;
|
this.brightnessDelta = brightnessDelta0;
|
||||||
this.step = step0;
|
this.step = step0;
|
||||||
@@ -76,7 +76,7 @@ public class FSkinColor {
|
|||||||
this.updateColor();
|
this.updateColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
private FSkinColor getDerivedColor(int brightnessDelta0, int step0, int contrastStep0, int alpha0) {
|
private FSkinColor getDerivedColor(int brightnessDelta0, int step0, int contrastStep0, float alpha0) {
|
||||||
String key = this.baseColor.name() + "|" + brightnessDelta0 + "|" + step0 + "|" + contrastStep0 + "|" + alpha0;
|
String key = this.baseColor.name() + "|" + brightnessDelta0 + "|" + step0 + "|" + contrastStep0 + "|" + alpha0;
|
||||||
FSkinColor derivedColor = derivedColors.get(key);
|
FSkinColor derivedColor = derivedColors.get(key);
|
||||||
if (derivedColor == null) {
|
if (derivedColor == null) {
|
||||||
@@ -112,7 +112,7 @@ public class FSkinColor {
|
|||||||
return getContrastColor(255);
|
return getContrastColor(255);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FSkinColor alphaColor(int alpha0) {
|
public FSkinColor alphaColor(float alpha0) {
|
||||||
return getDerivedColor(this.brightnessDelta, this.step, this.contrastStep, alpha0);
|
return getDerivedColor(this.brightnessDelta, this.step, this.contrastStep, alpha0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,9 +150,9 @@ public class FSkinColor {
|
|||||||
* @return {@link java.awt.Color}
|
* @return {@link java.awt.Color}
|
||||||
*/
|
*/
|
||||||
public static Color stepColor(Color clr0, int step) {
|
public static Color stepColor(Color clr0, int step) {
|
||||||
float r = clr0.r;
|
float r = clr0.r * 255;
|
||||||
float g = clr0.g;
|
float g = clr0.g * 255;
|
||||||
float b = clr0.b;
|
float b = clr0.b * 255;
|
||||||
|
|
||||||
// Darker
|
// Darker
|
||||||
if (step < 0) {
|
if (step < 0) {
|
||||||
@@ -166,17 +166,14 @@ public class FSkinColor {
|
|||||||
b = ((b + step < 255) ? b + step : 255);
|
b = ((b + step < 255) ? b + step : 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Color(r, g, b, 0);
|
return new Color(r / 255, g / 255, b / 255, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns RGB components of a color, with a new
|
/**
|
||||||
* value for alpha. 0 = transparent, 255 = opaque.
|
* Returns RGB components of a color, with a new
|
||||||
*
|
* value for alpha. 0f = transparent, 1f = opaque.
|
||||||
* @param clr0 {@link java.awt.Color}
|
|
||||||
* @param alpha int
|
|
||||||
* @return {@link java.awt.Color}
|
|
||||||
*/
|
*/
|
||||||
public static Color alphaColor(Color clr0, int alpha) {
|
public static Color alphaColor(Color clr0, float alpha) {
|
||||||
return new Color(clr0.r, clr0.g, clr0.b, alpha);
|
return new Color(clr0.r, clr0.g, clr0.b, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,11 +181,11 @@ public class FSkinColor {
|
|||||||
* @see http://www.nbdtech.com/Blog/archive/2008/04/27/Calculating-the-Perceived-Brightness-of-a-Color.aspx
|
* @see http://www.nbdtech.com/Blog/archive/2008/04/27/Calculating-the-Perceived-Brightness-of-a-Color.aspx
|
||||||
*/
|
*/
|
||||||
public static boolean isColorBright(Color c) {
|
public static boolean isColorBright(Color c) {
|
||||||
int v = (int)Math.sqrt(
|
double v = Math.sqrt(
|
||||||
c.r * c.r * 0.241 +
|
c.r * c.r * 0.241 +
|
||||||
c.g * c.g * 0.691 +
|
c.g * c.g * 0.691 +
|
||||||
c.b * c.b * 0.068);
|
c.b * c.b * 0.068);
|
||||||
return v >= 130;
|
return v > 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Color getHighContrastColor(Color c) {
|
public static Color getHighContrastColor(Color c) {
|
||||||
|
|||||||
Reference in New Issue
Block a user