Giter Site home page Giter Site logo

crashinvaders / gdx-texture-packer-gui Goto Github PK

View Code? Open in Web Editor NEW
571.0 23.0 72.0 24.38 MB

A simple way to pack and manage texture atlases for libGDX game framework.

License: Apache License 2.0

Java 97.59% Batchfile 0.02% Shell 0.17% NSIS 0.61% VBScript 0.02% C++ 1.45% CMake 0.09% Dockerfile 0.04%
libgdx texturepacker texture-atlas texture-packing utility

gdx-texture-packer-gui's Introduction

A simple utility to help you pack and manage texture atlases for libGDX game framework. It's mostly just a visual wrapper over libGDX TexturePacker and provides some extra features on top of it.

This project is a successor of Aurelien Ribon's application with the whole new GUI and features.

Using the App

Just download the most recent version of the installer/distribution matching your OS from the releases page and follow the installer instructions. Or simply download the distribution files archive, extract, and read ./readme.txt for further details.

System Requirements

The app works on any major desktop OS (Linux, macOS, Windows), where Java is available.

The requirements are as follows:

  1. Java Runtime Environment (JRE 8.0 and up) should be installed on your system (java command is available from the command-line interface).
  2. OpenGL (2.0 and up) compatible video drivers.

All major changes are listed in this file.

Command Line

The app has a headless batch mode that allows automation.

For example, to pack a specific atlases from the project:

gdx-texture-packer --batch --project "/path/to/project.tpproj" --atlases "atlas_name" "another_atlas_name"

Here's also a tool to compress any PNG/JPEG image to a KTX2/Basis texture.

gdx-texture-packer --basis-pack --container ktx2 --format uastc "/path/to/any.png|jpg"

Learn more about CLI options from the help message:

gdx-texture-packer --help

Backlog

See what features are currently planned on the project's Trello board

Releases

New versions come out as soon as the application gets significant new features or important fixes. You can see all available versions from the releases page.

Contribution and Contact

Any contribution is highly appreciated. You can help either by making a PR or reporting bugs/suggestions by creating new issues. If you have any questions/ideas, and you think they don't fit the standard GitHub issue format, you are always welcome to contact me directly at [email protected]

Also, you can participate in translation. It can be done by translating all the strings in bundle.properties and saving a copy as bundle_XX.properties, where XX is your language code.

gdx-texture-packer-gui's People

Contributors

frosty-j avatar hangman avatar metaphore avatar rubonnek avatar terafog avatar thefacecore avatar tommyettinger avatar zhreimu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gdx-texture-packer-gui's Issues

Unspported files alert

I was trying to import one file in to texture packer by dragging. and it was not importing it in list and was not displaying any alert. so after checking twice i got the problem, the file was SVG.

please add alert for unsupported file types if possible.

Pack input files aren't ordered properly

I have 24 images, all labeled from 0001.png to 0024.png. When I select all of them and open them up, they get ordered correctly in the Pack Files panel. However, when I pack them, the order of the pages is seemingly completely random.

I am not sure if this behaviour is intended. I would have assumed that you were using Alphanumeric sorting for the pictures.

4.4.0 'Use indices' broken

Hi,
I've tried Gdx TexturePacker GUI 4.4.0 on Windows Seven and Mac OS Sierra. On both, 'Use indices' setting doesn't work.
I've tried 4.3.2, same settings, and it works.

Maybe a conflict linked to change from 'input directory' to drag and drop function ?

Ошибка при записи config-файла в каталог с исходными изображениями

Я храню неупакованные изображения в каталоге raw_images, config-файл texturepacker'а для удобства обычно сохраняю там же. В файл записывается такая строка и он загружается неправильно:
input=

Хотелось бы, чтобы в таком случае в config-файл записывалось это:
input=.
а то приходится править вручную

[Crash Report]

Stack trace
com.github.czyzby.lml.util.LmlParsingException: Error occurred during parsing near line 47 of the original file: "main.lml" during parsing template part: "'import' macro result" on line: 9 of its content. Template part is most likely an evaluated macro or argument result, extracted from the original template.
REASON: Container widget can manage only one child.
	Due implementation of the parser, the real problematic line might SLIGHTLY vary from the given line number(s), but exception message should be clear enough to find the actual error.
	Currently parsed template part:
6 |VALID|     <vistable background="paneLockBg" touchable="enabled" visible="true" pad="16">
7 |VALID|         <image style="custom/logo16-bw" size="72" hexcolor="ffffff40"/>
8 |VALID|     </vistable>
9 |ERROR| </shrinkcontainer>

	This template part was most likely evaluated during parsing this original template part (if a macro or an argument ends on this line, its content most likely causes the error): 
