[libgdx] SkeletonViewer, don't use additive for track 0. Improved UI disable states.

This commit is contained in:
Nathan Sweet 2022-09-29 11:43:02 -04:00
parent 7e440c28ae
commit 5d1852662c
3 changed files with 24 additions and 8 deletions

View File

@ -12,6 +12,7 @@ com.badlogic.gdx.scenes.scene2d.ui.Skin$TintedDrawable: {
selection: { name: white, color: selection },
dim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.3 } },
list-selection: { name: list-selection, color: selection },
slider-handle-disabled: { name: slider-handle, color: disabled },
},
com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
default: {
@ -61,6 +62,6 @@ com.badlogic.gdx.scenes.scene2d.ui.CheckBox$CheckBoxStyle: {
},
},
com.badlogic.gdx.scenes.scene2d.ui.Slider$SliderStyle: {
default-horizontal: { background: slider-bg, knob: slider-handle },
default-horizontal: { background: slider-bg, knob: slider-handle, disabledKnob: slider-handle-disabled },
},
}

View File

@ -209,7 +209,7 @@ public class SkeletonViewer extends ApplicationAdapter {
entry = state.setAnimation(track, ui.animationList.getSelected(), ui.loopCheckbox.isChecked());
entry.setHoldPrevious(track > 0 && ui.holdPrevCheckbox.isChecked());
}
entry.setMixBlend(ui.addCheckbox.isChecked() ? MixBlend.add : MixBlend.replace);
entry.setMixBlend(track > 0 && ui.addCheckbox.isChecked() ? MixBlend.add : MixBlend.replace);
entry.setReverse(ui.reverseCheckbox.isChecked());
entry.setAlpha(ui.alphaSlider.getValue());
}

View File

@ -62,6 +62,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
import com.badlogic.gdx.scenes.scene2d.ui.Window;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.Null;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
@ -125,7 +126,9 @@ class SkeletonViewerUI {
ButtonGroup<TextButton> trackButtons = new ButtonGroup();
CheckBox loopCheckbox = new CheckBox("Loop", skin);
CheckBox addCheckbox = new CheckBox("Add", skin);
CheckBox reverseCheckbox = new CheckBox("Reverse", skin);
CheckBox holdPrevCheckbox = new HigherTrackCheckBox("Hold previous");
CheckBox addCheckbox = new HigherTrackCheckBox("Add");
Slider alphaSlider = new Slider(0, 1, 0.01f, false, skin);
Label alphaLabel = new Label("100%", skin);
@ -137,9 +140,6 @@ class SkeletonViewerUI {
Label speedLabel = new Label("1.0x", skin);
TextButton speedResetButton = new TextButton("Reset", skin);
CheckBox reverseCheckbox = new CheckBox("Reverse", skin);
CheckBox holdPrevCheckbox = new CheckBox("Hold previous", skin);
Slider mixSlider = new Slider(0, 4, 0.01f, false, skin);
Label mixLabel = new Label("0.3s", skin);
@ -194,6 +194,7 @@ class SkeletonViewerUI {
alphaSlider.setValue(1);
alphaSlider.setDisabled(true);
alphaLabel.setColor(skin.getColor("disabled"));
addCheckbox.setDisabled(true);
holdPrevCheckbox.setDisabled(true);
@ -557,6 +558,7 @@ class SkeletonViewerUI {
animationList.getSelection().setProgrammaticChangeEvents(true);
alphaSlider.setDisabled(track == 0);
alphaLabel.setColor(track == 0 ? skin.getColor("disabled") : Color.WHITE);
alphaSlider.setValue(current == null ? 1 : current.alpha);
addCheckbox.setDisabled(track == 0);
@ -564,9 +566,11 @@ class SkeletonViewerUI {
if (current != null) {
loopCheckbox.setChecked(current.getLoop());
addCheckbox.setChecked(current.getMixBlend() == MixBlend.add);
reverseCheckbox.setChecked(current.getReverse());
holdPrevCheckbox.setChecked(current.getHoldPrevious());
if (track > 0) {
addCheckbox.setChecked(current.getMixBlend() == MixBlend.add);
holdPrevCheckbox.setChecked(current.getHoldPrevious());
}
}
}
};
@ -762,4 +766,15 @@ class SkeletonViewerUI {
ex.printStackTrace();
}
}
class HigherTrackCheckBox extends CheckBox {
public HigherTrackCheckBox (String text) {
super(text, skin);
}
protected Drawable getImageDrawable () {
if (trackButtons.getCheckedIndex() == 0) return getStyle().checkboxOffDisabled;
return super.getImageDrawable();
}
}
}