/******************************************************************************* * Copyright 2014 Rafael Garcia Moreno. * * 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.bladecoder.engineeditor.ui; import java.io.IOException; import java.util.List; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; import com.bladecoder.engineeditor.Ctx; import com.bladecoder.engineeditor.common.EditorLogger; import com.bladecoder.engineeditor.common.ImageUtils; import com.bladecoder.engineeditor.common.Message; import com.bladecoder.engineeditor.model.Project; import com.bladecoder.engineeditor.ui.panels.EditDialog; import com.bladecoder.engineeditor.ui.panels.FileInputPanel; import com.bladecoder.engineeditor.ui.panels.InputPanel; import com.bladecoder.engineeditor.ui.panels.InputPanelFactory; public class CreateAtlasDialog extends EditDialog { private static final String INFO = "Package all the images in the selected dir to a new atlas"; private static final String[] FILTERS = { "Linear", "Nearest", "MipMap", "MipMapLinearLinear", "MipMapLinearNearest", "MipMapNearestLinear", "MipMapNearestNearest" }; private InputPanel name; private InputPanel dir; private InputPanel filterMin; private InputPanel filterMag; public CreateAtlasDialog(Skin skin) { super("CREATE ATLAS", skin); name = InputPanelFactory.createInputPanel(skin, "Atlas Name", "The name of the sprite atlas", true); dir = new FileInputPanel(skin, "Input Image Directory", "Select the output directory with the images to create the Atlas", FileInputPanel.DialogType.DIRECTORY); filterMin = InputPanelFactory.createInputPanel(skin, "Min Filter", "The filter when the texture is scaled down", FILTERS, true); filterMag = InputPanelFactory.createInputPanel(skin, "Mag Filter", "The filter when the texture is scaled up", FILTERS, true); addInputPanel(name); addInputPanel(dir); addInputPanel(filterMin); addInputPanel(filterMag); filterMin.setText(FILTERS[0]); filterMag.setText(FILTERS[0]); setInfo(INFO); } @Override protected void ok() { Message.showMsg(getStage(), "Generating atlas...", true); Timer.schedule(new Task() { @Override public void run() { genAtlas(); } },1); } @Override protected boolean validateFields() { boolean ok = true; if (!dir.validateField()) ok = false; if (!name.validateField()) ok = false; return ok; } private void genAtlas() { String outdir = Ctx.project.getProjectPath() + Project.ATLASES_PATH; List<String> res = Ctx.project.getResolutions(); String name = this.name.getText(); String fMin = filterMin.getText(); String fMag = filterMag.getText(); TextureFilter filterMin = null, filterMag = null; if (fMin.equals("Linear")) filterMin = TextureFilter.Linear; else if (fMin.equals("Nearest")) filterMin = TextureFilter.Nearest; else if (fMin.equals("MipMap")) filterMin = TextureFilter.MipMap; else if (fMin.equals("MipMapLinearLinear")) filterMin = TextureFilter.MipMapLinearLinear; else if (fMin.equals("MipMapLinearNearest")) filterMin = TextureFilter.MipMapLinearNearest; else if (fMin.equals("MipMapNearestLinear")) filterMin = TextureFilter.MipMapNearestLinear; else if (fMin.equals("MipMapNearestNearest")) filterMin = TextureFilter.MipMapNearestNearest; if (fMag.equals("Linear")) filterMag = TextureFilter.Linear; else if (fMag.equals("Nearest")) filterMag = TextureFilter.Nearest; else if (fMag.equals("MipMap")) filterMag = TextureFilter.MipMap; else if (fMag.equals("MipMapLinearLinear")) filterMag = TextureFilter.MipMapLinearLinear; else if (fMag.equals("MipMapLinearNearest")) filterMag = TextureFilter.MipMapLinearNearest; else if (fMag.equals("MipMapNearestLinear")) filterMag = TextureFilter.MipMapNearestLinear; else if (fMag.equals("MipMapNearestNearest")) filterMag = TextureFilter.MipMapNearestNearest; for (String r : res) { float scale = Float.parseFloat(r); try { ImageUtils.createAtlas(dir.getText(), outdir + "/" + r, name + ".atlas", scale, filterMin, filterMag); } catch (IOException e) { EditorLogger.error(e.getMessage()); Message.showMsgDialog(getStage(), "Error creating atlas", e.getMessage()); return; } } Message.hideMsg(); } }