Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/build
/dist
/dfEditor Installer.jar
/izpack/lib
/izpack/*.jar
2 changes: 1 addition & 1 deletion build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@



<copy file="./izpack/dFEditor Installer.jar" todir="./"/>
<copy file="./izpack/dfEditor Installer.jar" todir="./"/>
<!--<copy file="./izpack/dFEditor Installer.jar" todir="../darkfunction.com/files/"/>-->

</target>
Expand Down
1 change: 1 addition & 0 deletions nbproject/private/config.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
platforms.JDK_1.6.home=/usr/lib/jvm/java-8-oracle
69 changes: 69 additions & 0 deletions src/dfEditor/GraphicObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,35 @@ public abstract class GraphicObject extends java.util.Observable
public enum Anchor { TOP_LEFT, CENTRE }

protected Rectangle _rect;
protected String _id;
protected boolean _bResizable;
protected boolean _bSelected;
protected Rectangle _bounds;
protected Rectangle _savedRect;
protected String _description = null;
protected String _savedId;
protected float _angle;
protected float _scale;
protected float _opacity;
protected float _savedAngle;
protected float _savedScale;
protected float _savedOpacity;
protected Anchor _anchor;

public GraphicObject(Rectangle aRect)
{
_id = "";
_angle = 0;
_scale = 100;
_opacity = 255;
_bResizable = false;
_bSelected = false;
setRect(aRect);
saveRect();
saveAngle();
saveScale();
saveOpacity();
saveId();
_anchor = Anchor.TOP_LEFT;

_description = super.toString();
Expand Down Expand Up @@ -89,6 +101,36 @@ public boolean hasMoved()
{
return ! (_savedRect.equals(_rect));
}

public void setScale(float scale)
{
_scale = scale;
}

public float getScale()
{
return _scale;
}

public void setOpacity(float opacity)
{
_opacity = opacity;
}

public float getOpacity()
{
return _opacity;
}

public void setId(String id)
{
_id = id;
}

public String getId()
{
return _id;
}

public void setAngle(float aAngle)
{
Expand Down Expand Up @@ -124,6 +166,18 @@ public void saveAngle()
{
_savedAngle = getAngle();
}

public void saveScale() {
_savedScale = getScale();
}

public void saveOpacity() {
_savedOpacity = getOpacity();
}

public void saveId() {
_savedId = getId();
}

public Rectangle getRect()
{
Expand All @@ -140,6 +194,21 @@ public float getSavedAngle()
return _savedAngle;
}

public float getSavedScale()
{
return _savedScale;
}

public float getSavedOpacity()
{
return _savedOpacity;
}

public String getSavedId()
{
return _savedId;
}

public void moveFromSavedPoint(Point aDist)
{
Rectangle r = getRect();
Expand Down
2 changes: 1 addition & 1 deletion src/dfEditor/GraphicPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ protected void drawGraphicRotated(GraphicObject graphic, Graphics g, Point aOrig

g2d.setTransform(transform);

graphic.draw(g2d, aOrigin, aZoom, aAlpha, _bAllowsEditing);
graphic.draw(g2d, aOrigin, aZoom * graphic.getScale() * 0.01f, aAlpha * (graphic.getOpacity() / 255.0f), _bAllowsEditing);

g2d.setTransform(oldTransform);
}
Expand Down
41 changes: 26 additions & 15 deletions src/dfEditor/PixelPacker.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,19 @@ public class PixelPacker
private class PixelRectPair
{
public Rectangle rect;
public Rectangle padRect;
public int[] pixels;

public PixelRectPair(final int[] aPixels, final Rectangle aRect)
public PixelRectPair(final int[] aPixels, final Rectangle aRect, int padding)
{
rect = aRect;
pixels = aPixels;

padRect = new Rectangle(rect);
padRect.x -= padding;
padRect.y -= padding;
padRect.width += padding * 2;
padRect.height += padding * 2;
}
}

Expand All @@ -63,7 +70,7 @@ public boolean packRects(final Rectangle aMasterRect, final Rectangle[] aSubRect
return bSuccess;
}

public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[] aRects, boolean bPowerOfTwo)
public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[] aRects, boolean bPowerOfTwo, int padding)
{
int[] origPixels = new int[aOrigImage.getWidth(null) * aOrigImage.getHeight(null)];
aOrigImage.getRGB( 0,
Expand Down Expand Up @@ -92,25 +99,25 @@ public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[
}
}

pairs[i] = new PixelRectPair(pixels, r);
pairs[i] = new PixelRectPair(pixels, r, padding);
}

// TODO: sprites totally enclosed by other sprites should remain enclosed
// TODO: multiple images?

// sort by size
for (int i=0; i<pairs.length-1; ++i)
{
for (int i=0; i<pairs.length-1; ++i)
{
double area1 = pairs[i].rect.width * pairs[i].rect.height;
double area2 = pairs[i+1].rect.width * pairs[i+1].rect.height;

if (area1 < area2)
{
PixelRectPair temp = pairs[i];
pairs[i] = pairs[i+1];
pairs[i+1] = temp;
PixelRectPair temp = pairs[i];
pairs[i] = pairs[i+1];
pairs[i+1] = temp;
}
}
}

// do the packing here
// madly inefficient but doesn't seem to matter a flying fuck
Expand All @@ -126,7 +133,7 @@ public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[
rootNode.rect = new Rectangle(0, 0, sizeX, sizeY);
for (int i=0; i<pairs.length; ++i)
{
Node node = rootNode.Insert(pairs[i].rect);
Node node = rootNode.Insert(pairs[i].padRect);
if (node == null)
{
// failed to insert
Expand Down Expand Up @@ -155,8 +162,8 @@ public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[
rootNode.rect = new Rectangle(0, 0, sizeX, sizeY);
for (int i=0; i<pairs.length; ++i)
{
Node node = rootNode.Insert(pairs[i].rect);
copyRect(node.rect, pairs[i].rect); // don't want to swap pointers
Node node = rootNode.Insert(pairs[i].padRect);
copyRect(node.rect, pairs[i].padRect); // don't want to swap pointers
}

// create the new image!
Expand All @@ -167,7 +174,7 @@ public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[
sizeX = sizeY = 0;
for (int i=0; i<pairs.length; ++i)
{
Rectangle r = pairs[i].rect;
Rectangle r = pairs[i].padRect;
if (sizeX < r.x + r.width)
sizeX = r.x + r.width;
if (sizeY < r.y + r.height)
Expand Down Expand Up @@ -201,14 +208,18 @@ public BufferedImage packPixels(final BufferedImage aOrigImage, final Rectangle[
// copy rects to new image
for (int i=0; i<pairs.length; ++i)
{
Rectangle r = pairs[i].rect;
Rectangle pr = pairs[i].padRect;
Rectangle r = pairs[i].rect;
r.x = pr.x + padding;
r.y = pr.y + padding;

int[] pixels = pairs[i].pixels;

for (int y=0; y<r.height; ++y)
{
for (int x=0; x<r.width; ++x)
{
newImagePixels[(r.y+y) * sizeX + (r.x+x)] = pixels[y * r.width + x];
newImagePixels[(pr.y+y+padding) * sizeX + (pr.x+x+padding)] = pixels[y * r.width + x];
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/dfEditor/SpritesheetController.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ private void pack()

String[] choices = {" Power of two ", " Smallest " };

// TODO: a full dialog with options here instead of hard-coding
int choice = JOptionPane.showOptionDialog(
this // Center in window.
, "Would you like the resulting image to use power of two dimensions (eg, 256x512)?" // Message
Expand All @@ -205,9 +206,10 @@ private void pack()
, " " // Default button's label
);

int padding = 2;

PixelPacker packer = new PixelPacker();
BufferedImage newImage = packer.packPixels(viewPanel.getImage(), array, (choice == 0));
BufferedImage newImage = packer.packPixels(viewPanel.getImage(), array, (choice == 0), padding);
viewPanel.setImage(newImage);

bImageModified = true;
Expand Down
Loading