
com.badlogic.gdx.tools.flame.TexturePanel Maven / Gradle / Ivy
The newest version!
package com.badlogic.gdx.tools.flame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.glutils.FileTextureData;
import com.badlogic.gdx.utils.Array;
/** @author Inferno */
public class TexturePanel extends ImagePanel {
private Color selectedColor = Color.GREEN, unselectedColor = Color.BLUE, indexBackgroundColor = Color.BLACK,
indexColor = Color.WHITE;
Array selectedRegions;
Array unselectedRegions;
Texture texture;
public TexturePanel () {
selectedRegions = new Array();
unselectedRegions = new Array();
addMouseListener(new MouseAdapter() {
public void mouseClicked (MouseEvent event) {
float x = event.getX(), y = event.getY();
for (TextureRegion region : unselectedRegions) {
if (isInsideRegion(region, x, y)) {
select(region);
return;
}
}
for (TextureRegion region : selectedRegions) {
if (isInsideRegion(region, x, y)) {
unselect(region);
return;
}
}
}
});
}
protected boolean isInsideRegion (TextureRegion region, float x, float y) {
float rx = region.getRegionX(), ry = region.getRegionY();
return rx <= x && x <= rx + region.getRegionWidth() && ry <= y && y <= ry + region.getRegionHeight();
}
public TexturePanel (Texture texture, Array regions) {
this();
setTexture(texture);
setRegions(regions);
}
public void setTexture (Texture texture) {
if (this.texture == texture) return;
this.texture = texture;
FileTextureData data = (FileTextureData)texture.getTextureData();
setImage(data.getFileHandle().file().getAbsolutePath());
}
public Texture getTexture () {
return texture;
}
public void clear () {
selectedRegions.clear();
unselectedRegions.clear();
}
public void clearSelection () {
unselectedRegions.addAll(selectedRegions);
selectedRegions.clear();
repaint();
}
public void setRegions (Array regions) {
unselectedRegions.clear();
selectedRegions.clear();
unselectedRegions.addAll(regions);
}
private void swap (TextureRegion region, Array src, Array dst) {
int index = src.indexOf(region, true);
if (index > -1) {
src.removeIndex(index);
dst.add(region);
repaint();
}
}
public void select (TextureRegion region) {
swap(region, unselectedRegions, selectedRegions);
}
public void unselect (TextureRegion region) {
swap(region, selectedRegions, unselectedRegions);
}
public void selectAll () {
selectedRegions.addAll(unselectedRegions);
unselectedRegions.clear();
repaint();
}
@Override
protected void paintComponent (Graphics g) {
super.paintComponent(g);
draw(g, unselectedRegions, unselectedColor, false);
draw(g, selectedRegions, selectedColor, true);
}
private void draw (Graphics g, Array regions, Color color, boolean drawIndex) {
int i = 0;
for (TextureRegion region : regions) {
int x = region.getRegionX(), y = region.getRegionY(), h = region.getRegionHeight();
if (drawIndex) {
String indexString = "" + i;
Rectangle bounds = g.getFontMetrics().getStringBounds(indexString, g).getBounds();
g.setColor(indexBackgroundColor);
g.fillRect(x, y + h - bounds.height, bounds.width, bounds.height);
g.setColor(indexColor);
g.drawString(indexString, x, y + h);
++i;
}
g.setColor(color);
g.drawRect(x, y, region.getRegionWidth(), h);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy