Giter Club home page Giter Club logo

skin-composer's Introduction

README

Logo

  • Use Skin Composer to create skins for libGDX's Scene2D.UI!
  • Version 57
  • Live preview of all widgets with configurable options
  • Specify tinted, tiled, and custom created Drawables right in the editor
  • Includes BitmapFont editor and Image font generator like Shoebox
  • Freetype support and custom serializer to generate fonts from Json
  • Nine-Patch editor with batch functions for multiple images
  • Integrated support for TenPatch allowing for smart-resizing, animated UI's
  • Include TinyVG for SVG-like vector graphics and unlimited scaling
  • Implement your own classes allowing for extended Skin functionality
  • Create basic Scene2D layouts with Scene Composer
  • Implements a rich text editor for TextraTypist TypingLabel
  • VisUI template and sample projects included

Skins Preview

See more examples and sample code at Ray3k

Contact

Notes

Skin Composer now has a wiki: start here to begin learning!

If you are unable to run the Windows installer, use the JAR version with JDK version 11 or higher.

To run Skin Composer on OSX, please see the wiki for details.

If you are unable to open file dialogs on your platform, try the commandline option -swingfd to switch to Swing dialogs.

Video tutorials are available on YouTube.

Contributors and Forking

Skin Composer requires the Spine Runtime. The Spine Runtime requires a Spine license to redistribute. Please see the Spine Editor License.

The installer/uninstaller depends on mt.exe (to give the executable admin rights) and WinRAR (to collect the files into a single executable EXE). You need to install the WinRAR (x64) and the Windows 10 SDK with the options "Windows SDK Signing Tools for Desktop Apps" and "Windows SDK for UWP Managed Apps". Run the task ":installer:jpackageZip" on a Windows 10 host computer. The final distributable zip is created in /installer/build/winrar

If you have trouble compiling or running the app from source, try using JDK 13.

License

MIT License

Copyright (c) 2022 Raymond Buckley

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

skin-composer's People

Contributors

chinqingl avatar deviodesign avatar grisgram avatar lyze237 avatar mizunokazumi avatar payne911 avatar piotr-j avatar raeleus avatar softkide avatar thelogicmaster avatar tommyettinger 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

skin-composer's Issues

Error creating preview font from file. Check file paths.

"Error creating preview font from file. Check file paths." is the error I get when trying to load in a .fnt file for a label which I created with Littera. Perhaps I'm doing something wrong? I can't find any information about what else I might need to do.

Here's the log:

com.ray3k.skincomposer.dialog.DialogFonts: Error creating preview font from file
com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: C:/Users/Jordan/Documents/Skin Composer/hueboxi_data/HelveticaNeue-Light.fnt
    at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:665)
    at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:475)
    at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:114)
    at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:107)
    at com.ray3k.skincomposer.dialog.DialogFonts.fontNameDialog(DialogFonts.java:729)
    at com.ray3k.skincomposer.dialog.DialogFonts.fontNameDialog(DialogFonts.java:676)
    at com.ray3k.skincomposer.dialog.DialogFonts.newFontDialogWindows(DialogFonts.java:634)
    at com.ray3k.skincomposer.dialog.DialogFonts.newFontDialog(DialogFonts.java:611)
    at com.ray3k.skincomposer.dialog.DialogFonts.access$100(DialogFonts.java:82)
    at com.ray3k.skincomposer.dialog.DialogFonts$2.changed(DialogFonts.java:167)
    at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
    at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:181)
    at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:146)
    at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:123)
    at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:91)
    at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
    at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
    at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
    at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:198)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:257)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:141)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:110)
    at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:42)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1931)
    at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:486)
    ... 23 more

Crash after trying to create a new project with any template other than plain Scene2D skin using the splash screen

I keep on getting this error when trying to use the new splash screen features:

