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