44 |VALID|                 <container growy="false" fill="true">
45 |VALID|                     <:titledpane id="titledPaneGlobalSettings" title="@panelTitleGlobalSettings" icon="custom/ic-title-global-settings">
46 |VALID|                         <:import path="lml/paneGlobalSettings.lml"/>
47 |ERROR|                     </:titledpane>
48 |     |                 </container>
49 |     | 
50 |     |                 <container growy="true" fill="true">

	If this is not enough to determine the error, call AbstractLmlParser#setLinesAmountPrintedOnException(int) with a suitable number. If you keep a lot of nested macros and want to see the whole invocation tree, try debugging through parsing and use getTemplateReader().toString() before exception occurs to check all current parsed template layers.
	Note that this exception would not have been thrown if the parser was not strict.
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.throwErrorIfStrict(AbstractLmlParser.java:887)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.throwErrorIfStrict(AbstractLmlParser.java:880)
	at com.github.czyzby.lml.parser.impl.tag.actor.ContainerLmlTag.addChild(ContainerLmlTag.java:38)
	at com.github.czyzby.lml.parser.impl.tag.actor.ContainerLmlTag.handleValidChild(ContainerLmlTag.java:31)
	at com.github.czyzby.lml.parser.impl.tag.AbstractActorLmlTag.handleChild(AbstractActorLmlTag.java:251)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processClosedTag(DefaultLmlParser.java:379)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTagEntity(DefaultLmlParser.java:323)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTag(DefaultLmlParser.java:308)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parse(DefaultLmlParser.java:139)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parseTemplate(DefaultLmlParser.java:100)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.parseTemplate(AbstractLmlParser.java:197)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:232)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue.access$600(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

Adding directories won't work

Adding a directory as input for a pack rather than selecting individual files won't work.

Version: 4.5.0
OS: Ubuntu 16.04 LTS

Steps to reproduce:

  1. Have some .pngs on a folder, say sprites
  2. Create a new pack
  3. Click to "Add input files" and select sprites folder
  4. Click to Pack

This error log will be presented:

Packing is started
[output-red]Exception occurred:[] No images to pack
[output-red]Stack trace:[]
java.lang.IllegalStateException: No images to pack
at com.crashinvaders.texturepackergui.controllers.packing.processors.PackingProcessor.performPacking(PackingProcessor.java:41)
at com.crashinvaders.texturepackergui.controllers.packing.processors.PackingProcessor.processPackage(PackingProcessor.java:31)
at com.crashinvaders.texturepackergui.utils.packprocessing.CompositePackProcessor.processPackage(CompositePackProcessor.java:20)
at com.crashinvaders.texturepackergui.utils.packprocessing.PackProcessingManager$1.run(PackProcessingManager.java:58)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)

PS.: Adding a folder as input for the pack will work fine under Aurelien Ribon's v3.2.0.

I would like to move on from v3.2.0, but selecting each PNG by hand and editing the regions names to match the directory structure is a no go for me.

Hope you will be able to fix this :) By the way the new GUI looks great, congrats!

ExceptionInInitializerError on ubuntu

after run launcher.sh thrown with this exception
what 's wrong?

Version: 4.6.0
OS: Linux 4.15.0-20-generic amd64
JRE: 1.8.0_162 Oracle Corporation
External log file: /home/ali/.gdxtexturepackergui/logs/1804301224.log
Exception in thread "AWT-EventQueue-1" java.lang.ExceptionInInitializerError
at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:558)
at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.initialize(LwjglCanvas.java:125)
at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.(LwjglCanvas.java:74)
at com.crashinvaders.texturepackergui.desktop.launchers.awt.CustomLwjglCanvas.(CustomLwjglCanvas.java:25)
at com.crashinvaders.texturepackergui.desktop.launchers.awt.AwtFrameLauncher$1.run(AwtFrameLauncher.java:46)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at org.GNOME.Accessibility.AtkWrapper$6.dispatchEvent(AtkWrapper.java:715)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.lwjgl.opengl.XRandR.findPrimary(XRandR.java:326)
at org.lwjgl.opengl.XRandR.ScreentoDisplayMode(XRandR.java:315)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:746)
at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:743)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:743)
at org.lwjgl.opengl.Display.(Display.java:138)
... 20 more

Chinese language display issue

Hi, I'm really like this application! I also want to contribute a Chinese(Traditional) language for this, but application seems not using freetype, so It should be very hard to add Chinese as I thought.

I made a Chinese option in application, but show nothing because there is no default supported to Chinese characters, so If gdx-texture-packer-gui would add gdx-freetype in the future, I would back to help for add
some .ttf or .fnt to help it work :)

Chinese Tried Project

PNG-8 quantization support

I'm on Windows 7, running version 4.6.0 installed by the .exe installer for that release. I can compress PNGs using pngtastic, but it yields negligible size differences on the images I'm using because it won't use PNG8 (paletted files) even if the full texture atlas uses less than 256 colors. I tried using the TinyPNG option instead, but it gives what appears to be an authentication error:

Packing is started
Packing.........
Writing 2048x2048: D:\GitHub\WarpWriter\target\out\ProceduralFish1\ProceduralFish.png
Packing is done
Tinify compression started
[text-red]Exception occurred:[] Credentials are invalid (HTTP 401/Unauthorized)
[text-red]Stack trace:[] 
com.tinify.AccountException: Credentials are invalid (HTTP 401/Unauthorized)
	at com.tinify.Exception.create(Exception.java:27)
	at com.tinify.Client.request(Client.java:198)
	at com.tinify.Client.request(Client.java:96)
	at com.tinify.Source.fromBuffer(Source.java:18)
	at com.tinify.Source.fromFile(Source.java:14)
	at com.tinify.Tinify.fromFile(Tinify.java:45)
	at com.crashinvaders.texturepackergui.controllers.TinifyService.compressImageSync(TinifyService.java:73)
	at com.crashinvaders.texturepackergui.controllers.packing.processors.TinifyCompressingProcessor.processPackage(TinifyCompressingProcessor.java:44)
	at com.crashinvaders.texturepackergui.utils.packprocessing.CompositePackProcessor.processPackage(CompositePackProcessor.java:20)
	at com.crashinvaders.texturepackergui.utils.packprocessing.PackProcessingManager$1.run(PackProcessingManager.java:64)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

For reference, here's the atlas images with Pngtastic compression, no compression, and basic "save for web as PNG-8 in Photoshop" modes.
fish_png_pngtastic

fish_png_uncompressed

fish_png_photoshop

There's some minor unrelated issues as well; if you give TexturePacker a directory that doesn't exist, it throws an exception when you try to pack (I'd expect it to create the directory if the path is valid). If you give it a directory that does exist and has files in it produced by a previous run (even if they have numbers appended to the filename, and even when those numbers aren't used by the current pack), it deletes those files when it packs even though it wasn't necessary to delete them.

[Crash Report] Crashing on startup

The app crashes immedaitely on startup and displays the "Error Report" window. It seems to only happen when I'm connected to the internet. When offline, the application opens normally.