com.badlogic.gdx.utils.GdxRuntimeException: Error copying source file: templates/vis-ui (Internal)
To destination: temp/vis-ui (Local)
	at com.badlogic.gdx.files.FileHandle.copyFile(FileHandle.java:684)
	at com.badlogic.gdx.files.FileHandle.copyTo(FileHandle.java:574)
	at com.ray3k.skincomposer.MainListener$WelcomeDialogListener.visUIclicked(MainListener.java:631)
	at com.ray3k.skincomposer.dialog.DialogWelcome$WelcomeListener.handle(DialogWelcome.java:340)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:147)
	at com.ray3k.skincomposer.dialog.DialogWelcome$4.changed(DialogWelcome.java:144)
	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:58)
	at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
	at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:190)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:380)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:136)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:110)
	at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:49)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error stream writing to file: temp/vis-ui (Local)
	at com.badlogic.gdx.files.FileHandle.write(FileHandle.java:296)
	at com.badlogic.gdx.files.FileHandle.copyFile(FileHandle.java:682)
	... 20 more
Caused by: java.lang.NullPointerException
	at java.io.FilterInputStream.read(FilterInputStream.java:133)
	at java.io.FilterInputStream.read(FilterInputStream.java:107)
	at com.badlogic.gdx.utils.StreamUtils.copyStream(StreamUtils.java:49)
	at com.badlogic.gdx.utils.StreamUtils.copyStream(StreamUtils.java:36)
	at com.badlogic.gdx.files.FileHandle.write(FileHandle.java:294)
	... 21 more

Duplicate custom style class fails ver. 22

Hello,
I have custom style class with some fields in my project.
I select this class a choose "duplicate class" option.
New class is created but there are no fields/properties from original class.
I open style select box and there are to options with same name "default".
If I open second "default" style, the fields are there.
Loading from libgdx project fails.
I have to open skin composer project file in text editor and delete duplicated "default" node.

Great tool anyway! God bless you!

NullPointerException when creating new color from NinePatch menu

Hi! It's me again )

Application throws NullPointerException when I trying to create content for NinePatch image (in preview mode).

Steps to reproduce:

Create a new Project -> Project -> Drawables ->
-> Create 9-Patch -> Choose Content 'Text' -> Ok ->
-> New Color -> Ok -> Ok -> Choose created color ->

java.lang.NullPointerException at com.ray3k.skincomposer.dialog.Dialog9Patch.updatePreviewContentActor(Dialog9Patch.java:983) at com.ray3k.skincomposer.dialog.Dialog9Patch.access$2200(Dialog9Patch.java:77) at com.ray3k.skincomposer.dialog.Dialog9Patch$21$1.lambda$confirmed$0(Dialog9Patch.java:767) at com.ray3k.skincomposer.dialog.DialogColors.result(DialogColors.java:683) at com.ray3k.skincomposer.dialog.DialogColors$14.changed(DialogColors.java:440) at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28) at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:183) at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:148) at com.badlogic.gdx.scenes.scene2d.ui.Button.setChecked(Button.java:131) at com.badlogic.gdx.scenes.scene2d.ui.Button$1.clicked(Button.java:94) at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88) at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:59) at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:350) at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:86) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:178) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:390) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:111) at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:53)

Skin Composer v.26
System: Ubuntu 18.04 x64

Thank you!

Keep resources relative not working

The "Keep resources relative?" option in the settings window does not seem to have an effect. When this option is ticked and project is saved, resource paths are saved as absolute paths, for example:

