/*******************************************************************************
* 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;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.HdpiUtils;
import com.badlogic.gdx.tests.utils.GdxTest;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Scaling;
import com.badlogic.gdx.utils.viewport.ExtendViewport;
import com.badlogic.gdx.utils.viewport.ScalingViewport;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
/** Cycles viewports while rendering with SpriteBatch, also shows how to draw in the black bars. */
public class ViewportTest2 extends GdxTest {
Array<Viewport> viewports;
Viewport viewport;
Array<String> names;
String name;
private SpriteBatch batch;
private Texture texture;
private BitmapFont font;
private OrthographicCamera camera;
public void create () {
font = new BitmapFont();
font.setColor(0, 0, 0, 1);
Pixmap pixmap = new Pixmap(16, 16, Format.RGBA8888);
pixmap.setColor(1, 1, 1, 1);
pixmap.fill();
texture = new Texture(pixmap);
batch = new SpriteBatch();
camera = new OrthographicCamera();
camera.position.set(100, 100, 0);
camera.update();
viewports = ViewportTest1.getViewports(camera);
viewport = viewports.first();
names = ViewportTest1.getViewportNames();
name = names.first();
Gdx.input.setInputProcessor(new InputAdapter() {
public boolean keyDown (int keycode) {
if (keycode == Input.Keys.SPACE) {
int index = (viewports.indexOf(viewport, true) + 1) % viewports.size;
name = names.get(index);
viewport = viewports.get(index);
resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
return false;
}
});
}
public void render () {
batch.setProjectionMatrix(camera.projection);
batch.setTransformMatrix(camera.view);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
// draw a white background so we are able to see the black bars
batch.setColor(1, 1, 1, 1);
batch.draw(texture, -4096, -4096, 4096, 4096, 8192, 8192, 1, 1, 0, 0, 0, 16, 16, false, false);
batch.setColor(1, 0, 0, 1);
batch.draw(texture, 150, 100, 16, 16, 32, 32, 1, 1, 45, 0, 0, 16, 16, false, false);
font.draw(batch, viewport.getClass().getSimpleName(), 150, 100);
batch.end();
if (viewport instanceof ScalingViewport) {
// This shows how to set the viewport to the whole screen and draw within the black bars.
ScalingViewport scalingViewport = (ScalingViewport)viewport;
int screenWidth = Gdx.graphics.getWidth();
int screenHeight = Gdx.graphics.getHeight();
HdpiUtils.glViewport(0, 0, screenWidth, screenHeight);
batch.getProjectionMatrix().idt().setToOrtho2D(0, 0, screenWidth, screenHeight);
batch.getTransformMatrix().idt();
batch.begin();
float leftGutterWidth = scalingViewport.getLeftGutterWidth();
if (leftGutterWidth > 0) {
batch.draw(texture, 0, 0, leftGutterWidth, screenHeight);
batch.draw(texture, scalingViewport.getRightGutterX(), 0, scalingViewport.getRightGutterWidth(), screenHeight);
}
float bottomGutterHeight = scalingViewport.getBottomGutterHeight();
if (bottomGutterHeight > 0) {
batch.draw(texture, 0, 0, screenWidth, bottomGutterHeight);
batch.draw(texture, 0, scalingViewport.getTopGutterY(), screenWidth, scalingViewport.getTopGutterHeight());
}
batch.end();
viewport.update(screenWidth, screenHeight, true); // Restore viewport.
}
}
public void resize (int width, int height) {
System.out.println(name);
viewport.update(width, height);
}
public void dispose () {
texture.dispose();
batch.dispose();
}
}