Stack trace
com.github.czyzby.lml.util.LmlParsingException: Error occurred during parsing near line 0 of the original file: "null" during parsing template part: "null" on line: 0 of its content. Template part is most likely an evaluated macro or argument result, extracted from the original template.
REASON: Unable to parse passed template due to an unexpected exception.
	Due implementation of the parser, the real problematic line might SLIGHTLY vary from the given line number(s), but exception message should be clear enough to find the actual error.
	Currently parsed template part:

	This template part was most likely evaluated during parsing this original template part (if a macro or an argument ends on this line, its content most likely causes the error): 

	If this is not enough to determine the error, call AbstractLmlParser#setLinesAmountPrintedOnException(int) with a suitable number. If you keep a lot of nested macros and want to see the whole invocation tree, try debugging through parsing and use getTemplateReader().toString() before exception occurs to check all current parsed template layers.
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.throwError(AbstractLmlParser.java:875)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parseTemplate(DefaultLmlParser.java:106)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.parseTemplate(AbstractLmlParser.java:197)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:232)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processRegularTag(DefaultLmlParser.java:537)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTagEntity(DefaultLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTag(DefaultLmlParser.java:308)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parse(DefaultLmlParser.java:139)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parseTemplate(DefaultLmlParser.java:100)
	... 22 more

Shortcut keys do not function while keyboard focus is in text field.

Hello. I finally figured out why I've been losing progress besides the other issue I posted. Keyboard shortcuts like Ctrl+S and Ctrl+O do not function when the keyboard focus is set to a text field.

Reproduction steps:
Click inside the file name text field under "Pack general".
Press Ctrl+O

The open dialog does not appear like usual. Thanks for considering this issue and making the best texture packer in the community!

[Report] just opened app

open app, it crashed
windows 10, i3 550, no gpu, 4GB RAM DDR2

Application log

This issue is related to Java 8 and Windows 10 Intel Drivers.
Rolling back to Java 8u51 works.

Bleeding isn't saved to the project configuration

When saving a project configuration the bleeding value doesn't appear to be saved or loaded from the configuration. This keeps tripping me up as one of my atlases needs it turned off, while the other needs it on. The net effect is I usually forget to turn it of on one when opening the project and have to rebake the texture after I load in the result and realize the mistake.

Encountered on 4.2.0

Atlas Preview Capture Scroll Focus

The Atlas Preview should automatically request scroll focus upon program start or at least whenever the user mouses over the area. I was sitting there for a minute wondering why the zoom wasn't working. It's not obvious that you have to click in the preview area first. Most programs don't operate like that. Thanks for your consideration.

Scaling issue #2

I think there's a system scaling adoption working in the background (lwjgl or scene2D or libgdx viewport) which kind of makes it worse in this case :D

3840*2160, 200% system scaling, 200% texture packer scaling
1

3840*2160, 150% system scaling, 200% texture packer scaling
2

As you can see, the "viewport" the UI uses is messed up. It depends on the system scaling somehow. Most of the UI is visible when i maximize the window.

3840*2160, 200% system scaling, 200% texture packer scaling
3

And if you're wondering what happens with 100% system scaling, here you go:
3840*2160, 100% system scaling, 200% texture packer scaling
4

Create 9patch from png failed

Steps to reproduce:

  • Start gdx texture packer
  • Load png file
  • right-click loaded file
  • select 9patch
  • exception occurs

Apparently I can't use the built in reporting cause I get a URI to long error.

Exclude images in subfolders

Hey there, first of all I really like this GUI Packer. Good job and thanks for your hard work.
It really suits our needs very well. There is just one thing about the exclude function of images. I kind of wonder what the purpose of it is if it is not a bug:
My use case is to exclude some pictures within an input folder or even a subfolder of it. I added an input folder and when I saw the exclude function I intuitively expected it to ... exclude the images listed from the final atlas. However this does not seem to work like this. I wonder if this is a bug because if I dont want images to be packed when adding them one by one...well I just don't add them. Sure it makes de-/activating some images temporarily more easy but in 3 years of game dev I never would have needed that. If they are not needed at all we just remove em all together from the folder. Even if it is just temporarily the effort is minimal. So I think a really huge feature would be to exclude specific images or complete subfolders when using input folders (maybe even regular expressions for name excludes)

To put it more into perspective:
We are using spine and to make workflow more easy I would like to have a "raw" assets folder that the animators can use as root folder in spine and where they can find anything they need for the animations without messing with path hierarchy. However there are some utility images (alignment, canvas, etc.) or icons (Level editor) that are not used ingame but have to be in the hierachy so they can be found within the animation software without messing up the paths inside exported files. I.e when loading animations and levels ingame the paths of spine export file and the atlas have to match. We collect all single images from spine animations instead of using an atlas for each animation. This is to minimize texture swaps which is a great perfomance issue.

It would be nice to hear your thoughts on this.
Greetz X-Ray-Jin

Texture packer does not take 9-Patch content area into account

When creating a 9-Patches for a ProgressBarStyle I noticed that the content area defined in my 9-Patches was not being taken into account.
9-Patch:
patch
content
Generated atlas code:
wrong_code
End result:
wrong

I need to manually add a pad setting into the atlas everytime I pack it:
added
End result:
end

Settings Tooltips

Excellent software. Thank you for making this. Can you include text tooltips that describe each option as the user mouses over them? The descriptions can simply be taken from the wiki here. It would be very helpful for folks that don't know this stuff off the top of their heads. Thanks.

High DPI Support

The UI is pretty small on a 4k screen.
My system scaling is set to 200% - so it should look the same as on 1080p displays.

Allow specification of what page each image goes to.

I have several large images that need to be in the same atlas. I'm fine with it spanning multiple pages. However, for the sake of efficiency, certain images need to appear on the same page to limit texture swaps. This technique works well when your images are drawn in specific layers.
I see no option to do this in Texture Packer GUI. LibGDX's Texture Packer has this option: https://github.com/libgdx/libgdx/wiki/Texture-packer#directory-structure It would be nice to have this feature in some capacity in your fantastic utility.
Where would this option go? I imagine it can go in the properties menu for each item in the Pack files panel. It would take an integer indicating what page it should prefer. Thanks for your consideration.

Prompt to Save Project Upon Exit

It would be nice to be prompted to save changes when exiting the program. Blame it on a lack sleep, but I've been forgetting to save lately. Then I spend time trying to figure just what the hell I did to break my games. Thanks!

Input file does not exist: C:\Users\Me\Downloads\gdx-texturepacker-4.4.0

Hello, I am getting this issue when I try to pack the project.
Thanks for the help :)

Packing is started
[output-red]Exception occurred:[] Input file does not exist: C:\Users\Me\Downloads\gdx-texturepacker-4.4.0
[output-red]Stack trace:[] 
java.lang.IllegalArgumentException: Input file does not exist: C:\Users\Me\Downloads\gdx-texturepacker-4.4.0
	at com.badlogic.gdx.tools.FileProcessor.process(FileProcessor.java:117)
	at com.crashinvaders.texturepackergui.controllers.packing.processors.PackingProcessor.deleteOldFiles(PackingProcessor.java:134)
	at com.crashinvaders.texturepackergui.controllers.packing.processors.PackingProcessor.performPacking(PackingProcessor.java:44)
	at com.crashinvaders.texturepackergui.controllers.packing.processors.PackingProcessor.processPackage(PackingProcessor.java:31)
	at com.crashinvaders.texturepackergui.utils.packprocessing.CompositePackProcessor.processPackage(CompositePackProcessor.java:20)
	at com.crashinvaders.texturepackergui.utils.packprocessing.PackProcessingManager$1.run(PackProcessingManager.java:58)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Makes large images with one to four images per page and rest empty alpha channel