{
atlasData: {
	atlasCurrent: true
	drawables: [
		{
			file: E:/Eclipse/workspace/Supergalactix/Supergalactix-core/razno/SGX UI Skin - MOJI POPRAVKI/sgxui_data/button.9.png
[...]

When changing the above path manually inside the .scmp file like this:
file: sgxui_data/button.9.png
the program will load the skin just fine, however upon saving it, it will overwrite it with the absolute path again, as shown before.

Feature Request: Add a Hex field in the Color Picker

Hi,

It would be very useful to be able to copy & paste colors to & from Krita or Inkscape into the color picker.
Something like this.
image

What do you think?
If you like the idea and are not working on the color picker at the moment, I can try to implement this.

Fonts can't use special characters

Hello! first let me say that skin-composer is so great! Thank you so much for creating it.
I'm a spanish speaker developer and my games have to use a special character in spanish but skin-composer can't manage to do that. I just post this in case that the developer didn't know this is a issue and is willing to fix it, but if not i'll try to make it work for my own when i have some free time.

Error Adding fonts

I try adding fonts to my styles, but I get "Error Adding font" error. I have the write files (fnt) and the files points to the right png file. It even shows a preview of the font, but when i click ok, i get an error.

*here is the png file, (for some reason i couldn't attach the .fnt file
times

Unable to go back to splash screen

Since splash screen offers the option to create new projects using specific templates, it would be nice if you could go back to it - or at least access the new templates through the menu. After a quick look at the UI, I have found no such options.

Preview for vertical progress bar broken

Preview of progress bar looks odd as soon as I switch to vertical. The issue can be triggered using any of the samples bundled with skin-composer download.
I'm using recent release 16 on Linux Mint.
I can provide further info and/or a screenshot if required.

java.lang.IllegalArgumentException: Missing LabelStyle font

When choosing the label from the widget drop down box, skin composer crashes:

java.lang.IllegalArgumentException: Missing LabelStyle font.
at com.badlogic.gdx.scenes.scene2d.ui.Label.setStyle(Label.java:78)
at com.badlogic.gdx.scenes.scene2d.ui.Label.(Label.java:72)
at com.ray3k.skincomposer.panel.PanelPreviewProperties.render(PanelPreviewProperties.java:1100)
at com.ray3k.skincomposer.panel.PanelPreviewProperties.populate(PanelPreviewProperties.java:981)
at com.ray3k.skincomposer.panel.PanelClassBar$5.changed(PanelClassBar.java:138)
at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:181)
at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:146)
at com.badlogic.gdx.scenes.scene2d.utils.Selection.fireChangeEvent(Selection.java:218)
at com.badlogic.gdx.scenes.scene2d.utils.Selection.set(Selection.java:103)
at com.badlogic.gdx.scenes.scene2d.ui.SelectBox.setSelected(SelectBox.java:260)
at com.ray3k.skincomposer.panel.PanelClassBar$1.changed(PanelClassBar.java:87)
at com.badlogic.gdx.scenes.scene2d.utils.ChangeListener.handle(ChangeListener.java:28)
at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:181)
at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:146)
at com.badlogic.gdx.scenes.scene2d.utils.Selection.fireChangeEvent(Selection.java:218)
at com.badlogic.gdx.scenes.scene2d.utils.Selection.choose(Selection.java:52)
at com.badlogic.gdx.scenes.scene2d.utils.ArraySelection.choose(ArraySelection.java:46)
at com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxList$2.clicked(SelectBox.java:364)
at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:198)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:257)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:138)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:107)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:41)

Example skins

It would be nice if you included a few example skins in the repository, so they could be loaded and modified. New LibGDX users could start with some solid GUI bases rather than from scratch.

font file gets empties

When exporting a skin, the previously assigned fnt-file is left with a file size of 0.

Feature Request: clear drawable property, ability to select none

Currently when customizing a style's properties, it is not possible to remove a drawable. Say, for my ButtonStyle I choose a drawable for the property "checked". Later I regret that and want to remove it, but I can't.

I suggest one of the following:

  1. Next to the drawable property, add a button, that when click clears the property.

  2. When selecting a drawable, and the first drawable in the list will be a sqaure that says "None", and when choosing this, the property will be cleared.

Number 2 is probably easiest to implement. This feature would also be relevant for fonts or colors, but default color is white anyway.

NullPointerException after the creation of the 'custom drawable'

Hi!
NullPointerException exception is thrown after I try to add new drawable.

Steps to reproduce :

  1. Create new skin and save.
  2. Create custom drawable with any name.
  3. Add real drawable from any file.

System : arch linux 64bit.

PS Sorry for my poor english, im not a native speaker.

java.lang.NullPointerException
at com.ray3k.skincomposer.dialog.DialogDrawables.checkDuplicateDrawables(DialogDrawables.java:1149)
at com.ray3k.skincomposer.dialog.DialogDrawables.drawablesSelected(DialogDrawables.java:1301)
at com.ray3k.skincomposer.dialog.DialogDrawables.drawablesSelected(DialogDrawables.java:1290)
at com.ray3k.skincomposer.dialog.DialogDrawables.newDrawableDialog(DialogDrawables.java:1228)
at com.ray3k.skincomposer.dialog.DialogDrawables.access$300(DialogDrawables.java:84)
at com.ray3k.skincomposer.dialog.DialogDrawables$2.changed(DialogDrawables.java:252)
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.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:178)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:383)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:111)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:53)

