javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/M2GSVGSVGElement.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 56 abc41079b313
child 87 1627c337e51e
permissions -rw-r--r--
v2.2.19_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) 2005 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
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
package com.nokia.microedition.m2g;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
import org.w3c.dom.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
import org.w3c.dom.svg.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
import java.io.IOException;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
import com.nokia.mj.impl.utils.Logger;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
public class M2GSVGSVGElement extends M2GSVGLocatableElement implements SVGSVGElement
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
    // STATIC CONSTANTS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
    /* Optimization: static finals changed to local variables
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
    public static final String INVALID_SVG_VERSION_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
      "Invalid version.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
    public static final String INVALID_SVG_BASE_PROFILE_ESTR =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
      "Invalid base profile.";
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
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
    // VARIABLES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
    // Exception text
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
    public static final String SCALE_BY_ZERO =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
        "Cannot scale by 0.";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
    // VARIABLES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
    private Object iTimeGuard;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
    private M2GSVGMatrix iMatrix;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
    private M2GSVGPoint iCurrentTranslatePoint;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
    private float iCurrentRotate;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
    private float iCurrentScale;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
    private float iCurrentTimeInSeconds;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
    // METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
     * Constructor
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
     * @param aHandle -
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
     * @param aDocument -
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
    protected M2GSVGSVGElement(int aHandle, M2GDocument aDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
        super(aHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
        iTimeGuard = new Object();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
        iMatrix = (M2GSVGMatrix)createSVGMatrixComponents(1f, 0f, 0f, 1f, 0f, 0f);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
        iCurrentTranslatePoint = new M2GSVGPoint(this);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
        iCurrentRotate = 0.0f;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
        iCurrentScale = 1.0f;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
        iCurrentTimeInSeconds = 0.0f;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
        refreshMatrix();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
     * @see org.w3c.dom.svg.SVGSVGElement#createSVGMatrixComponents()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
    public SVGMatrix createSVGMatrixComponents(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
        float a, float b, float c, float d, float e, float f)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
        return new M2GSVGMatrix(a, b, c, d, e, f);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
       * @see org.w3c.dom.svg.SVGSVGElement#createSVGMatrixComponents()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
    public SVGPath createSVGPath()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
        return new M2GSVGPath(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
                   M2GSVGPath._createPath(getNativeSVGProxyHandle()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
       * @see org.w3c.dom.svg.SVGSVGElement#createSVGRect()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
    public SVGRect createSVGRect()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
        return new M2GSVGRect();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
       * @see org.w3c.dom.svg.SVGSVGElement#SVGRGBColor()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
    public SVGRGBColor createSVGRGBColor(int red, int green, int blue)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
        return new M2GSVGRGBColor(red, green, blue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
       * @see com.nokia.microedition.m2g.M2GObject#doCleanup()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
    protected void doCleanup()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
        // Note this method is not automatically called if
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
        // doConstruct() method is not first called
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
        super.doCleanup();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
     * @see com.nokia.microedition.m2g.M2GObject#getCurrentRotate()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
    public float getCurrentRotate()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
            return iCurrentRotate;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
    }
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
     * @see com.nokia.microedition.m2g.M2GObject#getCurrentScale()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
    public float getCurrentScale()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
            return iCurrentScale;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
        }
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 com.nokia.microedition.m2g.M2GObject#getCurrentTime()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
    public float getCurrentTime()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
        synchronized (iTimeGuard)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
            return iCurrentTimeInSeconds;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
       * @see com.nokia.microedition.m2g.M2GObject#getCurrentTranslate()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
    public SVGPoint getCurrentTranslate()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   155
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   156
        return iCurrentTranslatePoint;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   157
    }
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
     * @org.w3c.dom.Node#getParentNode()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   161
    */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   162
    public Node getParentNode()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   163
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   164
        // Optimization: if(!getDocument().getConnectionPolicy().getAccessRight())
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   165
        if (!iDocument.iConnectionRight)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   166
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   167
            Logger.ELOG(Logger.EJavaUI, "getParentNode() - access rights failure");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   168
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   169
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   170
        return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   171
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   172
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   173
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   174
     * Check svg version and base profile
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   175
     * @throws IOException If version or profile is invalid
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   176
    */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   177
    public void checkVersionAndProfile() throws IOException
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   178
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   179
        // Check version
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   180
        String trait = _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   181
                           getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   182
                           getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   183
                           M2GSVGConstants.AT_VERSION);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   184
        if (trait != null && (!trait.equals(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   185
                                  M2GSVGConstants.getInstance().iSvgBaseProfileVersion)))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   186
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   187
            Logger.ELOG(Logger.EJavaUI, "doCheckValidity() - excption: svg version");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   188
            throw new IOException(/*SF*/"Invalid version."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   189
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   190
        // Check profile
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   191
        trait = _getStringTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   192
                    getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   193
                    getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   194
                    M2GSVGConstants.AT_BASEPROFILE);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   195
        if (trait != null && (!trait.equals(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   196
                                  M2GSVGConstants.getInstance().iSvgBaseProfileName)))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   197
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   198
            Logger.ELOG(Logger.EJavaUI, "doCheckValidity() - excption: svg base profile");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   199
            throw new IOException(/*SF*/"Invalid base profile."/*SF*/);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   200
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   201
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   202
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   203
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   204
     * @javax.microedition.m2g.SVGImage#incrementTime()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   205
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   206
    public void incrementTime(float seconds)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   207
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   208
        incrementTimeNoUpdate(seconds);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   209
        // update the media time to SVG engine
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   210
        updateTime();
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
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   214
     * Increments the animation or media timeline for this SVGImage (in seconds)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   215
     * but it does not update it to the SVG engine
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   216
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   217
     * @note the time is updated to the engine during M2GScalableGraphics.RenderFrame()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   218
     * @param seconds the value of time to increment in seconds
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   219
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   220
     * @since S60 3.1
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   221
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   222
    public void incrementTimeNoUpdate(float seconds)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   223
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   224
        if (seconds < 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   225
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   226
            throw new IllegalArgumentException();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   227
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   228
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   229
        if (Float.isNaN(iCurrentTimeInSeconds + seconds))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   230
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   231
            throw new IllegalArgumentException();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   232
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   233
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   234
        synchronized (iTimeGuard)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   235
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   236
            iCurrentTimeInSeconds += seconds;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   237
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   238
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   239
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   240
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   241
     * Sets matrix trait
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   242
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   243
    protected void refreshMatrix()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   244
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   245
        float matrixComponents[] = new float[M2GSVGMatrix.ARRAY_SIZE];
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   246
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   247
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   248
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   249
            iMatrix.getComponentsToArray(matrixComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   250
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   251
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   252
        M2GSVGElement._setMatrixTrait(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   253
             getNativeSVGProxyHandle(), getHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   254
            M2GSVGConstants.AT_TRANSFORM, matrixComponents);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   255
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   256
        // inform observer about changes in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   257
        iDocument.notifyDOMChangeObserver();
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
     * Updates the time to engine
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   262
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   263
    private void updateTime()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   264
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   265
        float currentTimeInSeconds = 0.0f;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   266
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   267
        synchronized (iTimeGuard)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   268
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   269
            currentTimeInSeconds = iCurrentTimeInSeconds;
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
        _setMediaTime(getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   273
                      getDocument().getHandle(), currentTimeInSeconds);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   274
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   275
        // inform observer about changes in DOM
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   276
        iDocument.notifyDOMChangeObserver();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   277
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   278
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   279
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   280
     * @see com.nokia.microedition.m2g.M2GObject#setCurrentRotate()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   281
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   282
    public void setCurrentRotate(float value)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   283
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   284
        String zoomAndPan = getTrait("zoomAndPan");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   285
        if ((zoomAndPan != null) && zoomAndPan.equals("disable"))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   286
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   287
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   288
                       "setCurrentRotate() - zoomAndPan:" + zoomAndPan + ", fail");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   289
            return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   290
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   291
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   292
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   293
            iCurrentRotate = value;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   294
            updateTransformMatrix();
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
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   298
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   299
     * @see com.nokia.microedition.m2g.M2GObject#setCurrentScale()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   300
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   301
    public void setCurrentScale(float value)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   302
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   303
        String zoomAndPan = getTrait("zoomAndPan");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   304
        if ((zoomAndPan != null) && zoomAndPan.equals("disable"))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   305
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   306
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   307
                       "setCurrentScale() - zoomAndPan:" + zoomAndPan + ", fail");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   308
            return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   309
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   310
        if (value == 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   311
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   312
            throw new DOMException(DOMException.INVALID_ACCESS_ERR, SCALE_BY_ZERO);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   313
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   314
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   315
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   316
            iCurrentScale = value;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   317
            updateTransformMatrix();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   318
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   319
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   320
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   321
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   322
       * @see org.w3c.dom.svg.SVGSVGElement#setCurrentTime()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   323
       * @note no support for setting the time backwards except for setting it to zero
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   324
       * @note engine resets the animation if current time is zero
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   325
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   326
    public void setCurrentTime(float newSeconds)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   327
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   328
        synchronized (iTimeGuard)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   329
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   330
            if (newSeconds <= iCurrentTimeInSeconds && newSeconds != 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   331
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   332
                // only forward time or zero time is accepted
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   333
                return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   334
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   335
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   336
            iCurrentTimeInSeconds = newSeconds;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   337
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   338
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   339
        updateTime();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   340
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   341
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   342
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   343
     * <pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   344
     *  [currentScale      0       currentTranslate.x]   [cos(currentRotate) -sin(currentRotate 0]
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   345
     *  [     0      currentScale  currentTranslate.y] x [sin(currentRotate) cos(currentRotate) 0]
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   346
     *  [     0            0               1         ]   [         0                  0         1]
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   347
     * </pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   348
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   349
    public void updateTransformMatrix()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   350
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   351
        synchronized (this)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   352
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   353
            M2GSVGMatrix a = new M2GSVGMatrix(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   354
                iCurrentScale, 0f, 0f, iCurrentScale,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   355
                iCurrentTranslatePoint.getX(), iCurrentTranslatePoint.getY());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   356
            M2GSVGMatrix b = new M2GSVGMatrix(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   357
                (float)Math.cos(iCurrentRotate *(float)Math.PI / 180.0f),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   358
                (float)Math.sin(iCurrentRotate *(float)Math.PI / 180.0f),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   359
                -(float)Math.sin(iCurrentRotate *(float)Math.PI / 180.0f),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   360
                (float)Math.cos(iCurrentRotate *(float)Math.PI / 180.0f),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   361
                0f, 0f);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   362
            iMatrix = (M2GSVGMatrix)(a.mMultiply(b));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   363
            refreshMatrix();
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
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   368
    // STATIC METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   369
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   370
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   371
     * Builds root element according to a document
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   372
     * @param aDocument
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   373
     * @return root element
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   374
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   375
    public static M2GSVGSVGElement buildRootElement(M2GDocument aDocument)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   376
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   377
        // Get native handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   378
        int elementHandle = M2GSVGElement._getRootElement(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   379
                                aDocument.getNativeSVGProxyHandle(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   380
                                aDocument.getHandle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   381
        // Check native handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   382
        if (!M2GObject.checkHandle(elementHandle))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   383
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   384
            return null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   385
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   386
        // Create object
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   387
        M2GSVGSVGElement rootElement =
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   388
            new M2GSVGSVGElement(elementHandle, aDocument);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   389
        if (rootElement != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   390
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   391
            // Register element
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   392
            aDocument.registerLiveElement(rootElement, new Integer(elementHandle));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   393
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   394
        return rootElement;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   395
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   396
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   397
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   398
    // NATIVE METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   399
    //------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   400
    protected native static float _getMediaTime(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   401
         int aSvgProxyHandle, int aDocumentHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   402
    private native static void _setMediaTime(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   403
        int aSvgProxyHandle, int aDocumentHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   404
        float aSeconds );
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   405
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   406