sometimes when packing large amounts of images 100000+ It makes very large 2048 x 2048 images with about zero to four images per page. The rest of the image is empty alpha channel. There are about 8000 to 200000 pages created when it does this. Not sure why it does that. Can it pack images in folders or do I have drag the all of the images manually instead of the folder? Would selecting both use fast algorithm and grid layout do this?

JSON EXPORT

Is it possible to generate a JSON Hash export like Texture Packer commercial product. This will be useful in game engines like Phaser.

[Crash Report] Nine patch

It always crashes when selecting 9-Patch from image properties.

it crashes on every saved project. i didn't tried it with new project. also it worked once in same project. but then it again crashed second time.

also when submitting crash from Texture Packer's prompted dialog, it does not work. Github displays 414 error code. so i had to get stack trace from URL.

Stack trace
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method: com.badlogic.gdx.utils.reflect.Method@2afe1548 of object: com.crashinvaders.texturepackergui.controllers.main.inputfiles.InputFilePropertiesDialogController@4c8cc7ce
	at com.github.czyzby.lml.parser.impl.action.MethodActorConsumer.consume(MethodActorConsumer.java:41)
	at com.github.czyzby.lml.parser.impl.attribute.OnChangeLmlAttribute$1.changed(OnChangeLmlAttribute.java:29)
	at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:147)
	at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:124)
	at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:92)
	at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
	at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:59)
	at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:351)
	at com.crashinvaders.common.PrioritizedInputMultiplexer$Wrapper.touchUp(PrioritizedInputMultiplexer.java:133)
	at com.crashinvaders.common.PrioritizedInputMultiplexer.touchUp(PrioritizedInputMultiplexer.java:80)
	at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:332)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:238)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: onNinePatchChecked
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.action.MethodActorConsumer.consume(MethodActorConsumer.java:38)
	... 27 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 29 more
Caused by: com.github.czyzby.lml.util.LmlParsingException: Error occurred during parsing near line 19 of the original file: "dialogNinePatchEditor.lml".
REASON: Unable to parse passed template due to an unexpected exception.
	Due implementation of the parser, the real problematic line might SLIGHTLY vary from the given line number(s), but exception message should be clear enough to find the actual error.
	Currently parsed template part:
16 |VALID|                 <container clip="true" fill="true" grow="true">
17 |VALID|                     <stack>
18 |VALID|                         <image tiled="custom/transparent-light"/>
19 |ERROR|                         <:actor id="compositionHolder" method="createCompositionHolder"/>
20 |     |                     </stack>
21 |     |                 </container>
22 |     |                 <table onecolumn="true" growx="true" padtop="4">

	If this is not enough to determine the error, call AbstractLmlParser#setLinesAmountPrintedOnException(int) with a suitable number. If you keep a lot of nested macros and want to see the whole invocation tree, try debugging through parsing and use getTemplateReader().toString() before exception occurs to check all current parsed template layers.
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.throwError(AbstractLmlParser.java:875)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parseTemplate(DefaultLmlParser.java:106)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.parseTemplate(AbstractLmlParser.java:197)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:232)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewDialogController.prepareDialogInstance(AnnotatedViewDialogController.java:89)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewDialogController.show(AnnotatedViewDialogController.java:46)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.showDialog(InterfaceService.java:316)
	at com.crashinvaders.texturepackergui.controllers.main.inputfiles.InputFilePropertiesDialogController.navigateToNinePatchEditor(InputFilePropertiesDialogController.java:193)
	at com.crashinvaders.texturepackergui.controllers.main.inputfiles.InputFilePropertiesDialogController.onNinePatchChecked(InputFilePropertiesDialogController.java:155)
	... 34 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method: com.badlogic.gdx.utils.reflect.Method@62bf5279 of object: com.crashinvaders.texturepackergui.controllers.ninepatcheditor.NinePatchEditorDialog@47cc1c36
	at com.github.czyzby.lml.parser.impl.action.MethodActorConsumer.consume(MethodActorConsumer.java:41)
	at com.github.czyzby.lml.parser.impl.tag.macro.EvaluateLmlMacroTag.executeMethod(EvaluateLmlMacroTag.java:99)
	at com.github.czyzby.lml.parser.impl.tag.macro.EvaluateLmlMacroTag.closeTag(EvaluateLmlMacroTag.java:77)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processMacro(DefaultLmlParser.java:396)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTagEntity(DefaultLmlParser.java:328)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.processTag(DefaultLmlParser.java:308)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parse(DefaultLmlParser.java:139)
	at com.github.czyzby.lml.parser.impl.DefaultLmlParser.parseTemplate(DefaultLmlParser.java:100)
	... 41 more
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: createCompositionHolder
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.action.MethodActorConsumer.consume(MethodActorConsumer.java:38)
	... 48 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 50 more