Illegal JSON format

The exported JSON does not have proper formatting and is invalid. The key MUST be surrounded by quotes as per the spec.

Portability problem in .scmp

Since it saves the full path to the directory ex C:/$USER/Documents/MyProject/MySkins/myskin.scmp this causes loading crash if the path changes. For example I just cloned my project on Linux so I get something like /home/$USER/Documents/MyProject/MySkins/myskin.scmp and it obviously crashes since the other path does not find the files.

I would prompt the user to choose the new location of the file if it is missing.

desktopLauncher.closeSplashScreen() causing MacOSX app to hang

After trying the Mac jar, the normal jar and even the source code, the program never ran on my Mac. At best, it showed a blank screen that didn't agree to close.

It was finally able to run though, after I commented out the above line (in the title). Apparently, your boolean flag only skips that line for Windows systems only. I have a hunch that it's the same reason why the jar file didn't run too.

Version 8 code cannot run

I've downloaded the version 8 source code and put it into Android Studio. I've followed the instructions from read.me to make necessary settings or actions. When executing the DesktopLauncher, I received error as below:

com.badlogic.gdx.utils.SerializationException: Error reading file: skin-composer-ui/skin-composer-ui.json

The mentioned json file is located under the core/assets folder. Should I copied the skin-composer-ui to other location? Please advise. Thanks.

com.ray3k.skincomposer.panel.PanelMenuBar: Error attempting to import JSON

I like the look of skin-composer but cant make it work / or understand why it cant parse the a libgdx uiskin.json

I managed to get your dark-peel json working but nothing else

I've attached the error log and corresponding uiskin.json

`com.ray3k.skincomposer.panel.PanelMenuBar: Error attempting to import JSON
java.lang.NullPointerException
at com.ray3k.skincomposer.data.JsonData.readFile(JsonData.java:141)
at com.ray3k.skincomposer.panel.PanelMenuBar.lambda$importDialogWindows$34(PanelMenuBar.java:610)
at com.ray3k.skincomposer.dialog.DialogLoading.lambda$show$16(DialogLoading.java:56)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.run(RunnableAction.java:42)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.act(RunnableAction.java:32)
at com.badlogic.gdx.scenes.scene2d.actions.SequenceAction.act(SequenceAction.java:65)
at com.badlogic.gdx.scenes.scene2d.Actor.act(Actor.java:95)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:46)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:49)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:221)
at com.ray3k.skincomposer.Main.render(Main.java:288)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:255)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:141)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:110)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:42)

font

uiskin

uiskin

`

Problem running skin composer in linux 32 bit

java -jar Rss/skin_composer.jar
[LWJGL] Failed to load a library. Possible solutions:
a) Add the directory that contains the shared library to -Djava.library.path or -Dorg.lwjgl.librarypath.
b) Add the JAR that contains the shared library to the classpath.
[LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
[LWJGL] Enable the SharedLibraryLoader debug mode with -Dorg.lwjgl.util.DebugLoader=true for >better diagnostics.
Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to locate library: liblwjgl32.so
at org.lwjgl.system.Library.loadSystem(Library.java:146)
at org.lwjgl.system.Library.loadSystem(Library.java:66)
at org.lwjgl.system.Library.(Library.java:49)
at org.lwjgl.system.MemoryUtil.(MemoryUtil.java:60)
at org.lwjgl.system.MemoryStack.(MemoryStack.java:60)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:79)
at org.lwjgl.system.MemoryStack.create(MemoryStack.java:70)
at java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:284)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
at java.lang.ThreadLocal.get(ThreadLocal.java:170)
at org.lwjgl.system.MemoryStack.stackGet(MemoryStack.java:605)
at org.lwjgl.system.MemoryStack.stackPush(MemoryStack.java:614)
at org.lwjgl.system.Callback.(Callback.java:38)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.initializeGlfw(Lwjgl3Application.java:78)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:88)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:54)

This is from running the version 18 and 19 of the app from a 32 bit machine on linux.
Hope you fix this issue.

NullPointerException when saving after adding TrueTypeFont to VisUI project

