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