Caused by: java.lang.ClassCastException: com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable cannot be cast to com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable
	at com.crashinvaders.texturepackergui.controllers.ninepatcheditor.ContentGrid.<init>(ContentGrid.java:15)
	at com.crashinvaders.texturepackergui.controllers.ninepatcheditor.CompositionHolder.<init>(CompositionHolder.java:49)
	at com.crashinvaders.texturepackergui.controllers.ninepatcheditor.NinePatchEditorDialog.createCompositionHolder(NinePatchEditorDialog.java:152)
	... 55 more

[Suggestion] Support JSON format of output config file.

The content of *.atlas is very simple and clear.
But for html5/web game , the developers have to parse it by themselves via javascript.

If gdx-texture-packer-gui could support JSON , I think it will get broader range of applications.

[Report] This is a test issue.

I have no idea what you're doing here.

Application log
Version: 4.7.3
OS: Windows 10 10.0 amd64
JRE: 1.8.0_121 Oracle Corporation
External log file: C:\Users\Metaphore\.gdxtexturepackergui\logs\1806200543.log
App: Application is running in DEBUG mode.
ExtensionModuleRepositoryService: Cached data was loaded
ConfigurationController: Incremental fonts are disabled
GlobalShortcutHandler: Parsing shortcut file: hotkeys_default.txt
GlobalShortcutHandler: Parsing shortcut file: hotkeys_debug.txt
GlobalShortcutHandler: Parsing shortcut file: .gdxtexturepackergui/hotkeys_user.txt
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method annotated with: interface com.github.czyzby.lml.annotation.LmlAfter
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:326)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.doAfterViewTemplateParsing(AbstractLmlParser.java:309)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:234)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: initialize
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethod(AbstractLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:320)
	... 22 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 25 more
Caused by: java.lang.RuntimeException
	at com.crashinvaders.texturepackergui.controllers.main.MainController.initialize(MainController.java:173)
	... 30 more

[Report] Test issue

Application log
Version: 4.7.3
OS: Linux 4.13.0-45-generic amd64
JRE: 1.8.0_171 Oracle Corporation
External log file: /home/metaphore/.gdxtexturepackergui/logs/1806200710.log
ExtensionModuleRepositoryService: Cached data was loaded
ConfigurationController: Incremental fonts are disabled
GlobalShortcutHandler: Parsing shortcut file: hotkeys_default.txt
GlobalShortcutHandler: Parsing shortcut file: .gdxtexturepackergui/hotkeys_user.txt
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method annotated with: interface com.github.czyzby.lml.annotation.LmlAfter
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:326)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.doAfterViewTemplateParsing(AbstractLmlParser.java:309)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:234)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: initialize
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethod(AbstractLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:320)
	... 22 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 25 more
Caused by: java.lang.RuntimeException
	at com.crashinvaders.texturepackergui.controllers.main.MainController.initialize(MainController.java:172)
	... 30 more

[Report] Title sdasdasd

Application log
Version: 4.7.3
OS: Mac OS X 10.12.6 x86_64
JRE: 1.8.0_60 Oracle Corporation
External log file: /Users/mike/.gdxtexturepackergui/logs/1806201125.log
ExtensionModuleRepositoryService: Cached data was loaded
ConfigurationController: Incremental fonts are disabled
GlobalShortcutHandler: Parsing shortcut file: hotkeys_default.txt
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method annotated with: interface com.github.czyzby.lml.annotation.LmlAfter
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:326)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.doAfterViewTemplateParsing(AbstractLmlParser.java:309)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:234)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: initialize
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethod(AbstractLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:320)
	... 22 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 25 more
Caused by: java.lang.IllegalStateException: PISU NUHAT
	at com.crashinvaders.texturepackergui.controllers.main.MainController.initialize(MainController.java:174)
	... 30 more

Infinity loop when packing larger images

I have 4 images with size of 1080x1920
When I try to pack this image "Pack processing" last forever. I try with blank white images with the same size and again same infinity pack processing message.
I have 4.6.0 version
Here is my window
untitled

Premultiply Alpha Tooltip Typo

If you mouse over the Premultiply alpha checkbox, the tooltip reads as "If checked, the RGB will be multiplied by the alpha. See here for more information." I imagine that the "See here for more information." was not intended because you can't click on it. Thank you.

[Crash Report] Crash on start

As soon as it opens, I get a short intro into the JFrame then this dialog appears