Steps to reproduce:

  1. Show welcome screen, select VisUI template
  2. Go to TextButton class
  3. Go to font property and add font, choose "FreeTypeFont+" and add something
  4. Select the font
  5. Save - will crash program and not save the fonts

Problem does not occur on vanilla Scene2D project, only from VisUI template.

Also I'm getting a missing java.dll error whenever i try to launch to program, anyone know why? It lets me through to the main program. I'm using Java 1.8.0_181.

Error log:

java.lang.NullPointerException
at com.ray3k.skincomposer.data.ProjectData.makeResourcesRelative(ProjectData.java:294)
at com.ray3k.skincomposer.data.ProjectData.save(ProjectData.java:309)
at com.ray3k.skincomposer.data.ProjectData.save(ProjectData.java:321)
at com.ray3k.skincomposer.MainListener.lambda$saveFile$6(MainListener.java:372)
at com.ray3k.skincomposer.dialog.DialogLoading.lambda$show$0(DialogLoading.java:55)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.run(RunnableAction.java:42)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.act(RunnableAction.java:32)
at com.badlogic.gdx.scenes.scene2d.actions.SequenceAction.act(SequenceAction.java:65)
at com.badlogic.gdx.scenes.scene2d.Actor.act(Actor.java:96)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:46)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:49)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:221)
at com.ray3k.skincomposer.Main.render(Main.java:281)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:392)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:111)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:53)

Can't use save, save as, or import functions in the Mac.app (ver 25)

Hi, first just wanted to say thanks for making this tool and keeping it up to date! We just started using it for a project recently.

I'm working on a Mac and for the most part the app extracts and opens fine (after dragging it to my applications folder first, just a heads up to anyone like me who was trying to launch it right in their downloads folder with no luck).

From there though nothing happens if I click file > import (or any of the other options in that menu). It fades to the loading circle for about a second and then fades back to the app. No file browser window pops up. Thankfully, the skin_composer_mac.jar file works fine! Only issue seems to be a similar problem when clicking "open" in the file menu (nothing pops up). But import and saving works great.

That's it so far! Thanks again and hopefully this was helpful.

Feature request: Ability to change split and padding

When creating custom drawables, it is currently not possible to be add or change the split or pad properties. To do this you have to manually set those in the atlas by hand.

I suggest adding a small option menu for each drawable, where you are able to set these properties. Some text fields would be enough, but a preview would be amazing.

GUI changes

  • Dialogs use stage background without any alpha applied, hiding everything beneath them. You could easily change the alpha value of stage background drawables to simply darken the stage under dialogs instead of completely hiding it. This looks especially awkward when you open the "about" dialog.
  • VisUI FileChooser uses default style, which does not exactly fit the current themes. You could add FileChooserStyle to your skin and use VisUI.load(Skin) method to replace the default VisUI skin with one of your own. It also features no stage background as opposed to other dialogs.
  • Image buttons have different sizes. Open List style for example to see what I mean. I think the font, color and drawable icons should have the same size (and its height could match the text field).
  • There is no application icon.

Exception when deleting preview font

Hi!

Skin Composer crashes with this exception:
"java.lang.IllegalArgumentException: Missing LabelStyle font"

System: ubuntu64 18.04

Steps to reproduce:

  1. Create a new project.
  2. Create a new FreeType Font placeholder from any of preview fonts (i added my font to 'preview fonts' folder).
  3. Save project and close Skin Composer.
  4. Delete font from 'preview fonts' folder.
  5. Open saved project and go to Menu -> Project -> Fonts.
