use of com.badlogic.gdx.scenes.scene2d.utils.Drawable in project libgdx by libgdx.
the class NoncontinuousRenderingTest method populateTable.
private void populateTable() {
Table root = new Table();
stage.addActor(root);
root.setFillParent(true);
root.pad(5);
root.defaults().left().space(5);
Button button0 = new TextButton("Toggle continuous rendering", skin, "toggle");
button0.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
boolean continuous = Gdx.graphics.isContinuousRendering();
Gdx.graphics.setContinuousRendering(!continuous);
}
});
root.add(button0).row();
final String str1 = "2s sleep -> Application.postRunnable()";
Button button1 = new TextButton(str1, skin);
button1.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
nextColor();
Gdx.app.postRunnable(new Runnable() {
public void run() {
Gdx.app.log(str1, "Posted runnable to Gdx.app");
}
});
}
}).start();
}
});
root.add(button1).row();
final String str2 = "2s sleep -> Graphics.requestRendering()";
Button button2 = new TextButton(str2, skin);
button2.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
// caching necessary to ensure call on this window
final Graphics graphics = Gdx.graphics;
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
nextColor();
graphics.requestRendering();
Gdx.app.log(str2, "Called Gdx.graphics.requestRendering()");
}
}).start();
}
});
root.add(button2).row();
final String str3 = "2s Timer -> Application.postRunnable()";
Button button3 = new TextButton(str3, skin);
button3.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
Timer.schedule(new Task() {
public void run() {
nextColor();
Gdx.app.postRunnable(new Runnable() {
public void run() {
Gdx.app.log(str3, "Posted runnable to Gdx.app");
}
});
}
}, 2f);
}
});
root.add(button3).row();
final String str4 = "2s DelayAction";
Button button4 = new TextButton(str4, skin);
button4.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
stage.addAction(Actions.sequence(Actions.delay(2), Actions.run(new Runnable() {
public void run() {
nextColor();
Gdx.app.log(str4, "RunnableAction executed");
}
})));
}
});
root.add(button4).row();
final String str5 = "(2s sleep -> toggle continuous) 2X";
Button button5 = new TextButton(str5, skin);
button5.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
// caching necessary to ensure call on this window
final Graphics graphics = Gdx.graphics;
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 2; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException ignored) {
}
nextColor();
boolean continuous = graphics.isContinuousRendering();
graphics.setContinuousRendering(!continuous);
Gdx.app.log(str5, "Toggled continuous");
}
}
}).start();
}
});
root.add(button5).row();
final CheckBox actionsRequestRendering = new CheckBox("ActionsRequestRendering", skin);
actionsRequestRendering.setChecked(true);
actionsRequestRendering.addListener(new ChangeListener() {
public void changed(ChangeEvent event, Actor actor) {
stage.setActionsRequestRendering(actionsRequestRendering.isChecked());
}
});
root.add(actionsRequestRendering).row();
Drawable knobDown = skin.newDrawable("default-slider-knob", Color.GRAY);
SliderStyle sliderStyle = skin.get("default-horizontal", SliderStyle.class);
sliderStyle.knobDown = knobDown;
Slider slider = new Slider(0, 100, 1, false, sliderStyle);
root.add(slider).row();
SelectBox<Pixmap.Format> selectBox = new SelectBox(skin);
selectBox.setItems(Pixmap.Format.values());
root.add(selectBox).row();
root.add();
root.add().grow();
}
use of com.badlogic.gdx.scenes.scene2d.utils.Drawable in project gdx-skineditor by cobolfoo.
the class Skin method save.
/** Store all resources in the specified skin JSON file. */
public boolean save(FileHandle skinFile) {
StringWriter jsonText = new StringWriter();
JsonWriter writer = new JsonWriter(jsonText);
Json json = new Json();
json.setWriter(writer);
json.writeObjectStart();
// Iterator it = resources.keys().iterator();
// while(it.hasNext()) {
// Object item = it.next();
// if (item instanceof com.badlogic.gdx.scenes.scene2d.utils.Drawable) {
// Drawable d = (Drawable) item;
//
// }
// }
// Sort items
Array<Class> items = new Array<Class>();
items.add(com.badlogic.gdx.graphics.Color.class);
items.add(com.badlogic.gdx.graphics.g2d.BitmapFont.class);
items.add(Skin.TintedDrawable.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.ProgressBar.ProgressBarStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.SplitPane.SplitPaneStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Touchpad.TouchpadStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.CheckBox.CheckBoxStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Tree.TreeStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle.class);
items.add(com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle.class);
for (Class<?> item : items) {
String name = item.getName();
json.writeObjectStart(name);
ObjectMap<String, Object> typeResources = resources.get(item);
// Build a temporary array for string keys to prevent nested
// iterators with getObjetName function.
Array<String> styles = new Array<String>();
Iterator itStyles = typeResources.keys().iterator();
while (itStyles.hasNext()) {
String style = (String) itStyles.next();
styles.add(style);
}
for (String style : styles) {
json.writeObjectStart(style);
Field[] fields = ClassReflection.getFields(typeResources.get(style).getClass());
// Handle functions
if (typeResources.get(style) instanceof com.badlogic.gdx.graphics.g2d.BitmapFont) {
BitmapFont font = (BitmapFont) typeResources.get(style);
json.writeValue("file", font.getData().fontFile.name());
}
for (Field field : fields) {
try {
Object object = field.get(typeResources.get(style));
if (object != null) {
if (object instanceof BitmapFont) {
String value = resolveObjectName(BitmapFont.class, object);
if (value != null) {
json.writeValue(field.getName(), value);
}
} else if (object instanceof Float) {
if ((Float) object != 0.0f) {
json.writeValue(field.getName(), object);
}
} else if (object instanceof Color) {
if (typeResources.get(style) instanceof Color) {
// Skip sub-color
} else {
json.writeValue(field.getName(), object);
}
} else if (object instanceof Drawable) {
if (typeResources.get(style) instanceof com.badlogic.gdx.scenes.scene2d.ui.Skin.TintedDrawable) {
// Skip drawable if it is from tinted drawable
} else {
String value = null;
value = resolveObjectName(Drawable.class, object);
//
if (value != null) {
json.writeValue(field.getName(), value);
}
}
} else if (object instanceof ListStyle) {
String value = resolveObjectName(ListStyle.class, object);
if (value != null) {
json.writeValue(field.getName(), value);
}
} else if (object instanceof ScrollPaneStyle) {
String value = resolveObjectName(ScrollPaneStyle.class, object);
if (value != null) {
json.writeValue(field.getName(), value);
}
} else if (object instanceof String) {
// only used to get original drawable for tinted drawable
json.writeValue(field.getName(), object);
} else if (object instanceof char[]) {
// Don't store.
} else {
throw new IllegalArgumentException("resource object type is unknown: " + object.getClass().getCanonicalName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
json.writeObjectEnd();
}
json.writeObjectEnd();
}
json.writeObjectEnd();
PrettyPrintSettings settings = new PrettyPrintSettings();
settings.outputType = OutputType.minimal;
settings.singleLineColumns = 100;
skinFile.writeString(json.prettyPrint(jsonText.toString(), settings), false);
return true;
}
use of com.badlogic.gdx.scenes.scene2d.utils.Drawable in project gdx-skineditor by cobolfoo.
the class OptionsPane method updateTableFields.
/**
*
*/
private void updateTableFields(final String style) {
ImageButton button = (ImageButton) game.screenMain.barWidgets.group.getChecked();
String widget = button.getUserObject().toString();
Gdx.app.log("OptionsPane", "Update fields table for widget: " + widget + ", style: " + style);
tableFields.clear();
tableFields.add(new Label("Name", game.skin, "title")).left().width(170);
tableFields.add(new Label("Value", game.skin, "title")).left().width(60).padRight(50);
tableFields.row();
Field[] fields = ClassReflection.getFields(currentStyle.getClass());
for (final Field field : fields) {
try {
// Grey optional
if (game.opt.isFieldOptional(currentStyle.getClass(), field.getName())) {
tableFields.add(new Label(field.getName(), game.skin, "optional")).left();
} else {
tableFields.add(new Label(field.getName(), game.skin, "default")).left();
}
Actor actor;
// field type
String name = field.getType().getSimpleName();
Object obj = field.get(currentStyle);
if (name.equals("Drawable")) {
/**
* Handle Drawable object
*/
Drawable drawable = (Drawable) field.get(currentStyle);
String resourceName = "";
ImageTextButton.ImageTextButtonStyle buttonStyle = new ImageTextButton.ImageTextButtonStyle(game.skin.getDrawable("default-round"), game.skin.getDrawable("default-round-down"), game.skin.getDrawable("default-round"), game.skin.getFont("default-font"));
if (drawable != null) {
resourceName = game.skinProject.resolveObjectName(Drawable.class, drawable);
buttonStyle.imageUp = drawable;
} else {
buttonStyle.up = game.skinProject.getDrawable("default-rect");
buttonStyle.checked = game.skinProject.getDrawable("default-rect");
}
actor = new ImageTextButton(resourceName, buttonStyle);
((ImageTextButton) actor).setClip(true);
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
showDrawableDialog(field);
}
});
} else if (name.equals("Color")) {
/**
* Handle Color object
*/
Color color = (Color) field.get(currentStyle);
ImageTextButton.ImageTextButtonStyle buttonStyle = new ImageTextButton.ImageTextButtonStyle(game.skin.getDrawable("default-round"), game.skin.getDrawable("default-round-down"), game.skin.getDrawable("default-round"), game.skin.getFont("default-font"));
String resourceName = "";
if (color != null) {
resourceName = game.skinProject.resolveObjectName(Color.class, color);
resourceName += " (" + color.toString() + ")";
// Create drawable on the fly
Pixmap pixmap = new Pixmap(18, 18, Pixmap.Format.RGBA8888);
pixmap.setColor(color);
pixmap.fill();
pixmap.setColor(Color.BLACK);
pixmap.drawRectangle(0, 0, 18, 18);
Texture texture = new Texture(pixmap);
buttonStyle.imageUp = new SpriteDrawable(new Sprite(texture));
pixmap.dispose();
} else {
buttonStyle.up = game.skinProject.getDrawable("default-rect");
buttonStyle.checked = game.skinProject.getDrawable("default-rect");
}
actor = new ImageTextButton(resourceName, buttonStyle);
((ImageTextButton) actor).setClip(true);
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
showColorPickerDialog(field);
}
});
} else if (name.equals("BitmapFont")) {
/**
* Handle BitmapFont object
*/
BitmapFont font = (BitmapFont) field.get(currentStyle);
String resourceName = "";
ImageTextButton.ImageTextButtonStyle buttonStyle = new ImageTextButton.ImageTextButtonStyle(game.skin.getDrawable("default-round"), game.skin.getDrawable("default-round-down"), game.skin.getDrawable("default-round"), game.skin.getFont("default-font"));
if (font != null) {
resourceName = game.skinProject.resolveObjectName(BitmapFont.class, font);
buttonStyle.font = font;
} else {
buttonStyle.up = game.skinProject.getDrawable("default-rect");
buttonStyle.checked = game.skinProject.getDrawable("default-rect");
}
actor = new ImageTextButton(resourceName, buttonStyle);
((ImageTextButton) actor).setClip(true);
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
showFontPickerDialog(field);
}
});
} else if (name.equals("float")) {
/**
* Handle Float object
*/
Float value = (Float) field.get(currentStyle);
String resourceName = "";
ImageTextButton.ImageTextButtonStyle buttonStyle = new ImageTextButton.ImageTextButtonStyle(game.skin.getDrawable("default-round"), game.skin.getDrawable("default-round-down"), game.skin.getDrawable("default-round"), game.skin.getFont("default-font"));
if ((value != null) && (value != 0)) {
resourceName = String.valueOf(value);
} else {
buttonStyle.up = game.skinProject.getDrawable("default-rect");
buttonStyle.checked = game.skinProject.getDrawable("default-rect");
}
actor = new ImageTextButton(resourceName, buttonStyle);
((ImageTextButton) actor).setClip(true);
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
showFloatInputDialog(field);
}
});
} else if (name.equals("ListStyle")) {
/**
* Handle ListStyle object
*/
ListStyle listStyle = (ListStyle) field.get(currentStyle);
actor = new SelectBox<String>(game.skin, "default");
Array<String> items = new Array<String>();
final ObjectMap<String, ListStyle> values = game.skinProject.getAll(ListStyle.class);
Iterator<String> it = values.keys().iterator();
String selection = null;
while (it.hasNext()) {
String key = it.next();
items.add(key);
if (listStyle == values.get(key)) {
selection = key;
}
}
((SelectBox) actor).setItems(items);
if (selection != null) {
((SelectBox) actor).setSelected(selection);
}
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
String selection = (String) ((SelectBox) actor).getSelected();
try {
field.set(currentStyle, values.get(selection));
} catch (Exception e) {
e.printStackTrace();
}
game.screenMain.saveToSkin();
refresh();
game.screenMain.paneOptions.updateSelectedTableFields();
game.screenMain.panePreview.refresh();
}
});
} else if (name.equals("ScrollPaneStyle")) {
/**
* Handle ListStyle object
*/
ScrollPaneStyle scrollStyle = (ScrollPaneStyle) field.get(currentStyle);
actor = new SelectBox<String>(game.skin, "default");
Array<String> items = new Array<String>();
final ObjectMap<String, ScrollPaneStyle> values = game.skinProject.getAll(ScrollPaneStyle.class);
Iterator<String> it = values.keys().iterator();
String selection = null;
while (it.hasNext()) {
String key = it.next();
items.add(key);
if (scrollStyle == values.get(key)) {
selection = key;
}
}
((SelectBox) actor).setItems(items);
if (selection != null) {
((SelectBox) actor).setSelected(selection);
}
actor.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
String selection = (String) ((SelectBox) actor).getSelected();
try {
field.set(currentStyle, values.get(selection));
} catch (Exception e) {
e.printStackTrace();
}
game.screenMain.saveToSkin();
refresh();
game.screenMain.paneOptions.updateSelectedTableFields();
game.screenMain.panePreview.refresh();
}
});
} else {
Gdx.app.log("OptionsPane", "Unknown type: " + name);
actor = new Label("Unknown Type", game.skin);
}
tableFields.add(actor).left().height(32).padRight(24).expandX().fillX();
tableFields.row();
} catch (Exception e) {
e.printStackTrace();
}
}
}
use of com.badlogic.gdx.scenes.scene2d.utils.Drawable in project gdx-skineditor by cobolfoo.
the class DrawablePickerDialog method updateTable.
/**
*
*/
public void updateTable() {
tableDrawables.clear();
Iterator<String> keys = items.keys().iterator();
int count = 0;
while (keys.hasNext()) {
final String key = keys.next();
if (key.startsWith("widgets/")) {
continue;
}
Button buttonItem = new Button(game.skin);
Image img = null;
if (items.get(key) instanceof Drawable) {
img = new Image((Drawable) items.get(key));
} else {
img = new Image((TextureRegion) items.get(key));
}
if (zoom == true) {
buttonItem.add(img).expand().fill().pad(5);
} else {
buttonItem.add(img).expand().pad(5);
}
buttonItem.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
if (field == null) {
return;
}
try {
// game.screenMain.paneOptions.refreshSelection();
if (items.get(key) instanceof Drawable) {
field.set(game.screenMain.paneOptions.currentStyle, items.get(key));
} else {
boolean ninepatch = false;
FileHandle test = new FileHandle("projects/" + game.screenMain.getcurrentProject() + "/assets/" + key + ".9.png");
if (test.exists() == true) {
ninepatch = true;
}
if (ninepatch == true) {
game.skinProject.add(key, new NinePatchDrawable(new NinePatch((TextureRegion) items.get(key))));
field.set(game.screenMain.paneOptions.currentStyle, game.skinProject.getDrawable(key));
} else {
game.skinProject.add(key, new SpriteDrawable(new Sprite((TextureRegion) items.get(key))));
field.set(game.screenMain.paneOptions.currentStyle, game.skinProject.getDrawable(key));
}
}
game.screenMain.saveToSkin();
hide();
game.screenMain.panePreview.refresh();
game.screenMain.paneOptions.updateSelectedTableFields();
} catch (Exception e) {
e.printStackTrace();
}
}
});
String objectType = items.get(key).getClass().getSimpleName();
objectType = objectType.replace("Drawable", "");
buttonItem.row();
buttonItem.add(new Label(key, game.skin));
buttonItem.row();
buttonItem.add(new Label(objectType, game.skin, "title"));
buttonItem.row();
buttonItem.setClip(true);
tableDrawables.add(buttonItem).width(160).height(184).pad(5);
if (count == 4) {
count = 0;
tableDrawables.row();
continue;
}
count++;
}
}
Aggregations