Stack trace
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method annotated with: interface com.github.czyzby.lml.annotation.LmlAfter
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:326)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.doAfterViewTemplateParsing(AbstractLmlParser.java:309)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:234)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: initialize
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethod(AbstractLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:320)
	... 22 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 25 more
Caused by: java.lang.NullPointerException
	at com.crashinvaders.texturepackergui.controllers.main.filetype.PngFileTypeController.onViewCreated(PngFileTypeController.java:48)
	at com.crashinvaders.texturepackergui.controllers.main.MainController.initialize(MainController.java:127)
	... 30 more

[Report] Test test

Application log
Version: 4.7.3
OS: Windows 10 10.0 amd64
JRE: 1.8.0_121 Oracle Corporation
External log file: C:\Users\Metaphore\.gdxtexturepackergui\logs\1806200614.log
App: Application is running in DEBUG mode.
ExtensionModuleRepositoryService: Cached data was loaded
ConfigurationController: Incremental fonts are disabled
GlobalShortcutHandler: Parsing shortcut file: hotkeys_default.txt
GlobalShortcutHandler: Parsing shortcut file: hotkeys_debug.txt
GlobalShortcutHandler: Parsing shortcut file: .gdxtexturepackergui/hotkeys_user.txt
com.badlogic.gdx.utils.GdxRuntimeException: Unable to invoke method annotated with: interface com.github.czyzby.lml.annotation.LmlAfter
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:326)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.doAfterViewTemplateParsing(AbstractLmlParser.java:309)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.createView(AbstractLmlParser.java:234)
	at com.github.czyzby.autumn.mvc.component.ui.controller.impl.AnnotatedViewController.createView(AnnotatedViewController.java:76)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.initiateView(InterfaceService.java:212)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService.access$600(InterfaceService.java:63)
	at com.github.czyzby.autumn.mvc.component.ui.InterfaceService$ScreenSwitchingRunnable.run(InterfaceService.java:647)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas.executeRunnables(LwjglCanvas.java:265)
	at com.badlogic.gdx.backends.lwjgl.LwjglCanvas$3.run(LwjglCanvas.java:231)
	at java.awt.event.InvocationEvent.dispatch$$$capture(InvocationEvent.java:311)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.badlogic.gdx.utils.reflect.ReflectionException: Exception occurred in method: initialize
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:114)
	at com.github.czyzby.kiwi.util.gdx.reflection.Reflection.invokeMethod(Reflection.java:130)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethod(AbstractLmlParser.java:333)
	at com.github.czyzby.lml.parser.impl.AbstractLmlParser.invokeAnnotatedViewMethods(AbstractLmlParser.java:320)
	... 23 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.badlogic.gdx.utils.reflect.Method.invoke(Method.java:108)
	... 26 more
Caused by: java.lang.RuntimeException
	at com.crashinvaders.texturepackergui.controllers.main.MainController.initialize(MainController.java:172)
	... 31 more

Premultiply Alpha Preview

I have a suggestion regarding the Premultiply Alpha option. The preview should reflect the use of premultiply alpha. Right now, it uses the default blend mode and renders the preview with the ugly black edges and such.

Black edges should be white

If I got it right, you'll need to change the blend mode to the following before you render the preview:
spriteBatch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA);

And then you would need to switch it back for your UI:
spriteBatch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

This should only be applied to textures packed with Premultiply Alpha selected, of course. Thanks for your consideration.

Option to rewrite existing pack result

Using version 4.4.0

When we pack textures into existing package, TexturePacker checks old package for region names that already exist and throws an exception:

com.badlogic.gdx.utils.GdxRuntimeException: A region with the name "somename" has already been packed: somename
at com.badlogic.gdx.tools.texturepacker.TexturePacker.writePackFile(TexturePacker.java:294)

I use one folder where I store all of my textures to be packed and I don't remove them, that's why I get this exception each time I pack textures again and it forces me to manually remove old pack files. It also breaks old package when new textures added / old textures removed / textures size changed, because atlas image is generated and overwrites old one before exception is thrown.

It would be nice to have a checkbox like "Append to pack" / "Overwrite existing regions" / "Overwrite pack file if exists" (like in old texture packer gui, where regions were not appended).

Jar file not working in Windows 8.1 with latest java installed.

Hey as of late the latest available release of this doesn't seem to be working anymore. What ends up happening is that if I run it normally or use the command line, it opens but doesn't actually pop up the GUI. I've tried to open up other jars and they work fine. Here's what it looks like.

image

In task manager it is using resources so clearly it's running. I also have the latest java installed and have already tried reinstalling this program.

Cant run the program, it just opens a gray window.

Hi, i have been using this software for quite some time now and this is the first time it happens to me.

I have downloaded versions 4.4.0 and 4.5.0 and both open just a gray screen:
gray display gdx