java.lang.IllegalArgumentException: Missing LabelStyle font.
	at com.badlogic.gdx.scenes.scene2d.ui.Label.setStyle(Label.java:79)
	at com.badlogic.gdx.scenes.scene2d.ui.Label.<init>(Label.java:73)
	at com.ray3k.skincomposer.dialog.DialogFonts.refreshTable(DialogFonts.java:476)
	at com.ray3k.skincomposer.dialog.DialogFactory.showDialogFonts(DialogFactory.java:161)
	at com.ray3k.skincomposer.dialog.DialogFactory.showDialogFonts(DialogFactory.java:165)
	at com.ray3k.skincomposer.dialog.DialogFactory.showFonts(DialogFactory.java:180)
	at com.ray3k.skincomposer.MainListener.rootEvent(MainListener.java:133)
	at com.ray3k.skincomposer.RootTable$RootTableListener.handle(RootTable.java:2682)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:147)
	at com.ray3k.skincomposer.RootTable$MenuBarListener.menuClicked(RootTable.java:2593)
	at com.ray3k.skincomposer.MenuButton$MenuButtonListener.handle(MenuButton.java:249)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:147)
	at com.ray3k.skincomposer.MenuButton$1.menuClicked(MenuButton.java:66)
	at com.ray3k.skincomposer.MenuList$MenuListListener.handle(MenuList.java:285)
	at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
	at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:143)
	at com.ray3k.skincomposer.MenuList$1.changed(MenuList.java:194)
	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.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:178)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:383)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:111)
	at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:53)

Format bug

An interesting error:

java.lang.NumberFormatException: For input string: "1,8"
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
	at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
	at java.lang.Double.parseDouble(Double.java:538)
	at com.ray3k.skincomposer.dialog.DialogFreeTypeFont.populate(DialogFreeTypeFont.java:529)
	at com.ray3k.skincomposer.dialog.DialogFreeTypeFont.<init>(DialogFreeTypeFont.java:156)
	at com.ray3k.skincomposer.dialog.DialogFreeTypeFont.<init>(DialogFreeTypeFont.java:166)
	at com.ray3k.skincomposer.dialog.DialogFactory.showDialogFreeTypeFont(DialogFactory.java:727)
	at com.ray3k.skincomposer.dialog.DialogFonts.newFreeTypeFontDialog(DialogFonts.java:879)
	at com.ray3k.skincomposer.dialog.DialogFonts.access$200(DialogFonts.java:74)
	at com.ray3k.skincomposer.dialog.DialogFonts$3.changed(DialogFonts.java:196)
	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.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:81)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Input.update(Lwjgl3Input.java:178)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:383)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137)
	at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:111)
	at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:54)

I tested it!

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class Test {

    @org.junit.Test
    public void test() {
        float gamma = 1.8f;
        DecimalFormat df = new DecimalFormat("#.#");
        System.out.println(df.format(gamma));
        System.out.println(Locale.getDefault());
        NumberFormat nf = NumberFormat.getNumberInstance(Locale.ROOT);
        DecimalFormat formatter = (DecimalFormat)nf;
        formatter.applyPattern("#.#");
        System.out.println(formatter.format(gamma));
    }
}

Output:

1,8
ru_RU
1.8

No 'install' informations available

If you start the desktop project in android studio on a mac you ran into some problems:

  1. You have to go to 'File/Project Structure...' and set the project language level to '8 - Lambdas, type annotations etc.'
  2. In build.gradle you have to set: visuiVersion = '1.1.6-SNAPSHOT'
  3. The line: 'config.setWindowSizeLimits(675, 400, -1, -1);' in DesktopLauncher throws NoSuchMethodError (no idea why). So this line needs to be commented out.
  4. You have to start the project with the vm option: -XstartOnFirstThread
  5. Enjoy!

Eventually you should always ship a compiled version in master branch :)

(Your C64 skin is great!)

Support for custom actors

Default Scene2D API is far from complete (otherwise projects like VisUI would not exist), and most people usually end up creating some custom actors along the way. While Skin Composer would be somewhat useful, in most "serious" projects you would usually end up ending JSON files manually anyway. That's why I think there should be some kind of support for custom widgets.

When you think about it, you could easily allow the users for create custom styles without the source code or live previews. The user would have to enter the exact name of the style (for example, com.github.czyzby.SomeWidget$SomeWidgetStyle), and then choose the names and types of modifiable attributes - drawables, strings, fonts, colors, floats and booleans. As expected, there would be no live preview support, but at least you could specify the style within the GUI.

"Full" support of extra widgets would require some dynamic class loading, but it is certainly achievable. The user would have to choose the path to a source file containing the necessary stuff, and enter the names of actor and style classes - so they could be loaded with reflection. It does require some work, but I think it's worth it.

If you don't want to make it possible to customize additional actors, "hardcoded" VisUI support would be most welcome.

SON read error

