javauis/m2g_qt/javasrc/eclipse/swt/widgets/SVGAnimatorControl.java
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 80 d6dafc5d983f
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     1
/*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     3
* All rights reserved.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     8
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    11
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    12
* Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    13
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    14
* Description:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    15
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    16
*/
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    17
package org.eclipse.swt.widgets;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    18
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
    19
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    20
import org.eclipse.swt.internal.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    21
import org.eclipse.swt.widgets.Control;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
import javax.microedition.m2g.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
import com.nokia.microedition.m2g.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
import java.util.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
import java.lang.ref.WeakReference;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
import org.eclipse.swt.graphics.GC;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
import org.eclipse.swt.graphics.Rectangle;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
import org.eclipse.swt.events.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
import com.nokia.mj.impl.utils.Logger;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
import org.eclipse.swt.widgets.Internal_PackageSupport;
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
    31
import org.eclipse.swt.graphics.Internal_GfxPackageSupport;
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
/**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
 * Control
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
 */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
public class SVGAnimatorControl extends Canvas
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
        implements ControlListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    40
        KeyListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
        MouseListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
        DisposeListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
        ShellListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
        PaintListener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
    // STATIC CONSTANTS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
    public static final int STATE_STOPPED = 1;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
    public static final int STATE_PLAYING = 2;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
    public static final int STATE_PAUSED  = 3;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
    public static final float DEFAULT_DELTA_TIME = 0.1f;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
    // VARIABLES
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
    private int iState;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    58
    private SVGImage iSVGImage;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    59
    private M2GScalableGraphics iSg;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    60
    private float iDeltaTime;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    61
    private SVGAnimatorRunnable iTask = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    62
    private SVGEventListener iEventListener = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    63
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    64
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    65
    // METHODS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    66
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    67
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    68
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    69
     * @see
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    70
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    71
    public SVGAnimatorControl(SVGImage aSVGImage)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    72
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    73
        iSVGImage = aSVGImage;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    74
        iState = STATE_STOPPED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    75
        // Create render context, use M2GScalableGraphics
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    76
        // directly to get access to render method with native
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    77
        // side clearing parameter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    78
        iSg = new M2GScalableGraphics();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    79
        iSg.setRenderingQuality(ScalableGraphics.RENDERING_QUALITY_HIGH);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    80
        iDeltaTime = DEFAULT_DELTA_TIME;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    81
        iTask = new SVGAnimatorRunnable(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    82
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    83
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    84
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    85
     * @see org.eclipse.swt.widgets.Control#setParent()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    86
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    87
    public boolean setParent(Composite aParent)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    88
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    89
        parent = aParent;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    90
        display = aParent.display;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    91
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    92
        // Init widget after parent and display are known
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    93
        //Have to create Widget.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    94
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    95
        // Add this to necessary listeners
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    96
        addControlListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    97
        addKeyListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    98
        addMouseListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    99
        addDisposeListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   100
        parent.getShell().addShellListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   101
        addPaintListener(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   102
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   103
        return true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   104
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   105
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   106
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   107
     * @see org.eclipse.swt.widgets.Control#paint()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   108
     */
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
   109
    public void paintControl(PaintEvent e)
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
   110
    {
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   111
        GC gc = e.gc;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   112
        // Render image
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   113
        try
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   114
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   115
            iSg.bindTarget(gc);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   116
            // Parameter true to use native side clearing
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   117
            // -> animator background is always white
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   118
            iSg.render(0, 0, iSVGImage, true);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   119
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   120
        finally
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   121
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   122
            iSg.releaseTarget();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   123
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   124
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   125
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   126
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   127
     * Returns event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   128
     * @return event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   129
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   130
    public synchronized SVGEventListener getEventListener()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   131
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   132
        return iEventListener;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   133
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   134
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   135
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   136
     * @see javax.microedition.m2g.SVGAnimator#getTimeIncrement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   137
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   138
    public synchronized float getTimeIncrement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   139
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   140
        return iDeltaTime;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   141
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   142
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   143
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   144
     * Increases the increment time of the SVGImage.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   145
     * Increment is done only if the playing state is active.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   146
     * @see javax.microedition.m2g.SVGImage#incrementTime()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   147
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   148
    public synchronized void increaseCurrentTime()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   149
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   150
        if (iState == STATE_PLAYING)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   151
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   152
            iSVGImage.incrementTime(iDeltaTime);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   153
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   154
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   155
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   156
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   157
     * Checks if playing
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   158
     * @return true if playing
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   159
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   160
    public synchronized boolean isPlaying()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   161
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   162
        return iState == STATE_PLAYING;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   163
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   164
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   165
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   166
     * Checks if paused
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   167
     * @return true if paused
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   168
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   169
    public synchronized boolean isPaused()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   170
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   171
        return iState == STATE_PAUSED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   172
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   173
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   174
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   175
     * Checks if stopped
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   176
     * @return true if stopped
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   177
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   178
    public synchronized boolean isStopped()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   179
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   180
        return iState == STATE_STOPPED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   181
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   182
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   183
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   184
     * @see org.eclipse.swt.events.DisposeListener#widgetDisposed()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   185
     * @see javax.microedition.m2g.SVGEventListener#hideNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   186
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   187
    public synchronized void widgetDisposed(DisposeEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   188
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   189
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   190
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   191
            iEventListener.hideNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   192
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   193
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   194
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   195
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   196
     * @see org.eclipse.swt.events.ShellListener#shellActivated()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   197
     * @see javax.microedition.m2g.SVGEventListener#showNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   198
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   199
    public synchronized void shellActivated(ShellEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   200
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   201
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   202
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   203
            iEventListener.showNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   204
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   205
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   206
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   207
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   208
     * @see org.eclipse.swt.events.ShellListener#shellClosed()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   209
     * @see javax.microedition.m2g.SVGEventListener#hideNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   210
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   211
    public synchronized void shellClosed(ShellEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   212
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   213
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   214
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   215
            iEventListener.hideNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   216
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   217
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   218
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   219
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   220
     * @see org.eclipse.swt.events.ShellListener#shellDeactivated()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   221
     * @see javax.microedition.m2g.SVGEventListener#hideNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   222
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   223
    public synchronized void shellDeactivated(ShellEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   224
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   225
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   226
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   227
            iEventListener.hideNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   228
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   229
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   230
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   231
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   232
     * @see org.eclipse.swt.events.ShellListener#shellDeiconified()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   233
     * @see javax.microedition.m2g.SVGEventListener#hideNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   234
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   235
    public synchronized void shellDeiconified(ShellEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   236
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   237
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   238
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   239
            iEventListener.hideNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   240
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   241
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   242
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   243
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   244
     * @see org.eclipse.swt.events.ShellListener#shellIconified()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   245
     * @see javax.microedition.m2g.SVGEventListener#showNotify()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   246
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   247
    public synchronized void shellIconified(ShellEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   248
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   249
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   250
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   251
            iEventListener.showNotify();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   252
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   253
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   254
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   255
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   256
     * @see org.eclipse.swt.events.KeyListener#keyPressed()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   257
     * @see javax.microedition.m2g.SVGEventListener#keyPressed()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   258
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   259
    public synchronized void keyPressed(KeyEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   260
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   261
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   262
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   263
            iEventListener.keyPressed(e.keyCode);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   264
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   265
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   266
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   267
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   268
     * @see org.eclipse.swt.events.KeyListener#keyReleased()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   269
     * @see javax.microedition.m2g.SVGEventListener#keyPReleased()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   270
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   271
    public synchronized void keyReleased(KeyEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   272
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   273
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   274
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   275
            iEventListener.keyReleased(e.keyCode);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   276
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   277
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   278
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   279
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   280
    * @see org.eclipse.swt.events.MouseListener#mouseDown()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   281
    * @see javax.microedition.m2g.SVGEventListener#pointerPressed()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   282
    */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   283
    public synchronized void mouseDown(MouseEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   284
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   285
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   286
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   287
            iEventListener.pointerPressed(e.x, e.y);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   288
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   289
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   290
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   291
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   292
     * @see org.eclipse.swt.events.MouseListener#mouseUp()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   293
     * @see javax.microedition.m2g.SVGEventListener#pointerReleased()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   294
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   295
    public synchronized void mouseUp(MouseEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   296
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   297
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   298
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   299
            iEventListener.pointerReleased(e.x, e.y);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   300
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   301
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   302
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   303
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   304
     * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   305
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   306
    public synchronized void mouseDoubleClick(MouseEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   307
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   308
        // No implementation needed
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   309
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   310
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   311
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   312
     * @see org.eclipse.swt.events.ControlListener#controlResized()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   313
     * @see javax.microedition.m2g.SVGEventListener#sizeChanged()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   314
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   315
    public synchronized void controlResized(ControlEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   316
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   317
        Rectangle bounds = getBounds();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   318
        if (iEventListener != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   319
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   320
            iEventListener.sizeChanged(bounds.width, bounds.height);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   321
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   322
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   323
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   324
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   325
     * @see org.eclipse.swt.events.ControlListener#controlMoved()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   326
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   327
    public synchronized void controlMoved(ControlEvent e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   328
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   329
        // No implementation needed
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   330
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   331
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   332
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   333
     * @see javax.microedition.m2g.SVGAnimator#pause()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   334
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   335
    public synchronized void pause()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   336
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   337
        iState = STATE_PAUSED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   338
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   339
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   340
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   341
     * @see javax.microedition.m2g.SVGAnimator#play()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   342
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   343
    public synchronized void play()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   344
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   345
        if (iState == STATE_STOPPED)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   346
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   347
            // Set runnable to be run in UI thread
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   348
            display.asyncExec(iTask);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   349
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   350
        iState = STATE_PLAYING;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   351
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   352
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   353
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   354
     * @see javax.microedition.m2g.SVGAnimator#setSVGEventListener()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   355
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   356
    public synchronized void setEventListener(SVGEventListener eventListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   357
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   358
        iEventListener = eventListener;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   359
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   360
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   361
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   362
     * @see javax.microedition.m2g.SVGAnimator#setTimeIncrement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   363
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   364
    public synchronized void setTimeIncrement(float aDeltaTime)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   365
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   366
        iDeltaTime = aDeltaTime;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   367
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   368
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   369
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   370
     * @see javax.microedition.m2g.SVGAnimator#stop()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   371
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   372
    public synchronized void stop()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   373
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   374
        iState = STATE_STOPPED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   375
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   376
}
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   377
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   378
/**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   379
 * SVGAnimatorRunnable
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   380
 * Runnable class to perform control redrawing.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   381
 */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   382
class SVGAnimatorRunnable implements Runnable
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   383
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   384
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   385
    // VARIABLES
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   386
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   387
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   388
    private WeakReference iWeakControl;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   389
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   390
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   391
    // METHODS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   392
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   393
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   394
    public SVGAnimatorRunnable(SVGAnimatorControl aControl)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   395
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   396
        iWeakControl = new WeakReference(aControl);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   397
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   398
    /*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   399
     * @see java.lang.Runnable#run()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   400
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   401
    public void run()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   402
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   403
        SVGAnimatorControl control = (SVGAnimatorControl)iWeakControl.get();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   404
        if (control != null && !control.isDisposed())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   405
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   406
            try
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   407
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   408
                synchronized (control)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   409
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   410
                    if (control.isPlaying())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   411
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   412
                        // Playing: increase time
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   413
                        control.increaseCurrentTime();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   414
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   415
                    if (!control.isStopped())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   416
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   417
                        // Playing or paused: request repainting and new run
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   418
                        // If animator has been stopped no new run is requested
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   419
                        control.redraw();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   420
                        control.getDisplay().timerExec(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   421
                            (int)(control.getTimeIncrement() * 1000),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   422
                            this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   423
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   424
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   425
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   426
            catch (Exception e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   427
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   428
                Logger.ELOG(Logger.EJavaUI, "SVGAnimatorRunnable: run() - exception: "
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   429
                            + e.toString());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   430
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   431
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   432
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   433
}