/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.tests.lwjgl3; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Graphics; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3WindowConfiguration; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.tests.utils.GdxTests; import com.badlogic.gdx.utils.viewport.ScreenViewport; public class Lwjgl3TestStarter { public static void main (String[] argv) { System.setProperty("java.awt.headless", "true"); Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration(); config.setWindowedMode(640, 480); new Lwjgl3Application(new TestChooser(), config); } private static class TestChooser extends ApplicationAdapter { private Stage stage; private Skin skin; private TextButton lastClickedTestButton; public void create () { final Preferences prefs = Gdx.app.getPreferences("lwjgl3-tests"); stage = new Stage(new ScreenViewport()); Gdx.input.setInputProcessor(stage); skin = new Skin(Gdx.files.internal("data/uiskin.json")); Table container = new Table(); stage.addActor(container); container.setFillParent(true); Table table = new Table(); ScrollPane scroll = new ScrollPane(table, skin); scroll.setSmoothScrolling(false); scroll.setFadeScrollBars(false); stage.setScrollFocus(scroll); int tableSpace = 4; table.pad(10).defaults().expandX().space(tableSpace); for (final String testName : GdxTests.getNames()) { final TextButton testButton = new TextButton(testName, skin); testButton.setName(testName); table.add(testButton).fillX(); table.row(); testButton.addListener(new ClickListener() { public void clicked (InputEvent event, float x, float y) { ApplicationListener test = GdxTests.newTest(testName); Lwjgl3WindowConfiguration winConfig = new Lwjgl3WindowConfiguration(); winConfig.setTitle(testName); winConfig.setWindowedMode(640, 480); winConfig.setWindowPosition(((Lwjgl3Graphics)Gdx.graphics).getWindow().getPositionX() + 40, ((Lwjgl3Graphics)Gdx.graphics).getWindow().getPositionY() + 40); ((Lwjgl3Application)Gdx.app).newWindow(test, winConfig); System.out.println("Started test: " + testName); prefs.putString("LastTest", testName); prefs.flush(); if (testButton != lastClickedTestButton) { testButton.setColor(Color.CYAN); if (lastClickedTestButton != null) { lastClickedTestButton.setColor(Color.WHITE); } lastClickedTestButton = testButton; } } }); } container.add(scroll).expand().fill(); container.row(); lastClickedTestButton = (TextButton)table.findActor(prefs.getString("LastTest")); if (lastClickedTestButton != null) { lastClickedTestButton.setColor(Color.CYAN); scroll.layout(); float scrollY = lastClickedTestButton.getY() + scroll.getScrollHeight() / 2 + lastClickedTestButton.getHeight() / 2 + tableSpace * 2 + 20; scroll.scrollTo(0, scrollY, 0, 0, false, false); // Since ScrollPane takes some time for scrolling to a position, we just "fake" time stage.act(1f); stage.act(1f); stage.draw(); } } @Override public void render () { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(); stage.draw(); } @Override public void resize (int width, int height) { stage.getViewport().update(width, height, true); } @Override public void dispose () { skin.dispose(); stage.dispose(); } } }