JSON :
{
"com.badlogic.gdx.graphics.g2d.BitmapFont": {
"default-font": {
"file": "fonts/ui_font_32.fnt"
}
},
"com.badlogic.gdx.graphics.Color": {
"white": {
"a": 1,
"b": 1,
"g": 1,
"r": 1
},
"black": {
"a": 1,
"b": 0,
"g": 0,
"r": 0
},
"gray": {
"a": 1,
"b": 0.5,
"g": 0.5,
"r": 0.5
}
},
"com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
"default": {
"down": "button-down",
"up": "button",
"font": "default-font",
"fontColor": "white",
"downFontColor": "black",
"overFontColor": "gray"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": {
"default": {
"font": "default-font",
"fontColor": "white"
}
},
"com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle": {
"default": {
"down": "button-down",
"up": "button",
"checkboxOn": "check-on",
"checkboxOff": "check-off",
"font": "default-font",
"fontColor": "white",
"downFontColor": "black",
"overFontColor": "gray"
}
}
}

error log :

com.ray3k.skincomposer.dialog.DialogImport: Error attempting to import JSON
java.lang.NullPointerException
at com.ray3k.skincomposer.data.JsonData.readFile(JsonData.java:168)
at com.ray3k.skincomposer.dialog.DialogImport.lambda$importFile$2(DialogImport.java:182)
at com.ray3k.skincomposer.dialog.DialogLoading.lambda$show$0(DialogLoading.java:55)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.run(RunnableAction.java:42)
at com.badlogic.gdx.scenes.scene2d.actions.RunnableAction.act(RunnableAction.java:32)
at com.badlogic.gdx.scenes.scene2d.actions.SequenceAction.act(SequenceAction.java:65)
at com.badlogic.gdx.scenes.scene2d.Actor.act(Actor.java:98)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:46)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:49)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:222)
at com.ray3k.skincomposer.Main.render(Main.java:246)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:399)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:137)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:111)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:53)

Feature Request: low and high resolution skins

As an user I want to manage only one skin but support different screen sizes. The following problem occurs when the skin is used on an old smartphone and a new one with retina display at the same time: On the old smartphone everything looks like expected but on the new one with retina everything is tiny (or pixelated in case of a stretched-viewport).

Possible approach:

  • each drawable can have more than one image (one image for each size-class).
  • each size-class generates an own skin (my app will choose the right skin on startup).
  • if an image for a size-class is missing: fallback to the image of an existing size-class.

For example a simple button could have the following size-classes:

  • button.png (default size-class)
  • [email protected] (retina size-class / scaled with factor 2)

If I want to add a button for those size-classes I drag'n'drop those two images (button.png and [email protected]) into the skin-composer and the skin-composer adds only one "button" drawable but saves both images. Later when I export this skin the skin-composer will generate two skins:

The same should be possible for fonts.

(this size-class and "@2x"-thingy is the way how apple solves this problem)

Large fonts exportation is not done properly

When I export my skin with a large font (70 VCR Mono), LibGDX will not be able to parse my skin, unless I go in Hiero and export a 70 VCR Mono myself with a large background (2048x2048) and replace what Skin Composer exported. When I import my font into Skin Composer, there is no problem, it will read correctly. However, it does not export it in a way LibGDX can read it after.

This seems to be causes because the file vcr70.fnt has these lines :

page id=0 file="vcr701.png"
page id=1 file="vcr702.png"
scaleW=512 scaleH=512 pages=2

When I actually have 1 file called vcr.png that's 2048x2048

execution error: Can’t make "F:/APP/ASSETS/assetsall" into type alias. (-1700)

Skin Composer is Awesome!
I opened it using the the command from my folder on a Mac -
java -jar -XstartOnFirstThread skin_composer_mac.jar

When I tried importing a project from another computer (Windows)
I got an error that the resources are missing.
When I clicked on the browse button to import.
I got this error on my Terminal:
20:109: execution error: Can’t make "F:/APP/ASSETS/assetsall" into type alias. (-1700)
I don't know what to do. Please help.
I'm exporting my files from the other PC for the time being.

Project saving before import should be optional

Currently you cannot import an existing skin without saving the current project, even if it's empty. It would be great if you added another option to the dialog that would allow the user to skip project saving.

