PageRenderTime 54ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/engine_java/000_Engine_G2D/new_g2d_awt/com/g2d/java2d/CommonCanvasAdapter.java

http://cellengine.googlecode.com/
Java | 760 lines | 507 code | 101 blank | 152 comment | 70 complexity | fef36a4e36ec0877819cce071401ca79 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0, BSD-3-Clause, AGPL-3.0, LGPL-2.1, Apache-2.0, MPL-2.0-no-copyleft-exception, CPL-1.0
  1. package com.g2d.java2d;
  2. import java.applet.Applet;
  3. import java.awt.AWTKeyStroke;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Cursor;
  7. import java.awt.Dimension;
  8. import java.awt.Font;
  9. import java.awt.Graphics2D;
  10. import java.awt.GraphicsConfiguration;
  11. import java.awt.Image;
  12. import java.awt.KeyboardFocusManager;
  13. import java.awt.Point;
  14. import java.awt.Transparency;
  15. import java.awt.Window;
  16. import java.awt.event.FocusEvent;
  17. import java.awt.event.FocusListener;
  18. import java.awt.event.KeyEvent;
  19. import java.awt.event.KeyListener;
  20. import java.awt.event.MouseEvent;
  21. import java.awt.event.MouseListener;
  22. import java.awt.event.MouseMotionListener;
  23. import java.awt.event.MouseWheelEvent;
  24. import java.awt.event.MouseWheelListener;
  25. import java.awt.image.VolatileImage;
  26. import java.util.Collections;
  27. import java.util.HashMap;
  28. import java.util.HashSet;
  29. import java.util.concurrent.atomic.AtomicReference;
  30. import com.cell.exception.NotImplementedException;
  31. import com.g2d.AnimateCursor;
  32. import com.g2d.Engine;
  33. import com.g2d.Tools;
  34. import com.g2d.display.DisplayObject;
  35. import com.g2d.display.DisplayObjectContainer;
  36. import com.g2d.display.Stage;
  37. import com.g2d.display.event.Event;
  38. import com.g2d.display.event.TextInputer;
  39. public abstract class CommonCanvasAdapter implements
  40. com.g2d.Canvas,
  41. KeyListener,
  42. MouseListener,
  43. MouseMotionListener,
  44. MouseWheelListener,
  45. FocusListener
  46. {
  47. final private Component component;
  48. // game stage
  49. private int stageWidth = 800;
  50. private int stageHeight = 600;
  51. private Stage currentStage = null;
  52. private Class<?> nextStageClass = null;
  53. private Object[] nextStageArgs;
  54. private Stage nextStage;
  55. transient private long prewUpdateTime = 0;
  56. private int framedelay = 30;
  57. private int framedelay_unactive = 1000;
  58. private double fps;
  59. private float size_rate_x;
  60. private float size_rate_y;
  61. private int mousex;
  62. private int mousey;
  63. private long last_update_time = 0;
  64. private int update_interval = 0;
  65. // private ConcurrentLinkedQueue<Event<?>> event_queue = new ConcurrentLinkedQueue<Event<?>>();
  66. private AtomicReference<Class<?>> last_stage_type = new AtomicReference<Class<?>>();
  67. private HashMap<Integer, KeyEvent> keystate = new HashMap<Integer, KeyEvent>(); // hold state
  68. private HashMap<Integer, KeyEvent> keystate_down = new HashMap<Integer, KeyEvent>(); // ????
  69. private HashMap<Integer, KeyEvent> keystate_up = new HashMap<Integer, KeyEvent>(); // ????
  70. private HashMap<Integer, KeyEvent> keystate_query_down = new HashMap<Integer, KeyEvent>(); // ????
  71. private HashMap<Integer, KeyEvent> keystate_query_up = new HashMap<Integer, KeyEvent>(); // ????
  72. private HashMap<Integer, MouseEvent> mousestate = new HashMap<Integer, MouseEvent>();
  73. private HashMap<Integer, MouseEvent> mousestate_down = new HashMap<Integer, MouseEvent>();
  74. private HashMap<Integer, MouseEvent> mousestate_up = new HashMap<Integer, MouseEvent>();
  75. private HashMap<Integer, MouseEvent> mousestate_query_down = new HashMap<Integer, MouseEvent>();
  76. private HashMap<Integer, MouseEvent> mousestate_query_up = new HashMap<Integer, MouseEvent>();
  77. private HashMap<Integer, Long> mousestate_prev_down_time = new HashMap<Integer, Long>();
  78. private HashMap<Integer, MouseEvent> mousestate_prev_down_pos = new HashMap<Integer, MouseEvent>();
  79. private HashMap<Integer, MouseWheelEvent> mousewheel = new HashMap<Integer, MouseWheelEvent>();
  80. private HashMap<Integer, MouseWheelEvent> mousewheel_query = new HashMap<Integer, MouseWheelEvent>();
  81. private final int[] KEYCODES_4_TEMP = new int[]{};
  82. private com.g2d.Font defaultFont;
  83. private AnimateCursor defaultCursor;
  84. private AnimateCursor nextCursor;
  85. // --------------------------------------------------------------------------------------------------------------------------
  86. // construction
  87. public CommonCanvasAdapter(
  88. Component comp,
  89. int stage_width,
  90. int stage_height)
  91. {
  92. component = comp;
  93. stageWidth = stage_width;
  94. stageHeight = stage_height;
  95. component.addKeyListener(this);
  96. component.addMouseListener(this);
  97. component.addMouseMotionListener(this);
  98. component.addMouseWheelListener(this);
  99. component.addFocusListener(this);
  100. //
  101. component.setFocusable(true);
  102. component.setEnabled(true);
  103. component.enableInputMethods(true);
  104. KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
  105. kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, new HashSet<AWTKeyStroke>());
  106. kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, new HashSet<AWTKeyStroke>());
  107. component.setSize(stageWidth, stageHeight);
  108. component.setMinimumSize(new Dimension(100,100));
  109. }
  110. public Component getComponent() {
  111. return component;
  112. }
  113. public boolean isFocusOwner() {
  114. return component.isFocusOwner();
  115. }
  116. public void setDefaultCursor(AnimateCursor cursor) {
  117. defaultCursor = cursor;
  118. }
  119. public void setDefaultFont(com.g2d.Font font) {
  120. defaultFont = font;
  121. }
  122. public com.g2d.Font getDefaultFont() {
  123. return defaultFont;
  124. }
  125. // --------------------------------------------------------------------------------------------------------------------------
  126. // stage
  127. // --------------------------------------------------------------------------------------------------------------------------
  128. /**
  129. * ????
  130. * @param stage
  131. * @param args ?????????Stage.inited(Object[] args)??stage
  132. */
  133. public void changeStage(Stage stage, Object ... args) {
  134. nextStage = stage;
  135. nextStageArgs = args;
  136. if (currentStage!=null) {
  137. currentStage.startTransitionOut();
  138. }
  139. }
  140. // /**
  141. // * ????
  142. // * @param stageName
  143. // * @param args ?????????Stage.inited(Object[] args)??stage
  144. // */
  145. // @SuppressWarnings("unchecked")
  146. // public void changeStage(String stageName, Object ... args) {
  147. // try {
  148. // this.changeStage((Class<Stage>) Class.forName(stageName), args);
  149. // } catch (Exception e) {
  150. // e.printStackTrace();
  151. // }
  152. // }
  153. /**
  154. * ????
  155. * @param stageClass
  156. * @param args ?????????Stage.inited(Object[] args)??stage
  157. */
  158. public void changeStage(Class<? extends Stage> stageClass, Object ... args){
  159. nextStageClass = stageClass;
  160. nextStageArgs = args;
  161. if (currentStage!=null) {
  162. currentStage.startTransitionOut();
  163. }
  164. }
  165. /***
  166. * ????????
  167. * @param stage
  168. */
  169. public void setStage(Stage stage) {
  170. if (currentStage != null) {
  171. currentStage.onRemoved(this);
  172. currentStage = null;
  173. }
  174. if (stage != null) {
  175. currentStage = stage;
  176. currentStage.setSize(stageWidth, stageHeight);
  177. currentStage.inited(this, nextStageArgs);
  178. currentStage.onAdded(this, stageWidth, stageHeight);
  179. currentStage.startTransitionIn();
  180. }
  181. }
  182. /**
  183. * ????????
  184. * @param width
  185. * @param height
  186. */
  187. public void setStageSize(int width, int height)
  188. {
  189. stageWidth = width;
  190. stageHeight = height;
  191. }
  192. public int getStageWidth() {
  193. return stageWidth;
  194. }
  195. public int getStageHeight() {
  196. return stageHeight;
  197. }
  198. public Stage getStage() {
  199. return currentStage;
  200. }
  201. public Class<?> getLastStageType() {
  202. return last_stage_type.get();
  203. }
  204. // --------------------------------------------------------------------------------------------------------------------------
  205. // update and transition
  206. // --------------------------------------------------------------------------------------------------------------------------
  207. /**
  208. * ????????
  209. * @param fps
  210. */
  211. public void setFPS(double fps) {
  212. framedelay = (int)(1000 / fps);
  213. }
  214. /**
  215. * ????????ms
  216. * @return
  217. */
  218. public int getFrameDelay() {
  219. return framedelay;
  220. }
  221. public void setUnactiveFPS(double fps) {
  222. framedelay_unactive = (int)(1000 / fps);
  223. }
  224. public int getUnactiveFrameDelay() {
  225. return framedelay_unactive;
  226. }
  227. /**
  228. * ????????
  229. * @return
  230. */
  231. public int getFPS() {
  232. return (int)fps;
  233. }
  234. @Override
  235. public int getUpdateIntervalMS() {
  236. return update_interval;
  237. }
  238. // --------------------------------------------------------------------------------------------------------------------------
  239. // game
  240. // --------------------------------------------------------------------------------------------------------------------------
  241. protected float getMouseSizeRateW(int stageWidth) {
  242. return (float)stageWidth / getComponent().getWidth();
  243. }
  244. protected float getMouseSizeRateH(int stageWidth) {
  245. return (float)stageHeight/ getComponent().getHeight();
  246. }
  247. // public void repaint_game() {
  248. // component.repaint(0, 0, 0, getWidth(), getHeight());
  249. // }
  250. public void update(java.awt.Graphics2D g2d)
  251. {
  252. // GraphicsConfiguration gc = ((Graphics2D)g).getDeviceConfiguration();
  253. try
  254. {
  255. if (last_update_time == 0) {
  256. update_interval = 0;
  257. } else {
  258. update_interval = (int)(System.currentTimeMillis() - last_update_time);
  259. }
  260. last_update_time = System.currentTimeMillis();
  261. fixMouse() ;
  262. queryKey();
  263. size_rate_x = getMouseSizeRateW(stageWidth);
  264. size_rate_y = getMouseSizeRateH(stageHeight);
  265. nextCursor = null;
  266. updateStage(g2d, currentStage);
  267. if (currentStage != null) {
  268. nextCursor = currentStage.getCursor();
  269. }
  270. if (nextCursor instanceof CommonAnimateCursor) {
  271. getComponent().setCursor(((CommonAnimateCursor)nextCursor).update());
  272. } else if (defaultCursor instanceof CommonAnimateCursor) {
  273. getComponent().setCursor(((CommonAnimateCursor)defaultCursor).update());
  274. } else {
  275. getComponent().setCursor(Cursor.getDefaultCursor());
  276. }
  277. tryChageStage();
  278. double updatetime = System.currentTimeMillis() - prewUpdateTime;
  279. if (updatetime>0){
  280. fps = (int)(1000.0D / updatetime);
  281. }
  282. prewUpdateTime = System.currentTimeMillis();
  283. } catch (Throwable e) {
  284. e.printStackTrace();
  285. }
  286. }
  287. protected abstract void updateStage(java.awt.Graphics2D g2d, Stage currentStage);
  288. protected void tryChageStage()
  289. {
  290. if (nextStageClass != null || nextStage != null)
  291. {
  292. // clear current stage
  293. if(currentStage!=null)
  294. {
  295. if (!currentStage.isTransition())
  296. {
  297. currentStage.onRemoved(this);
  298. last_stage_type.set(currentStage.getClass());
  299. currentStage = null;
  300. System.gc();
  301. }
  302. }
  303. else
  304. {
  305. if (nextStageClass != null)
  306. {
  307. try {
  308. currentStage = (Stage) nextStageClass.newInstance();
  309. } catch (Exception e) {
  310. e.printStackTrace();
  311. }
  312. }
  313. else if (nextStage != null)
  314. {
  315. currentStage = nextStage;
  316. }
  317. System.out.println("ChangeStage -> "+ currentStage.getClass().getName());
  318. {
  319. currentStage.setSize(stageWidth, stageHeight);
  320. currentStage.inited(this, nextStageArgs);
  321. currentStage.onAdded(this, stageWidth, stageHeight);
  322. currentStage.startTransitionIn();
  323. nextStage = null;
  324. nextStageClass = null;
  325. nextStageArgs = null;
  326. System.gc();
  327. Thread.yield();
  328. }
  329. System.out.println("Memory Status : " + (Runtime.getRuntime().freeMemory()/1024) + "/" + (Runtime.getRuntime().totalMemory()/1024) + "(K byte)");
  330. }
  331. }
  332. }
  333. // --------------------------------------------------------------------------------
  334. // control and input
  335. synchronized private void queryKey()
  336. {
  337. // ??????????????,?????????,??????????
  338. keystate_query_down.clear();
  339. keystate_query_down.putAll(keystate_down);
  340. keystate_query_up.clear();
  341. keystate_query_up.putAll(keystate_up);
  342. mousestate_query_down.clear();
  343. mousestate_query_down.putAll(mousestate_down);
  344. mousestate_query_up.clear();
  345. mousestate_query_up.putAll(mousestate_up);
  346. mousewheel_query.clear();
  347. mousewheel_query.putAll(mousewheel);
  348. keystate_down.clear();
  349. keystate_up.clear();
  350. mousestate_down.clear();
  351. mousestate_up.clear();
  352. mousewheel.clear();
  353. }
  354. @Override
  355. public boolean isOnTextInput(int keycode) {
  356. if (getStage() != null) {
  357. DisplayObject o = getStage();
  358. while (o != null) {
  359. if (o instanceof TextInputer) {
  360. if (((TextInputer)o).isInput(keycode)) {
  361. return true;
  362. }
  363. }
  364. if (o instanceof DisplayObjectContainer) {
  365. o = ((DisplayObjectContainer)o).getFocus();
  366. } else {
  367. break;
  368. }
  369. }
  370. }
  371. return false;
  372. }
  373. /**
  374. * ????????????
  375. * @param keycode
  376. * @return
  377. */
  378. synchronized public boolean isKeyHold(int ... keycode)
  379. {
  380. for (int k : keycode)
  381. if (keystate.get(k)!=null)
  382. return true;
  383. return false;
  384. }
  385. /**
  386. * ????????????
  387. * @param keycode
  388. * @return
  389. */
  390. synchronized public boolean isKeyDown(int ... keycode)
  391. {
  392. for (int k : keycode)
  393. if (keystate_query_down.get(k)!=null)
  394. return true;
  395. return false;
  396. }
  397. /**
  398. * ????????????
  399. * @param keycode
  400. * @return
  401. */
  402. synchronized public boolean isKeyUp(int ... keycode)
  403. {
  404. for (int k : keycode)
  405. if (keystate_query_up.get(k)!=null)
  406. return true;
  407. return false;
  408. }
  409. /**
  410. * ?????????????
  411. * @return
  412. */
  413. synchronized public int getDownKeyCount()
  414. {
  415. int count = keystate.size();
  416. return count;
  417. }
  418. /**
  419. * ?????????????
  420. * @return
  421. */
  422. synchronized public int getUpKeyCount()
  423. {
  424. int count = keystate_query_up.size();
  425. return count;
  426. }
  427. /**
  428. * ?????????????
  429. * @param button
  430. * @return
  431. */
  432. synchronized public boolean isMouseHold(int ... button)
  433. {
  434. for (int b : button)
  435. if (mousestate.get(b)!=null)
  436. return true;
  437. return false;
  438. }
  439. /**
  440. * ?????????????
  441. * @param button
  442. * @return
  443. */
  444. synchronized public boolean isMouseDown(int ... button)
  445. {
  446. for (int b : button)
  447. if (mousestate_query_down.get(b)!=null)
  448. return true;
  449. return false;
  450. }
  451. @Override
  452. synchronized public boolean isMouseContinuous(long freeze_time, int... button) {
  453. for (int b : button) {
  454. if (mousestate.get(b)!=null) {
  455. Long prve_time = mousestate_prev_down_time.get(b);
  456. if (prve_time != null) {
  457. if (System.currentTimeMillis() - prve_time > freeze_time) {
  458. return true;
  459. }
  460. }
  461. }
  462. }
  463. return false;
  464. }
  465. /**
  466. * ?????????????????????
  467. * @param time ??(????-?????? < time)?????
  468. * @param button
  469. * @return
  470. */
  471. synchronized public boolean isMouseDoubleDown(long time, int ... button){
  472. for (int b : button) {
  473. if (mousestate_query_down.get(b)!=null) {
  474. Long prve_time = mousestate_prev_down_time.get(b);
  475. MouseEvent prve_pos = mousestate_prev_down_pos.get(b);
  476. if (prve_time != null && prve_pos!=null) {
  477. if (System.currentTimeMillis() - prve_time < time &&
  478. prve_pos.getX()==mousex &&
  479. prve_pos.getY()==mousey) {
  480. return true;
  481. }
  482. }
  483. }
  484. }
  485. return false;
  486. }
  487. /**
  488. * ?????????????
  489. * @param button
  490. * @return
  491. */
  492. synchronized public boolean isMouseUp(int ... button)
  493. {
  494. for (int b : button)
  495. if (mousestate_query_up.get(b)!=null)
  496. return true;
  497. return false;
  498. }
  499. /**
  500. * ???????????????
  501. * @param button
  502. * @return
  503. */
  504. synchronized public boolean isMouseWheelUP() {
  505. return mousewheel_query.get(-1)!=null;
  506. }
  507. /**
  508. * ???????????????
  509. * @param button
  510. * @return
  511. */
  512. synchronized public boolean isMouseWheelDown() {
  513. return mousewheel_query.get(1)!=null;
  514. }
  515. /**
  516. * ???????stage???
  517. * @param button
  518. * @return
  519. */
  520. synchronized public int getMouseX() {
  521. return mousex;
  522. }
  523. /**
  524. * ???????stage???
  525. * @param button
  526. * @return
  527. */
  528. synchronized public int getMouseY() {
  529. return mousey;
  530. }
  531. void fixMouse()
  532. {
  533. mousex = Math.max(mousex, 0);
  534. mousex = Math.min(mousex, stageWidth-1);
  535. mousey = Math.max(mousey, 0);
  536. mousey = Math.min(mousey, stageHeight-1);
  537. }
  538. void poolEvent(Event<?> event){
  539. if (currentStage!=null) {
  540. currentStage.onPoolEvent(event);
  541. }
  542. }
  543. // key events
  544. synchronized public void keyPressed(KeyEvent e) {
  545. if (!isOnTextInput(e.getKeyCode())) {
  546. keystate_down.put(e.getKeyCode(), e);
  547. }
  548. boolean poll = true;
  549. if (keystate.containsKey(e.getKeyCode())) {
  550. keystate_down.remove(e.getKeyCode());
  551. poll = false;
  552. } else {
  553. keystate.put(e.getKeyCode(), e);
  554. }
  555. if (poll) {
  556. poolEvent(new com.g2d.display.event.KeyEvent(
  557. e, com.g2d.display.event.KeyEvent.EVENT_KEY_DOWN));
  558. }
  559. }
  560. synchronized public void keyReleased(KeyEvent e) {
  561. if (!isOnTextInput(e.getKeyCode())) {
  562. keystate_up.put(e.getKeyCode(), e);
  563. }
  564. keystate.remove(e.getKeyCode());
  565. poolEvent(new com.g2d.display.event.KeyEvent(
  566. e, com.g2d.display.event.KeyEvent.EVENT_KEY_UP));
  567. }
  568. synchronized public void keyTyped(KeyEvent e) {
  569. poolEvent(new com.g2d.display.event.KeyEvent(
  570. e, com.g2d.display.event.KeyEvent.EVENT_KEY_TYPED));
  571. }
  572. // mouse events
  573. synchronized public void mouseClicked(MouseEvent e) {
  574. mousex = (int)(e.getX() * size_rate_x);
  575. mousey = (int)(e.getY() * size_rate_y);
  576. fixMouse() ;
  577. //poolEvent(new com.cell.g2d.display.event.MouseEvent(e));
  578. }
  579. synchronized public void mouseEntered(MouseEvent e) {
  580. mousex = (int)(e.getX() * size_rate_x);
  581. mousey = (int)(e.getY() * size_rate_y);
  582. fixMouse() ;
  583. //poolEvent(new com.cell.g2d.display.event.MouseEvent(e));
  584. }
  585. synchronized public void mouseExited(MouseEvent e) {
  586. mousex = (int)(e.getX() * size_rate_x);
  587. mousey = (int)(e.getY() * size_rate_y);
  588. fixMouse() ;
  589. //poolEvent(new com.cell.g2d.display.event.MouseEvent(e));
  590. }
  591. synchronized public void mousePressed(MouseEvent e) {
  592. mousex = (int)(e.getX() * size_rate_x);
  593. mousey = (int)(e.getY() * size_rate_y);
  594. fixMouse() ;
  595. mousestate_down.put(e.getButton(), e);
  596. mousestate.put(e.getButton(), e);
  597. mousestate_prev_down_time.put(e.getButton(), System.currentTimeMillis());
  598. mousestate_prev_down_pos.put(e.getButton(), e);
  599. poolEvent(new com.g2d.display.event.MouseEvent(
  600. e.getButton(), e.getClickCount(), com.g2d.display.event.MouseEvent.EVENT_MOUSE_DOWN));
  601. // System.out.println(e);
  602. }
  603. synchronized public void mouseReleased(MouseEvent e) {
  604. mousex = (int)(e.getX() * size_rate_x);
  605. mousey = (int)(e.getY() * size_rate_y);
  606. fixMouse() ;
  607. mousestate_up.put(e.getButton(), e);
  608. mousestate.remove(e.getButton());
  609. poolEvent(new com.g2d.display.event.MouseEvent(
  610. e.getButton(), e.getClickCount(), com.g2d.display.event.MouseEvent.EVENT_MOUSE_UP));
  611. //System.out.println(e);
  612. }
  613. synchronized public void mouseDragged(MouseEvent e) {
  614. mousex = (int)(e.getX() * size_rate_x);
  615. mousey = (int)(e.getY() * size_rate_y);
  616. fixMouse() ;
  617. //poolEvent(new com.cell.g2d.display.event.MouseEvent(e, com.cell.g2d.display.event.MouseEvent.EVENT_MOUSE_DRAGGED));
  618. //System.out.println(e);
  619. }
  620. synchronized public void mouseMoved(MouseEvent e) {
  621. mousex = (int)(e.getX() * size_rate_x);
  622. mousey = (int)(e.getY() * size_rate_y);
  623. fixMouse() ;
  624. //poolEvent(new com.cell.g2d.display.event.MouseEvent(e, com.cell.g2d.display.event.MouseEvent.EVENT_MOUSE_MOVED));
  625. //System.out.println(e);
  626. }
  627. public void mouseWheelMoved(MouseWheelEvent e) {
  628. if (e.getWheelRotation()>0) {
  629. mousewheel.put(1 , e);
  630. }else if (e.getWheelRotation()<0) {
  631. mousewheel.put(-1, e);
  632. }
  633. poolEvent(new com.g2d.display.event.MouseWheelEvent(
  634. e.getButton(), e.getWheelRotation()));
  635. //System.out.println(e);
  636. }
  637. // --------------------------------------------------------------------------------
  638. // boolean is_focused;
  639. public void focusGained(FocusEvent e) {
  640. // System.out.println(e.paramString());
  641. if (currentStage!=null) {
  642. currentStage.onFocusGained();
  643. currentStage.focuseClean(this);
  644. }
  645. }
  646. public void focusLost(FocusEvent e) {
  647. // System.out.println(e.paramString());
  648. if (currentStage!=null) {
  649. currentStage.onFocusLost();
  650. currentStage.focuseClean(this);
  651. }
  652. }
  653. // @Override
  654. // public CursorG2D getCursorG2D() {
  655. // // TODO Auto-generated method stub
  656. // return null;
  657. // }
  658. // --------------------------------------------------------------------------------
  659. }