]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph.swing/src/org/simantics/scenegraph/example/SGCanvas.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph.swing / src / org / simantics / scenegraph / example / SGCanvas.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.scenegraph.example;
13
14 import java.awt.Graphics;
15 import java.awt.Graphics2D;
16 import java.awt.Rectangle;
17 import java.awt.event.FocusEvent;
18 import java.awt.event.FocusListener;
19 import java.awt.event.KeyEvent;
20 import java.awt.event.KeyListener;
21 import java.awt.event.MouseEvent;
22 import java.awt.event.MouseListener;
23 import java.awt.event.MouseMotionListener;
24 import java.awt.event.MouseWheelEvent;
25 import java.awt.event.MouseWheelListener;
26 import java.awt.image.VolatileImage;
27
28 import javax.swing.JComponent;
29
30 import org.simantics.scenegraph.g2d.G2DFocusManager;
31 import org.simantics.scenegraph.g2d.G2DSceneGraph;
32
33 public class SGCanvas extends JComponent implements MouseListener, MouseMotionListener, MouseWheelListener, KeyListener, FocusListener {
34         /**
35          * 
36          */
37         private static final long serialVersionUID = -7835590396125816119L;
38         
39         private G2DSceneGraph scenegraph = null;
40     private VolatileImage buffer = null;
41     
42         public SGCanvas() {
43                 setFocusable(true);     
44         }
45         
46         public void initListeners() {
47         addKeyListener(this);
48         addMouseWheelListener(this);
49         addMouseListener(this);
50         addMouseMotionListener(this);
51         addFocusListener(this);
52         }
53         
54         @Override
55     public void paintComponent(Graphics g) {
56         if (scenegraph == null) return;        
57         Graphics2D      g2d             = (Graphics2D) g;
58         Rectangle       b               = getBounds();
59
60         int newWidth = b.width;
61         int newHeight = b.height;
62
63         if (buffer == null) {
64             buffer = createVolatileImage(newWidth, newHeight);
65         } else {
66             int w = buffer.getWidth();
67             int h = buffer.getHeight();
68             if (w != newWidth || h != newHeight) {
69                 buffer = createVolatileImage(newWidth, newHeight);
70             } else {
71                 int valid = buffer.validate(g2d.getDeviceConfiguration());
72                 if (valid == VolatileImage.IMAGE_INCOMPATIBLE) {
73                     buffer = createVolatileImage(newWidth, newHeight);
74                 }
75             }
76         }
77
78         Graphics2D bg = (Graphics2D) buffer.getGraphics();
79
80         bg.setClip((int)b.getMinX(), (int)b.getMinY(), (int)b.getWidth(), (int)b.getHeight());
81         scenegraph.render(bg);
82         g2d.drawImage(buffer, 0, 0, null);
83     }
84         
85         public void setSceneGraph(G2DSceneGraph scenegraph) {
86                 this.scenegraph = scenegraph;
87                 scenegraph.setRootPane(this);
88         }
89         
90         public G2DSceneGraph getSceneGraph() {
91                 return scenegraph;
92         }
93
94         @Override
95         public void mouseWheelMoved(MouseWheelEvent event) {
96                 if(scenegraph != null) {
97                         scenegraph.getEventDelegator().mouseWheelMoved(event);
98                         repaint();
99                 }
100         }
101
102         @Override
103         public void keyPressed(KeyEvent event) {
104                 if(scenegraph != null)
105                         scenegraph.getEventDelegator().keyPressed(event);
106         }
107
108         @Override
109         public void keyReleased(KeyEvent event) {
110                 if(scenegraph != null)
111                         scenegraph.getEventDelegator().keyReleased(event);
112         }
113
114         @Override
115         public void keyTyped(KeyEvent event) {
116                 if(scenegraph != null)
117                         scenegraph.getEventDelegator().keyTyped(event);
118         }
119
120         @Override
121         public void focusGained(FocusEvent event) {
122                 if(scenegraph != null)
123                         scenegraph.getEventDelegator().focusGained(event);
124         }
125
126         @Override
127         public void focusLost(FocusEvent event) {
128                 if(scenegraph != null)
129                         scenegraph.getEventDelegator().focusLost(event);
130         }
131
132         @Override
133         public void mouseClicked(MouseEvent event) {
134                 if(scenegraph != null) {
135                         scenegraph.getEventDelegator().mouseClicked(event);
136                         repaint();
137                 }
138         }
139
140         @Override
141         public void mouseEntered(MouseEvent event) {
142                 if(scenegraph != null)
143                         scenegraph.getEventDelegator().mouseEntered(event);
144         }
145
146         @Override
147         public void mouseExited(MouseEvent event) {
148                 if(scenegraph != null)
149                         scenegraph.getEventDelegator().mouseExited(event);
150         }
151
152         @Override
153         public void mousePressed(MouseEvent event) {
154                 if(scenegraph != null) {
155                         G2DFocusManager.INSTANCE.clearFocus();
156                         scenegraph.getEventDelegator().mousePressed(event);
157                         if(G2DFocusManager.INSTANCE.getFocusOwner() == null) {
158                                 this.requestFocusInWindow();
159                         }
160                         repaint();
161                 }
162         }
163
164         @Override
165         public void mouseReleased(MouseEvent event) {
166                 if(scenegraph != null)
167                         scenegraph.getEventDelegator().mouseReleased(event);
168         }
169
170         @Override
171         public void mouseDragged(MouseEvent event) {
172                 if(scenegraph != null) {
173                         scenegraph.getEventDelegator().mouseDragged(event);
174                         repaint();
175                 }
176         }
177
178         @Override
179         public void mouseMoved(MouseEvent event) {
180                 if(scenegraph != null)
181                         scenegraph.getEventDelegator().mouseMoved(event);
182         }
183
184 }