Opening project vs23 in vs24 editor fails: Named value not found: parent

java.lang.IllegalArgumentException: Named value not found: parent
at com.badlogic.gdx.utils.JsonValue.getString(JsonValue.java:651)
at com.ray3k.skincomposer.data.StyleData.read(StyleData.java:309)
at com.badlogic.gdx.utils.Json.readValue(Json.java:928)
at com.badlogic.gdx.utils.Json.readValue(Json.java:981)

I guess because I use custom classes. You added the parent option but in my project there are no parents.

intergrating this with my 2 rpg engine and removing some usless textfields

do you mind if I integrate this with the editor for my 2d RPG engine? Also you may want to remove the adding of drawables for certain things on buttons and possible other scene 2d Classes like focused or checked as buttons don't have those fields and adding drawables for them will cause libGDX to crash.

Allow fonts generated by FreeType

The default classes do not allow typing in a font name generated by FreeFont. With custom classes I can change the field to by of type text and type in the font I generate on runtime.

font image size bigger or equal than 1024x1024

I changed texture packer settings:
{
...
maxWidth: 4096,
maxHeight: 4096,
...
}
and it works as expected.
But, when I insert a font with a image size of 1024x1024, it says that the image size must be less than 1024x1024.
Once the maxWidth and maxHeight parameters are 4096 it is supposed that It must be allowed a font size of 1024x1024.

libEGL warning: failed to create a pipe screen for i965

Running Ubuntu Desktop 14

The window comes up. I can see the title bar.
The window captures an image of the desktop behind it.
(Everything on the desktop behind the window, now shows in the window, and doesn't change no matter where you move the window to.)
The window doesn't do anything else.

I tried Version 5, 6 jars from both the linux download and the jar download. (In your releases page). They both had the same problem.

Version 4 worked fine.

java -jar skin_composer.jar
java.lang.NullPointerException
at org.lwjgl.system.APIUtil.apiGetManifestValue(APIUtil.java:97)
at org.lwjgl.system.Library.checkHash(Library.java:260)
at org.lwjgl.system.Library.(Library.java:44)
at org.lwjgl.system.MemoryAccess.(MemoryAccess.java:17)
at org.lwjgl.system.ThreadLocalUtil$UnsafeState.(ThreadLocalUtil.java:86)
at org.lwjgl.system.ThreadLocalUtil.getInstance(ThreadLocalUtil.java:43)
at org.lwjgl.system.ThreadLocalUtil.(ThreadLocalUtil.java:20)
at org.lwjgl.system.MemoryStack.stackPush(MemoryStack.java:577)
at org.lwjgl.system.Callback.(Callback.java:35)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.initializeGlfw(Lwjgl3Application.java:78)
at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:87)
at com.ray3k.skincomposer.desktop.DesktopLauncher.main(DesktopLauncher.java:42)
libEGL warning: failed to create a pipe screen for i965
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started

Weird behaviour when importing a skin with very small "bordered" drawables.

I want to change the font of the skin tixel. So I imported the skin, after removing all VisUI components and adding {file: droid-sans-13.fnt } to small-font. Everything seemed fine, but the ScrollPanes background wasn't just a 1px border. Somehow it has become a radial flow.
The reason could be, that the used drawable is very small (5x5, where the actual information is stored in the inner 3x3).

Edit: Yes, the very small drawable caused the behavior. After Resizing the corresponding png to 10x10 is the problem gone.
Edit 2: No it's still a problem. It looks fine inside Skin Composer, but it's still broken, after exporting the skin and using it in the game.

Crash when trying to open on linux

Hi, it was crashing with

java.lang.NoSuchMethodError: com.badlogic.gdx.scenes.scene2d.Stage.setKeyboardFocus(Lcom/badlogic/gdx/scenes/scene2d/Actor;)

I fixed updating VisUI to version 1.2.3

Keep resources relative is not doing what I expect

Hi again,

When I select "Keep resources relative" in the settings page, I'd expect to have relative links in the scmp file, for example:
fonts: [ { file: ../fonts/small.fnt } ]
instead, when I select this option, all resources are copied to a sub-directory skin_data and the links are updated to point to this new location, but they remain absolute.

It's probably just my expectations that are wrong, but can you have a look?

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.