It doesnt matter how i open it (.exe .jar .bat...),

My system info:
Windows 10 64 bits
Running this command java -XshowSettings:properties -version gave me this:

Property settings:
    awt.toolkit = sun.awt.windows.WToolkit
    file.encoding = Cp1252
    file.encoding.pkg = sun.io
    file.separator = \
    java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
    java.awt.printerjob = sun.awt.windows.WPrinterJob
    java.class.path = .
    java.class.version = 52.0
    java.endorsed.dirs = C:\Program Files\Java\jre1.8.0_151\lib\endorsed
    java.ext.dirs = C:\Program Files\Java\jre1.8.0_151\lib\ext
        C:\WINDOWS\Sun\Java\lib\ext
    java.home = C:\Program Files\Java\jre1.8.0_151
    java.io.tmpdir = C:\Users\Roger\AppData\Local\Temp\
    java.library.path = C:\ProgramData\Oracle\Java\javapath
        C:\WINDOWS\Sun\Java\bin
        C:\WINDOWS\system32
        C:\WINDOWS
        C:\ProgramData\Oracle\Java\javapath
        C:\WINDOWS\system32
        C:\WINDOWS
        C:\WINDOWS\System32\Wbem
        C:\WINDOWS\System32\WindowsPowerShell\v1.0\
        C:\Program Files\nodejs\
        C:\Program Files\Git\cmd
        C:\Program Files\PuTTY\
        C:\Program Files\Java\jdk1.8.0_144\bin

        C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86
        C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64
        C:\Users\Roger\AppData\Local\Microsoft\WindowsApps

        C:\Program Files\Microsoft VS Code\bin
        C:\Users\Roger\AppData\Roaming\npm
        .
    java.runtime.name = Java(TM) SE Runtime Environment
    java.runtime.version = 1.8.0_151-b12
    java.specification.name = Java Platform API Specification
    java.specification.vendor = Oracle Corporation
    java.specification.version = 1.8
    java.vendor = Oracle Corporation
    java.vendor.url = http://java.oracle.com/
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    java.version = 1.8.0_151
    java.vm.info = mixed mode
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM
    java.vm.specification.name = Java Virtual Machine Specification
    java.vm.specification.vendor = Oracle Corporation
    java.vm.specification.version = 1.8
    java.vm.vendor = Oracle Corporation
    java.vm.version = 25.151-b12
    line.separator = \r \n
    os.arch = amd64
    os.name = Windows 10
    os.version = 10.0
    path.separator = ;
    sun.arch.data.model = 64
    sun.boot.class.path = C:\Program Files\Java\jre1.8.0_151\lib\resources.jar
        C:\Program Files\Java\jre1.8.0_151\lib\rt.jar
        C:\Program Files\Java\jre1.8.0_151\lib\sunrsasign.jar
        C:\Program Files\Java\jre1.8.0_151\lib\jsse.jar
        C:\Program Files\Java\jre1.8.0_151\lib\jce.jar
        C:\Program Files\Java\jre1.8.0_151\lib\charsets.jar
        C:\Program Files\Java\jre1.8.0_151\lib\jfr.jar
        C:\Program Files\Java\jre1.8.0_151\classes
    sun.boot.library.path = C:\Program Files\Java\jre1.8.0_151\bin
    sun.cpu.endian = little
    sun.cpu.isalist = amd64
    sun.desktop = windows
    sun.io.unicode.encoding = UnicodeLittle
    sun.java.launcher = SUN_STANDARD
    sun.jnu.encoding = Cp1252
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers
    sun.os.patch.level =
    sun.stderr.encoding = cp850
    sun.stdout.encoding = cp850
    user.country = MX
    user.dir = C:\Users\Roger
    user.home = C:\Users\Roger
    user.language = es
    user.name = Roger
    user.script =
    user.timezone =
    user.variant =

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

I dont know if im doing something wrong.

If there is an option to run this in a debug mode or with a log creation i can do it and provide more feedback.

Thanks!

Changing language sometimes causes NullPointerException

Changing the language via the menu (Tools > change language) sometimes crashes the application with a NullPointerException.
E.g. after changing EN->RU:

Exception in thread "LWJGL Application" java.lang.NullPointerException
	at com.kotcrab.vis.ui.widget.Tooltip$DisplayTask.run(Tooltip.java:251)
	at com.badlogic.gdx.backends.lwjgl.LwjglApplication.executeRunnables(LwjglApplication.java:257)
	at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:208)
	at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)

The cause seems to be that the application tries to display a tooltip while the language is changing.
Because of that, the crash seems to only be happening when clicking specific areas of the new language menu entry.
Clicking on areas with gui elements with tooltips underneath produces a crash while other areas are fine.

Example of the crash area (in yellow) and the area that is fine to click (in green):
Crash Area

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.