1 /******************************************************************************* 2 * Copyright 2011 See AUTHORS file. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 ******************************************************************************/ 16 17 package com.badlogic.gdx.tests; 18 19 import com.badlogic.gdx.Gdx; 20 import com.badlogic.gdx.graphics.Color; 21 import com.badlogic.gdx.graphics.GL20; 22 import com.badlogic.gdx.graphics.Texture; 23 import com.badlogic.gdx.graphics.g2d.BitmapFont; 24 import com.badlogic.gdx.scenes.scene2d.InputEvent; 25 import com.badlogic.gdx.scenes.scene2d.Stage; 26 import com.badlogic.gdx.scenes.scene2d.ui.Image; 27 import com.badlogic.gdx.scenes.scene2d.ui.Label; 28 import com.badlogic.gdx.scenes.scene2d.ui.Table; 29 import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; 30 import com.badlogic.gdx.scenes.scene2d.ui.Skin; 31 import com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop; 32 import com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop.Payload; 33 import com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop.Source; 34 import com.badlogic.gdx.scenes.scene2d.utils.DragAndDrop.Target; 35 import com.badlogic.gdx.tests.utils.GdxTest; 36 37 public class DragAndDropTest extends GdxTest { 38 Stage stage; 39 create()40 public void create () { 41 stage = new Stage(); 42 Gdx.input.setInputProcessor(stage); 43 44 final Skin skin = new Skin(); 45 skin.add("default", new LabelStyle(new BitmapFont(), Color.WHITE)); 46 skin.add("badlogic", new Texture("data/badlogic.jpg")); 47 48 Image sourceImage = new Image(skin, "badlogic"); 49 sourceImage.setBounds(50, 125, 100, 100); 50 stage.addActor(sourceImage); 51 52 Image validTargetImage = new Image(skin, "badlogic"); 53 validTargetImage.setBounds(200, 50, 100, 100); 54 stage.addActor(validTargetImage); 55 56 Image invalidTargetImage = new Image(skin, "badlogic"); 57 invalidTargetImage.setBounds(200, 200, 100, 100); 58 stage.addActor(invalidTargetImage); 59 60 DragAndDrop dragAndDrop = new DragAndDrop(); 61 dragAndDrop.addSource(new Source(sourceImage) { 62 public Payload dragStart (InputEvent event, float x, float y, int pointer) { 63 Payload payload = new Payload(); 64 payload.setObject("Some payload!"); 65 66 payload.setDragActor(new Label("Some payload!", skin)); 67 68 Label validLabel = new Label("Some payload!", skin); 69 validLabel.setColor(0, 1, 0, 1); 70 payload.setValidDragActor(validLabel); 71 72 Label invalidLabel = new Label("Some payload!", skin); 73 invalidLabel.setColor(1, 0, 0, 1); 74 payload.setInvalidDragActor(invalidLabel); 75 76 return payload; 77 } 78 }); 79 dragAndDrop.addTarget(new Target(validTargetImage) { 80 public boolean drag (Source source, Payload payload, float x, float y, int pointer) { 81 getActor().setColor(Color.GREEN); 82 return true; 83 } 84 85 public void reset (Source source, Payload payload) { 86 getActor().setColor(Color.WHITE); 87 } 88 89 public void drop (Source source, Payload payload, float x, float y, int pointer) { 90 System.out.println("Accepted: " + payload.getObject() + " " + x + ", " + y); 91 } 92 }); 93 dragAndDrop.addTarget(new Target(invalidTargetImage) { 94 public boolean drag (Source source, Payload payload, float x, float y, int pointer) { 95 getActor().setColor(Color.RED); 96 return false; 97 } 98 99 public void reset (Source source, Payload payload) { 100 getActor().setColor(Color.WHITE); 101 } 102 103 public void drop (Source source, Payload payload, float x, float y, int pointer) { 104 } 105 }); 106 } 107 render()108 public void render () { 109 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 110 stage.act(Gdx.graphics.getDeltaTime()); 111 stage.draw(); 112 } 113 resize(int width, int height)114 public void resize (int width, int height) { 115 stage.getViewport().update(width, height, true); 116 } 117 dispose()118 public void dispose () { 119 stage.dispose(); 120 } 121 } 122