diff -r 000000000000 -r 88edb906c587 svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgt_plat/svgt_api/inc/SvgJavaInterfaceImpl.h Wed Nov 03 18:56:10 2010 +0200 @@ -0,0 +1,2673 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: SVG Engine header file + * +*/ + + + #ifndef _INC_SVGJAVAINTERFACEIMPL_ + #define _INC_SVGJAVAINTERFACEIMPL_ + +#if !defined(__E32BASE_H__) +#include +#endif + +#include +#include + +typedef int SvgEngineHandle; +typedef int SvgDocumentHandle; +typedef int SvgElementHandle; +typedef int SvgSurfaceHandle; +typedef int SvgPathHandle; +typedef short SvgAttrType; + +class CSvgEngineImpl; +class CSvgDocumentImpl; +class CFbsBitmap; + +// ***************************************************/ +//Find a way to get these values from SvgEngine and defined here in JavaInterface. +const TInt KSvgUnknownElement = -1; + +const TInt KSvgSvgElement = 0; + +const TInt KSvgAltglyphElement = 1; +const TInt KSvgAltglyphdefElement = 2; + +const TInt KSvgDefsElement = 3; +const TInt KSvgDescElement = 4; + +const TInt KSvgMetadataElement = 6; +const TInt KSvgTitleElement = 7; + +const TInt KSvgFontfacenameElement = 8; +const TInt KSvgFontfacesrcElement = 9; +const TInt KSvgFontfaceuriElement = 10; +const TInt KSvgGElement = 11; +const TInt KSvgGlyphrefElement = 12; +const TInt KSvgVkernElement = 13; +// const TInt KSvgScriptElement = 14; +const TInt KSvgSwitchElement = 15; + +const TInt KSvgViewElement = 16; + +const TInt KSvgHkernElement = 17; + +const TInt KSvgAElement = 18; +const TInt KSvgFontElement = 19; +const TInt KSvgFontfaceElement = 20; +const TInt KSvgGlyphElement = 21; +const TInt KSvgImageElement = 22; +const TInt KSvgMissingglyphElement = 23; +const TInt KSvgStyleElement = 24; +const TInt KSvgTextElement = 25; +const TInt KSvgUseElement = 26; +const TInt KSvgCircleElement = 27; +const TInt KSvgEllipseElement = 28; +const TInt KSvgLineElement = 29; +const TInt KSvgPathElement = 30; +const TInt KSvgPolygonElement = 31; +const TInt KSvgPolylineElement = 32; +const TInt KSvgRectElement = 33; +const TInt KSvgAnimateElement = 34; +const TInt KSvgAnimateColorElement = 35; +const TInt KSvgAnimateMotionElement = 36; +const TInt KSvgAnimateTransformElement = 37; +const TInt KSvgSetElement = 38; +const TInt KSvgMpathElement = 39; +const TInt KSvgLinearGradientElement = 40; +const TInt KSvgRadialGradientElement = 41; +const TInt KSvgStopElement = 42; +const TInt KSvgScriptElement = 43; +const TInt KSvgTextAreaElement = 44; +const TInt KSvgDiscardElement = 45; +const TInt KSvgSolidColorElement = 46; +const TInt KSvgAnimationElement = 47; +const TInt KSvgVideoElement = 48; +const TInt KSvgForeignObjectElement = 49; + + +/*************************************************/ +/*************************************************/ + const TInt KSvgUnknownAttribute = -1; + const TUint16 KSvgOffset =25; + //AA: Length or number type: range is 0 to +max & set using SetAttributeFloatL + const TUint16 KAtrTextLength = 0 + KSvgOffset; + const TUint16 KAtrWidth = 1 + KSvgOffset; + const TUint16 KAtrHeight = 2 + KSvgOffset; + const TUint16 KAtrR = 3 + KSvgOffset ; + + + + const TUint8 KSvgCoordAttrStartIndex = 4 + KSvgOffset; + const TUint16 KAtrRx = 4 + KSvgOffset; + const TUint16 KAtrRy = 5 + KSvgOffset; + const TUint16 KAtrHorizAdvX = 6 + KSvgOffset; + const TUint16 KAtrHorizOriginX = 7 + KSvgOffset; + const TUint16 KAtrHorizOriginY = 8 + KSvgOffset; + const TUint16 KAtrAscent = 9 + KSvgOffset; + const TUint16 KAtrDescent = 10 + KSvgOffset; + + const TUint16 KAtrAlphabetic = 11 + KSvgOffset; + const TUint16 KAtrUnderlinePosition = 12 + KSvgOffset; + const TUint16 KAtrUnderlineThickness = 13 + KSvgOffset; + const TUint16 KAtrOverlinePosition = 14 + KSvgOffset; + const TUint16 KAtrOverlineThickness = 15 + KSvgOffset; + const TUint16 KAtrStrikethroughPosition = 16 + KSvgOffset; + const TUint16 KAtrStrikethroughThickness = 17 + KSvgOffset; + const TUint16 KAtrUnitsPerEm = 18 + KSvgOffset; + + const TUint16 KAtrWordSpacing = 19 + KSvgOffset; + const TUint16 KAtrLetterSpacing = 20 + KSvgOffset; + + + + //AA: Coordinate datatype: range is -max to +max & set using SetAttributeFloatL + const TUint16 KAtrCx = 21 + KSvgOffset; + const TUint16 KAtrCy = 22 + KSvgOffset; + const TUint16 KAtrY = 23 + KSvgOffset; + const TUint16 KAtrX = 24 + KSvgOffset; + const TUint16 KAtrY1 = 25 + KSvgOffset; + const TUint16 KAtrY2 = 26 + KSvgOffset; + const TUint16 KAtrX1 = 27 + KSvgOffset; + const TUint16 KAtrX2 = 28 + KSvgOffset; + + const TUint8 KSvgCoordAttrEndIndex = 28 + KSvgOffset; + const TUint8 KSvgDesAttrsIndex = 29 + KSvgOffset; + + + //AA: Descriptor type set using SetAttributeDesL + const TUint16 KAtrK = 29 + KSvgOffset; + const TUint8 KSvgFloatAttrEndIndex = 29 + KSvgOffset; + const TUint16 KAtrG1 = 30 + KSvgOffset; + const TUint16 KAtrG2 = 31 + KSvgOffset; + const TUint16 KAtrU1 = 32 + KSvgOffset; + const TUint16 KAtrU2 = 33 + KSvgOffset; + const TUint16 KAtrUnicode = 34 + KSvgOffset; + const TUint16 KAtrGlyphName = 35 + KSvgOffset; + const TUint16 KAtrLang = 36 + KSvgOffset; + const TUint8 KSvgDesAttrEndIndex = 36 + KSvgOffset; + + const TUint16 KAtrTextDecoration = 37 + KSvgOffset; + const TUint16 KAtrTextAnchor = 38 + KSvgOffset; + const TUint16 KAtrRotate = 39 + KSvgOffset; + const TUint16 KAtrCdata = 40 + KSvgOffset; + + + + + const TUint16 KAtrTransform = 41 + KSvgOffset; + const TUint16 KAtrStyle = 42 + KSvgOffset; + const TUint16 KAtrFill = 43 + KSvgOffset; + const TUint16 KAtrStroke = 44 + KSvgOffset; + const TUint16 KAtrColor = 45 + KSvgOffset; + const TUint16 KAtrFrom = 46 + KSvgOffset; + const TUint16 KAtrTo = 47 + KSvgOffset; + const TUint16 KAtrBy = 48 + KSvgOffset; + const TUint16 KAtrAttributeName = 49 + KSvgOffset; + + + + const TUint8 KSvgNotHandledAttrsIndex = 50 + KSvgOffset; + + const TUint16 KAtrPathLength = 50 + KSvgOffset; + const TUint16 KAtrVersion = 51 + KSvgOffset; + const TUint16 KAtrStrokeWidth = 52 + KSvgOffset; + const TUint16 KAtrPoints = 53 + KSvgOffset; + const TUint16 KAtrD = 54 + KSvgOffset; + const TUint16 KAtrType = 55 + KSvgOffset; + const TUint16 KAtrStopColor = 56 + KSvgOffset; + const TUint16 KAtrFx = 57 + KSvgOffset; + const TUint16 KAtrFy = 58 + KSvgOffset; + + const TUint16 KAtrOffset = 59+ KSvgOffset; + const TUint16 KAtrSpreadMethods = 60 + KSvgOffset; + const TUint16 KAtrGradientUnits = 61 + KSvgOffset; + const TUint16 KAtrStopOpacity = 62 + KSvgOffset; + + + + +// special attributes for encoding + const TUint16 KAtrViewBox = 63 + KSvgOffset; + const TUint16 KAtrBaseProfile = 64 + KSvgOffset; + const TUint16 KAtrZoomAndPan = 65 + KSvgOffset; + const TUint16 KAtrPreserveAspectRatio = 66 + KSvgOffset; + + const TUint8 KSvgSVGAttrEndIndex = KAtrPreserveAspectRatio; + + const TUint16 KAtrId = 67 + KSvgOffset; + const TUint16 KAtrXmlBase = 68 + KSvgOffset; + + const TUint8 KSvgIdAndXmlAttrEndIndex = 68 + KSvgOffset; + + const TUint16 KAtrXmlLang = 69 + KSvgOffset; + const TUint16 KAtrXmlSpace = 70 + KSvgOffset; + + const TUint8 KSvgLangAttrEndIndex = 70 + KSvgOffset; + + const TUint16 KAtrRequiredExtensions = 71 + KSvgOffset; + const TUint16 KAtrRequiredFeatures = 72 + KSvgOffset; + const TUint16 KAtrSystemLanguage = 73 + KSvgOffset; + + const TUint8 KSvgTestAttrEndIndex = 73 + KSvgOffset; + + const TUint16 KAtrDx = 74 + KSvgOffset; + const TUint16 KAtrDy = 75 + KSvgOffset; + const TUint16 KAtrMedia = 76 + KSvgOffset; + const TUint16 KAtrTitle = 77 + KSvgOffset; + + const TUint16 KAtrXlinkactuate = 78 + KSvgOffset; + const TUint16 KAtrXlinkarcrole = 79 + KSvgOffset; + + const TUint16 KAtrXlinkrole = 80 + KSvgOffset; + const TUint16 KAtrXlinkshow = 81 + KSvgOffset; + const TUint16 KAtrXlinktitle = 82 + KSvgOffset; + const TUint16 KAtrXlinktype = 83 + KSvgOffset; + const TUint16 KAtrXlinkhref = 84 + KSvgOffset; + + const TUint8 KSvgUriAttrEndIndex = 84 + KSvgOffset; + + const TUint16 KAtrBegin = 85 + KSvgOffset; + const TUint16 KAtrDur = 86 + KSvgOffset; + const TUint16 KAtrRepeatCount = 87 + KSvgOffset; + const TUint16 KAtrRepeatDur = 88 + KSvgOffset; + const TUint16 KAtrEnd = 89 + KSvgOffset; + const TUint16 KAtrRestart = 90 + KSvgOffset; + const TUint16 KAtrAccumulate = 91 + KSvgOffset; + const TUint16 KAtrAdditive = 92 + KSvgOffset; + const TUint16 KAtrKeySplines = 93 + KSvgOffset; + const TUint16 KAtrKeyTimes = 94 + KSvgOffset; + const TUint16 KAtrCalcMode = 95 + KSvgOffset; + const TUint16 KAtrPath = 96 + KSvgOffset; + const TUint16 KAtrAnimateMotion = 97 + KSvgOffset; + const TUint16 KAtrGradientTransform = 98 + KSvgOffset; + const TUint16 KAtrAnimateTransformAttrId = 99 + KSvgOffset; + const TUint16 KAtrTarget = 100 + KSvgOffset; + + + +#define KSVG_MAX_ATTRIBUTES KAtrTarget +#define KSVG_ATTRIBUTE_NOT_SUPPORTED KSVG_MAX_ATTRIBUTES+1 + + // special Ids for Animation attribute Values + + const TUint16 KAnimFreeze = 110 + KSvgOffset; + + // special Id for Embedded image XLink:href attribute . + + const TUint16 KXlinkhrefImageEmbedded = 111 + KSvgOffset; + +// special Id for multiple end times.Used for the Binary compatibility of the encoder + + const TUint16 KMultipleEndTime = 112 + KSvgOffset; + + + + #define KSVG_ANIMATE_ELEMFLAG KAtrAttributeName + #define KSVG_SET_ELEMFLAG KAtrAttributeName + #define KSVG_ANIMATETRANSFORM_ELEMFLAG KAtrSVGTrf + #define KSVG_CIRCLE_ELEMFLAG KAtrR + #define KSVG_ELLIPSE_ELEMFLAG KAtrSVGElp + #define KSVG_RECT_ELEMFLAG KAtrSVGRec + #define KSVG_IMAGE_ELEMFLAG KAtrSVGRec + #define KSVG_HKERN_ELEMFLAG KAtrK + #define KSVG_PATH_ELEMFLAG KAtrD + #define KSVG_POLYLINE_ELEMFLAG KAtrPoints + #define KSVG_AMINATEMO_ELEMFLAG KAtrSVGAmo + + const TUint16 KAtrSVGRec = 120 + KSvgOffset; + const TUint16 KAtrSVGElp = 121 + KSvgOffset; + const TUint16 KAtrSVGTrf = 122 + KSvgOffset; + const TUint16 KAtrSVGAmo = 123 + KSvgOffset; + const TUint16 KAtrToBy = 124 + KSvgOffset; + const TUint16 KAtrAdditiveSet = 125 + KSvgOffset; + + + +const TUint16 KTiny = 0; + +// Display Enumeration Constants. take care +const TUint KDisplayEnumNone = 16; +const TUint KPresentationAttrDisplay = 10; + +const TUint16 KAtrUnicodeRange = 135 + KSvgOffset; +const TUint16 KAtrValues = 138 + KSvgOffset; + + +// SPECIAL (APPLICATION DEFINED) ATTRIBUTE CONSTANTS +const TUint16 KAtrData = KAtrD; // So KAtrData can still be used +const TUint16 KAtrRadius = KAtrR; // So KAtrRadius can still be used + +const TUint16 KAtrRefX = 1001; +const TUint16 KAtrRefY = 1002; +const TUint16 KAtrAnimMotionMatrixIndex = 5000; +const TUint16 KAtrAnimTransformMatrixIndex = 5001; + +const TInt KErrReferencedElementNotFound = -1000; +const TInt KErrAnimateReferenceElementNotFound = -1001; + +// start of new element in encoding. +const TUint16 KStartNewElem = 1000; + +// SVG TINY DEFINED ENUMERATIONS +const TUint16 KEnumPercent = 0; // '%' sign +const TUint16 KEnum100 = 1; +const TUint16 KEnum200 = 2; +const TUint16 KEnum300 = 3; +const TUint16 KEnum400 = 4; +const TUint16 KEnum500 = 5; +const TUint16 KEnum600 = 6; +const TUint16 KEnum700 = 7; +const TUint16 KEnum800 = 8; +const TUint16 KEnum900 = 9; +const TUint16 KEnumAlways = 10; +const TUint16 KEnumAuto = 11; +const TUint16 KEnumBevel = 12; +const TUint16 KEnumBlink = 13; +const TUint16 KEnumBlock = 14; +const TUint16 KEnumBold = 15; +const TUint16 KEnumBolder = 16; +const TUint16 KEnumButt = 17; +const TUint16 KEnumCdata = 18; +const TUint16 KEnumCm = 19; +const TUint16 KEnumCompact = 20; +const TUint16 KEnumCondensed = 21; +const TUint16 KEnumCss = 22; +const TUint16 KEnumDasharray = 23; +const TUint16 KEnumDisable = 24; +const TUint16 KEnumDiscrete = 25; +const TUint16 KEnumEnd = 26; +const TUint16 KEnumEvenodd = 27; +const TUint16 KEnumExpanded = 28; +const TUint16 KEnumExtraCondensed = 29; +const TUint16 KEnumExtraExpanded = 30; +const TUint16 KEnumFreeze = 31; +const TUint16 KEnumHidden = 32; +const TUint16 KEnumIn = 33; +const TUint16 KEnumInherit = 34; +const TUint16 KEnumInline = 35; +const TUint16 KEnumInlineTable = 36; +const TUint16 KEnumInterger = 37; +const TUint16 KEnumItalic = 38; +const TUint16 KEnumLenght = 39; +const TUint16 KEnumLighter = 40; +const TUint16 KEnumLinear = 41; +const TUint16 KEnumLineThrough = 42; +const TUint16 KEnumListItem = 43; +const TUint16 KEnumMagnify = 44; +const TUint16 KEnumMarker = 45; +const TUint16 KEnumMiddle = 46; +const TUint16 KEnumMiter = 47; +const TUint16 KEnumMm = 48; +const TUint16 KEnumNarrower = 49; +const TUint16 KEnumNever = 50; +const TUint16 KEnumNone = 51; +const TUint16 KEnumNonzero = 52; +const TUint16 KEnumNormal = 53; +const TUint16 KEnumOblique = 54; +const TUint16 KEnumOverline = 55; +const TUint16 KEnumPaced = 56; +const TUint16 KEnumPc = 57; +const TUint16 KEnumPt = 58; +const TUint16 KEnumPx = 59; +const TUint16 KEnumRemove = 60; +const TUint16 KEnumReplace = 61; +const TUint16 KEnumRotate = 62; +const TUint16 KEnumRound = 63; +const TUint16 KEnumRunIn = 64; +const TUint16 KEnumScale = 65; +const TUint16 KEnumSemiCondensed = 66; +const TUint16 KEnumSemiExpanded = 67; +const TUint16 KEnumSkewX = 68; +const TUint16 KEnumSkewY = 69; +const TUint16 KEnumSpline = 70; +const TUint16 KEnumSquare = 71; +const TUint16 KEnumStart = 72; +const TUint16 KEnumSum = 73; +const TUint16 KEnumTable = 74; +const TUint16 KEnumTableCaption = 75; +const TUint16 KEnumTableCell = 76; +const TUint16 KEnumTableColumn = 77; +const TUint16 KEnumTableColumnGroup = 78; +const TUint16 KEnumTableFooterGroup = 79; +const TUint16 KEnumTableHeaderGroup = 80; +const TUint16 KEnumTableRow = 81; +const TUint16 KEnumTableRowGroup = 82; +const TUint16 KEnumTranslate = 83; +const TUint16 KEnumUltraCondensed = 84; +const TUint16 KEnumUltraExpanded = 85; +const TUint16 KEnumUnderline = 86; +const TUint16 KEnumVisible = 87; +const TUint16 KEnumWhenNotActive = 88; +const TUint16 KEnumWider = 89; +const TUint16 KEnumXMaxYMax = 90; +const TUint16 KEnumXMaxYMid = 91; +const TUint16 KEnumXMaxYMin = 92; +const TUint16 KEnumXMidYMax = 93; +const TUint16 KEnumXMidYMid = 94; +const TUint16 KEnumXMidYMin = 95; +const TUint16 KEnumXMinYMax = 96; +const TUint16 KEnumXMinYMid = 97; +const TUint16 KEnumXMinYMin = 98; +const TUint16 KEnumXml = 99; + + +#define KCSS_ATTR_FILL 0 +#define KCSS_ATTR_STROKE 1 +#define KCSS_ATTR_STROKEWIDTH 2 +#define KCSS_ATTR_VISIBILITY 3 +#define KCSS_ATTR_FONTFAMILY 4 +#define KCSS_ATTR_FONTSIZE 5 +#define KCSS_ATTR_FONTSTYLE 6 +#define KCSS_ATTR_FONTWEIGHT 7 +#define KCSS_ATTR_STROKE_DASHARRAY 8 +#define KCSS_ATTR_DISPLAY 9 +#define KCSS_ATTR_FILLRULE 10 +#define KCSS_ATTR_STROKE_LINECAP 11 +#define KCSS_ATTR_STROKE_LINEJOIN 12 +#define KCSS_ATTR_STROKE_DASHOFFSET 13 +#define KCSS_ATTR_STROKE_MITERLIMIT 14 +#define KCSS_ATTR_COLOR 15 +#define KCSS_ATTR_TEXTANCHOR 16 +#define KCSS_ATTR_TEXTDECORATION 17 +#define KCSS_ATTR_COLORINTERPOLATION 18 +#define KCSS_ATTR_COLORRENDERING 19 +#define KCSS_ATTR_LETTERSPACING 20 +#define KCSS_ATTR_WORDSPACING 21 + +#define KCSS_ATTR_FILL_OPACITY 22 +#define KCSS_ATTR_STROKE_OPACITY 23 +#define KCSS_ATTR_FONT 24 +/***************************************************/ +/***************************************************/ +const TInt KSvgTypeTransform = 30; +const TInt KSvgTypeTranslate = 31; +const TInt KSvgTypeRotate = 32; +const TInt KSvgTypeScale = 33; +const TInt KSvgTypeSkewX = 34; +const TInt KSvgTypeSkewY = 35; +const TInt KSvgType2DMatrix = 36; + +/////////////EVENT MASKS//////////////////// +const TUint8 KSvgEventMaskNone = 0x0; +const TUint8 KSvgEventMaskExternalUI = 0x1; +const TUint8 KSvgEventMaskTimer = 0x2; +const TUint8 KSvgEventMaskInternal = 0x4; +const TUint8 KSvgEventMaskExternalSystem = 0x8; +////////////////////////////////////////////////// taken from event.h + + + + +////////////////////////////////////////////////// taken from event.h +// these are taken from gfxgeneralPath.h +const TUint32 KSvgSegMoveTo = 2; +const TUint32 KSvgSegLineTo = 4; +const TUint32 KSvgSegQuadTo = 10; +const TUint32 KSvgSegCubicTo = 12; +const TUint32 KSvgSegClose = 0; +const TUint32 KSvgHorizontal = 5; +const TUint32 KSvgVertical = 6; +///////////////////////////////////////////////////// + +class MJavaError + { + public: + /** + * Dtor + * @since 1.0 + */ + virtual ~MJavaError() + { + } + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + virtual TBool HasError() const = 0; + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + virtual TBool IsWarning() const = 0; + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TInt ErrorCode() const = 0; + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + virtual TDesC8& Description() = 0; + }; + + +/** + * This class implements the interface for a MJavaError object, which contains + * an error code and a description of the error if one exists. + * + * @since 1.0 + */ +class CJavaError : public CBase, public MJavaError + { + public: + + /** + * Two-phase constructor. + * Creates an integer 'handle' from C++ object for referencing them inside Java. + * The shift garauntees a positive integer. + * Unhanding the integer requires the destination type to be known and bit shifting. + * + * @since 1.0 + * @return : CJavaError object + */ + static TInt NewL( CSvgErrorImpl& aError ); + + /** + * Destructor + */ + virtual ~CJavaError(); + + /** + * Determine wether an error is indicated by this object. + * + * @since 1.0 + * @return : ETrue, if ErrorCode() != ESvgNoError + */ + virtual TBool HasError() const; + + /** + * Determine wether an error is only a warning. + * This should be a state when the svg may be display, despite + * a conflict. + * + * @since 1.0 + * @return ETrue if HasError() is only a warning. + */ + virtual TBool IsWarning() const; + + /** + * Get the error code contained by this object. + * + * @since 1.0 + * @return : the TSvgErrorCode value + */ + virtual TInt ErrorCode() const; + + /** + * Get the error description string for this object. + * + * @since 1.0 + * @return : error description string. + */ + virtual TDesC8& Description(); + + protected: + /** + * Second phase of constructor + * + * @since 1.0 + */ + void ConstructL( CSvgErrorImpl& aError ); + + /** + * Ctor. + * + * @since 1.0 + */ + CJavaError(); + + private: + TInt iErrorCode; + TBool iIsWarning; + HBufC8* iDescription; + }; + +// *********************************************************************** +// SVG Engine +// *********************************************************************** +/** + * The SVG Engine is fundamental object for 2D rendering. The rendering can + * only be achieved through the render method provided by the SVG Engine object. + * NOTE: Java MIDlet can uses multiple SVG Engine objects. + * NOTE: Java side cannot provide the SVG Engine object for: + *
    + *
  • the SVG Document operations
  • + *
  • the SVG Element operations
  • + *
+ */ + +// ***************************************************************************** +// SVG Rendering Surface Functions +// ***************************************************************************** +/** + * The SVG Rendering Surface functions are not used in java side. + * + +// *********************************************************************** +// SVG Document +// *********************************************************************** +/** + * The SVG Document represents an XML Document. + *

The SVG Document is a subset of the Document interface defined + * in the + * DOM Level 3 Core.

+ */ + +// *********************************************************************** +// SVG Element +// *********************************************************************** +/** + * Description of an SVG element in the document tree. Element's id can be set only + * if it does not already have an id. Elements with non-null id can be inserted, but + * cannot be removed from the DOM tree. + * + *

+ * An SVG element's "traits" value can be read and manipulated. Each trait + * corresponds to an attribute or property,which is parsed and understood by the element + * and in most cases animatable. Unlike attributes, each element has a + * well-defined set of traits and attempting to access undefined trait is an error. Also unlike + * attributes traits are typed and their values are normalized; for instance SVG path specification + * is parsed and all path commands are converted to their absolute variants, it is not possible to + * say through the value of the trait if a path command was absolute or relative. When getting and + * setting trait values, accessor of the correct type must be used or exception will be thrown. + *

+ *

+ * Initial trait values come from parsing corresponding attributes. If value is not specified, but + * corresponing attribute (or property for environments where styling is supported) is inherited, + * inherited value is returned as a result of the trait query method. If it is not inherited, default + * value is returned. Default values are also returned in the case when there is no parent to inherit + * from, for ex: when you create a new element, set a trait value to 'inherit', but there is no parent for + * inheritance. It is important to note that the value which is returned is always a base value (i.e. before animation + * is applied), and this is true for both static and animated content. + *

+ *

+ * Setting a trait value has the same effect as changing a corresponding attribute, but trait + * setters can operate on typed values. The value which is modified is always a base value. + * For inheritable traits the trait value can always be set to "inherit" + * (but querying the value will always return the actual inherited value as explained above). + *

+ * + *

Traits supported in this specification, SVG Tiny 1.1 DOM

+ * + *

The table below shows the list of attributes and properties that SVG Tiny + * DOM 1.1 implementations must support. Each light gray section lists one or + * multiple elements for which the subsequent attributes or properties + * apply. Each attribute row lists the allowed getter and setter (s). The last + * column specifies the default values that must be used for each attribute or + * property.

+ *

Note: For 'REQUIRED' attributes, there are two cases: + * + *

    + *
  • i) The document is in error, if this attribute was not present at the time of loading.
  • + *
  • ii) When using uDOM API, the specified default value (in parenthesis) must be used.
  • + *
+ *

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Property
+ *
Trait Getter
[possible return value(s)]
+ *
Trait Setter
[allowed value(s)]
+ *
Default Values
+ *

+ *

+ *

+ *

+ *
<svg>, + * <rect>, <circle>, <ellipse>, <line>, + * <path>, <g>, <image>, <text>, <a>, and <use>
color
+ *
getRGBColorTrait [SVGRGBColor]
+ *
setTrait [inherit]
setRGBColorTrait [SVGRGBColor]
+ *
rgb(0,0,0)
+ *
display
+ *
getTrait [inline | none ]
+ *
setTrait [inline | none | inherit ] "inline"
+ *
fill
+ *
getRGBColorTrait [null, SVGRGBColor]
+ *
setRGBColorTrait [SVGRGBColor]
setTrait(none | currentColor | inherit)
+ *
rgb(0,0,0)
+ *
fill-rule
+ *
getTrait [nonzero | evenodd]
+ *
setTrait [nonzero | evenodd | inherit] "nonzero"
+ *
strokegetRGBColorTrait [null, SVGRGBColor]setRGBColorTrait [SVGRGBColor]
setTrait [none | currentColor | inherit]
"none"
+ *
stroke-dashoffsetgetFloatTrait setTrait [inherit]
setFloatTrait
0.0f
+ *
stroke-linecapgetTrait [butt | round | square]setTrait [butt | round | square | inherit]"butt"
+ *
stroke-linejoingetTrait [miter | round | bevel ]setTrait [miter | round | bevel | inherit]"miter"
+ *
stroke-miterlimitgetFloatTrait [ value >= 1]setTrait [inherit]
setFloatTrait [value >= 1]
4.0f
+ *
stroke-widthgetFloatTrait [value >= 0]setTrait [inherit]
setFloatTrait [value >= 0]
1.0f
+ *
visibilitygetTrait [visible | hidden]setTrait [visible | hidden | inherit]"visible"
+ *

+ *

+ *

+ *

+ *
<svg>, <text>, <g>, <a>, and <use>;
+ *
font-family
+ *
getTrait [single, computed font-family value]
+ *
setTrait [same syntax as font-family attribute]
+ *
User-Agent
+ *
font-size
+ *
getFloatTrait  [value >= 0]
+ *
setFloatTrait [value >= 0]
setTrait [inherit]
+ *
User-Agent
+ *
font-style
+ *
getTrait [normal | italic | oblique ] setTrait [normal | italic | oblique | inherit] "normal"
+ *
font-weight
+ *
getTrait [100 | 200 | 300
| 400 | 500 | 600 | 700 | 800 | 900 ]
setTrait [normal | bold | bolder | lighter | 100 | 200 | 300
+ * | 400 | 500 | 600 | 700 | 800 | 900 | inherit]
"normal"
+ *
text-anchor
+ *
getTrait [start | middle | end]
+ *
setTrait [start | middle | end | inherit ]
+ *
"start"
+ *

+ *
Attribute
+ *
Trait Getter
+ *
Trait Setter
+ *
Default Values
+ *

+ *

+ *

+ *

+ *
+ * <rect>, <circle>, <ellipse>, <line>, <path>, <g>, + * <image>, <text>, <a>, and <use>
transform
+ *
getMatrixTrait [SVGMatrix]
+ *
setMatrixTrait [SVGMatrix]
+ *
Identity matrix
+ * (1,0,0,1,0,0)
+ *

+ *

+ *

+ *

+ *
<rect>
+ *
height
+ *
getFloatTrait [ value >= 0]
+ *
setFloatTrait [ value >= 0]
+ *
REQUIRED
(0.0f)
+ *
width
+ *
getFloatTrait [ value >= 0]setFloatTrait [ value >= 0]REQUIRED
(0.0f)
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
rx
+ *
getFloatTrait [value >= 0]setFloatTrait [value >= 0]0.0f
+ *
ry
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
0.0f
+ *

+ *

+ *

+ *

+ *
<circle>
+ *
cx
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
cy
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
r
+ *
getFloatTrait [ value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *

+ *

+ *

+ *

+ *
<ellipse>
+ *
cx
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
cy
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
rx
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
ry
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *

+ *

+ *

+ *

+ *
<line>
+ *
x1
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
x2
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y1
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y2
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *

+ *

+ *

+ *

+ *
<path> (path-length is not supported)
+ *
d
+ *
getPathTrait [SVGPath]
+ *
setPathTrait [SVGPath]
+ *
REQUIRED
(Empty SVGPath)
+ *

+ *

+ *

+ *

+ *
<image>
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
width
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
height
+ *
getFloatTrait [value >= 0]
+ *
setFloatTrait [value >= 0]
+ *
REQUIRED
(0.0f)
+ *
xlink:href
+ *
getTrait NS[absolute URI]
+ *
setTraitNS [non local-URI value]
+ *
REQUIRED
( "" )
+ *

+ *

+ *

+ *

+ *
<use>
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
xlink:href
+ *
getTraitNS[absolute URI]
+ *
setTraitNS
+ *
""
+ *

+ *

+ *

+ *

+ *
<a>
+ *
target
+ *
getTrait
+ *
setTrait
+ *
""
+ *
xlink:href
+ *
getTraitNS[absolute URI]
+ *
setTraitNS
+ *
""
+ *

+ *

+ *

+ *

+ *
<text>
(Notes: + * For 'x' and 'y', it is only possible + * to provide floating point scalar values; an array of x or y values is not supported.
+ * 'rotate' attribute is not supported.)
+ *
x
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
y
+ *
getFloatTrait
+ *
setFloatTrait
+ *
0.0f
+ *
#text
+ *
getTrait [not null]
+ *
setTrait [not null]
+ *
""
+ *

+ *

+ *

+ *

+ *
<svg>
+ *
version
+ *
getTrait
+ *
Not available (readonly)
+ *
"1.1"
+ *
baseProfile
+ *
getTrait
+ *
Not available (readonly)
+ *
"tiny"
+ *
viewBox
+ *
getRectTrait [null, SVGRect]
+ *
setRectTrait [SVGRect]
+ *
null
+ *
zoomAndPan
+ *
getTrait [disable | magnify]
+ *
setTrait [disable | magnify]
+ *
"magnify"
+ *

+ *

+ *

+ *

+ *
+ */ + +// *********************************************************************** +// SVG Path +// *********************************************************************** +/** + * An SVG Path datatype is used to define the path geometry. + * Corresponds to SVG path specification or the "d" attribute. + * + *

The native implementations must support the following simplifications or + * canonicalization of path segments. Any simplifications should be lossless. + * + *

    + *
  • Relative commands (c, h, l, m, q, s, t, and v) must be converted to their absolute + * counterparts·
  • + *
  • Horizontal and Vertical lines (H, h, V, and v) must be converted to general + * lines (L and l)·
  • + *
  • Translate command S to command C·
  • + *
  • Translate command T to command Q.
  • + *
+ *

+ */ + +/** + * The CSvgJavaInterfaceImpl class specializes the CSvgEngineInterfaceImpl class + */ +class CSvgJavaInterfaceImpl : public CSvgEngineInterfaceImpl, public MSvgMouseListener +{ +public: + /** + * Construct an instance of CSvgJavaInterfaceImpl + */ + IMPORT_C static CSvgJavaInterfaceImpl* NewL( TFontSpec& aFontSpec ); + IMPORT_C static CSvgJavaInterfaceImpl* NewL(); + + /** + * Destruct an instance of CSvgJavaInterfaceImpl + */ + IMPORT_C ~CSvgJavaInterfaceImpl(); + + // *********************************************************************** + // SVG Engine + // *********************************************************************** + /** + * Create an SvgEngine instance. + * NOTE: Java side uses engine only during rendering phase. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#render() + * @return Pointer to CSvgEngineImpl object if creation is succesful, otherwise 0 is returned. + */ + IMPORT_C SvgEngineHandle SvgEngineCreate(); + + /** + * Request to set render quality. + * Set the quality of rendering. It can take one of the values, + * RENDERING_QUALITY_LOW (=1) or RENDERING_QUALITY_HIGH (=2). + * Default value is RENDERING_QUALITY_HIGH. + * The implementation of these quality levels is implementation dependent and should + * be mapped to definitions in SVG spec (shape, text, image and color rendering) + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#setRenderingQuality() + * @param aEngineHandle Engine handle. + * @param aQuality This value indicates the quality of rendering required. + */ + IMPORT_C void SvgEngineSetRenderQuality( SvgEngineHandle aEngineHandle, TInt aQuality ); + + /** + * Request to render the SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableGraphics#render() + * @param aEngineHandle Svg engine handle + * @param aDocumentHandle Svg document handle + * @param aSurfaceHandle Svg surface handle + * @param aSurfaceMaskHandle Mask that defines what pixels should be thrown and what not. + * @param aCurrentTime Current frame time. NOTE might be obsolete since the + */ + IMPORT_C void SvgEngineRenderDocument( + SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, + TInt aSurfaceHandle, TInt aSurfaceMaskHandle = NULL, TReal32 aCurrentTime = 0.0f ) __SOFTFP; + + IMPORT_C void SvgEngineRenderDocumentL( + SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, + TInt aSurfaceHandle, const TPoint& aAnchor, const TRect& aRenderArea, TReal32 aCurrentTime, TReal32 aAlpha ) __SOFTFP; + + /** + * Request to destroy the given engine by handle. + * NOTE: Java MIDlet could use multiple engines. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineDestroy( SvgEngineHandle aEngineHandle ); + + /* + * Sets the animation back to time 0 and then starts the internal engine timer + * NOTE: Java doesn't use this method. Java uses own timer(s). + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineStart( SvgEngineHandle aEngineHandle ); + + /* + * Stops the internal SVG engine timer + * NOTE: Java doesn't use this method. Java uses own timer. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineStop( SvgEngineHandle aEngineHandle ); + + /* + * Resumes the internal SVG engine timer + * NOTE: Java doesn't use this method. Java uses own timer. + * + * @since 1.0 + * @param aEngineHandle Engine + */ + IMPORT_C void SvgEngineResume( SvgEngineHandle aEngineHandle ); + + // ***************************************************************************** + // SVG Rendering Surface Functions + // ***************************************************************************** + /** + * Create a Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aWidth Width + * @param aHeight Height + * @return Surface + */ + IMPORT_C SvgSurfaceHandle SvgRenderingSurfaceCreate( TInt aWidth, TInt aHeight ); + + /** + * Destroy a Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + */ + IMPORT_C void SvgRenderingSurfaceDestroy( SvgSurfaceHandle aSurface ); + + /** + * Get a pointer to the Svg Rendering surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return CFbsBitmap object + */ + IMPORT_C TUint* SvgRenderingSurfaceGetBuffer( SvgSurfaceHandle aSurface ); + + /** + * Get the width of the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return Width + */ + IMPORT_C TInt SvgRenderingSurfaceGetWidth( SvgSurfaceHandle aSurface ); + /** + * Get the height of the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + * @return Height + */ + IMPORT_C TInt SvgRenderingSurfaceGetHeight( SvgSurfaceHandle aSurface ); + + /** + * Clear the Svg Rendering Surface. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aSurface Surface + */ + IMPORT_C void SvgRenderingSurfaceClearBuffer( SvgSurfaceHandle aSurface ); + + // *********************************************************************** + // SVG Document + // *********************************************************************** + /** + * Create an empty svg document. + * NOTE: Java doesn't use this method. + * Java side uses the SvgDocumentCreateL method to create an empty SVG document + * that contains a root <svg> element with default viewport size of 100x100. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#createEmptyImage() + * @return Svg Document. + */ + IMPORT_C SvgDocumentHandle SvgDocumentCreateEmpty(); + + /** + * Create a svg document by parsing the given string. + * The image size is determined by the content specification + * (eg: width/height attributes on root SVG element). The default viewport size + * of 100-by-100 pixels is used when the size is unspecified. This method will throw an exception + * when the document is in error: + *
    + *
  • the SVG document does not conform to the XML 1.0 specification
  • + *
  • an element has an attribute or property value which is not permissible according to the SVG specification
  • + *
  • the required or mandatory attributes according to the SVG specification are missing
  • + *
  • the document contains circular references on the <use> element
  • + *
  • the document contains <image> element(s) with local references
  • + *
  • the document contains elements with duplicate Id's
  • + *
  • the document contains animation(s) in error
  • + *
+ * + * The native engine might be invoked for any external resource referenced in the document + * by calling the SvgDocumentRequestCompleted. + * However, please note that data URIs (for ex: base64 encoded images + * like <image xlink:href="data:image/png;base64,/9j/4AAQ..."/>) + * are required to be decoded by the native engine. + * The engine must only make one call if there exist multiple resources with the same URI. + * + * If a svg document contains external resources and SvgDocumentRequestCompleted is not called + * then the engine's default implementation is used automatically, but it might not be able to load all of + * external resources. For example, if the svg document is loaded from a file in a Jar file, + * the implementation will not be able to load images that have relative + * URIs (ex; <image xlink:href="myImage.png" />). + * + *

Note that SvgDocumentRequestCompleted is also called when the xlink:href attribute on + * <image> is set or changed by the application, but the call is made only when the + * element is hooked into the document tree i.e. when the ancestors go all the way up to + * the root <svg> element. There are two cases: + *

    + *
  • When changing the xlink:href attribute of an existing <image> element that is already hooked or part of the tree.
  • + *
  • When creating a new <image>, setting its xlink:href and hooking it to the document tree.
  • + *
+ *

+ * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#createImage() + * @param aString The string from which the SVG content should be read + * @return Svg Document if successful, otherwise the function leaves. + * @throws MJavaError if an error occurs while loading the content. + */ + IMPORT_C SvgDocumentHandle SvgDocumentCreateL( const TPtrC16& aString ); + + /** + * Destroy the given svg document (by handle). + * NOTE: Java MIDlet could use multiple documents. + * + * @since 1.0 + * @param aDocumentHandle Document handle. + */ + IMPORT_C void SvgDocumentDestroy( SvgDocumentHandle aDocumentHandle ); + + /** + * Svg Document request complete. + * Once the requested external resource is available, the application forwards this information + * (data) to the SVG engine. If this method is called a second time for a same URL (uri) of a + * same SVG document, the engine will replace the current resource data with the new + * one. Note: Setting NULL for data (0 for data_size) indicates + * that the requested resource could not be fetched by java side, and in this event the SVG engine + * will not make further attempts to load this resource. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#requestCompleted() + * @param hDocument SVG document handle + * @param uri External resource URI + * @param data External resource data + * @param data_size External resource data size + * @return TODO + */ + EXPORT_C TInt SvgDocumentRequestCompleted( SvgDocumentHandle hDocument, const TPtrC16& aUri, const TPtrC8& ); + + /** + * Get an external item indicated in a SVG document. + * Java side might request an external resouce and once the requested external resource is available, + * java side forwards this information (SvgDocumentGetExternalListItem) to the SVG engine. + * Note: Returning null indicates that the SVG engine tryes to handle the requested resource. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param index External resource item index. Scale: + *
  • 0 <= index < SvgDocumentGetExternalListSize
  • + * @return External resource URI + */ + IMPORT_C TInt SvgDocumentGetExternalListItem(SvgDocumentHandle aDocumentHandle, TInt aIndex, TPtrC16& aItem); + + /** + * Get number of external list items in a SVG document. + * After the SVG document is created (see SvgDocumentCreateL) java side checks if + * the SVG document contains external item(s) + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @return Number of external resource items + */ + IMPORT_C TInt SvgDocumentGetExternalListSize( SvgDocumentHandle aDocumentHandle ); + + /** + * Increments the animation or media timeline for the specified document aDocumentHandle + * (in seconds). + * This method is intended to move only forward in the timeline. + * It is important to note that setting large increments of time would result in + * skipping parts of the animation as per the SVG animation model. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#incrementTime() + * @see org.w3c.dom.svg.SVGSVGElement#setCurrentTime() + * @param aDocumentHandle SVG document handle. + * @param seconds the value of time to be set in seconds. + */ + IMPORT_C void SvgDocumentSetMediaTime( SvgDocumentHandle aDocumentHandle, TReal32 seconds ) __SOFTFP; + + /** + * Get current animation or media timeline time for the specified document. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGSVGElement#getCurrentTime() + * @param aDocumentHandle SVG document handle + * @return Returns current animation timeline time in seconds + */ + IMPORT_C TReal32 SvgDocumentGetMediaTime( SvgDocumentHandle aDocumentHandle ) __SOFTFP; + + /** + * Get the viewport width of the given SVG document. + * The value returned is always in pixels. If the specified width is defined in percentages, the + * values are mapped to the default view port size of 100x100. If the viewport width + * is explicitly changed by the java application, then the percentages are ignored and the content + * is made to fit to this new viewport width. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#getViewportWidth() + * @see SvgDocumentSetViewportWidth + * @param aDocumentHandle SVG document handle + * @return the current width of the given SVG document. + */ + IMPORT_C TInt SvgDocumentGetViewportWidth( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport height of the given SVG document. + * The value returned is always in pixels. If the specified height is defined in percentages, the + * values are mapped to the default view port size of 100x100. If the viewport height + * is explicitly changed by the java application, then the percentages are ignored and the content + * is made to fit to this new viewport height. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#getViewportHeight() + * @see SvgDocumentSetViewportHeight + * @param aDocumentHandle SVG document handle + * @return the current height of the given SVG document. + */ + IMPORT_C TInt SvgDocumentGetViewportHeight( SvgDocumentHandle aDocumentHandle ); + + /** + * Set the new (viewport) width for the given SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#setViewportWidth() + * @see SvgDocumentGetViewportWidth + * @param aDocumentHandle SVG document handle + * @param aWidth The new width to be set. + */ + IMPORT_C void SvgDocumentSetViewportWidth( SvgDocumentHandle aDocumentHandle, TInt aWidth ); + + /** + * Set the new (viewport) height for the given SVG document. + * + * @since 1.0 + * @see javax.microedition.m2g.ScalableImage#setViewportHeight() + * @see SvgDocumentGetViewportHeight + * @param aDocumentHandle SVG document handle + * @param aHeight The new height to be set. + */ + IMPORT_C void SvgDocumentSetViewportHeight( SvgDocumentHandle aDocumentHandle, TInt aHeight ); + + /** + * Set the default viewport size for the given SVG document. + * The default viewport size of 100-by-100 pixels is used when the size is unspecified. + * + * @since 1.0 + * @param aDocumentHandle Document + */ + IMPORT_C void SvgDocumentViewportInit( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport width units for the given document. + * NOTE: Java side is not actually need this method. + * + * @since 1.0 + * @param aDocumentHandle Document + * @return 1 if pixels or 0 if percentages + */ + IMPORT_C TInt SvgDocumentGetViewportWidthUnits( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the viewport height units for the given document. + * NOTE: Java side is not actually need this method. + * + * @since 1.0 + * @param aDocumentHandle Document + * @return 1 if pixels or 0 if percentages + */ + IMPORT_C TInt SvgDocumentGetViewportHeightUnits( SvgDocumentHandle aDocumentHandle ); + + /** + * Return a child element of the given SVG document Node which corresponds to the top-most + * tag in XML file. For SVG files it must be SVGSVGElement. + * + * @since 1.0 + * @see org.w3c.dom.Document#getDocumentElement() + * @param aDocumentHandle SVG document handle + * @return The root element associated with the given SVG document. + */ + IMPORT_C SvgElementHandle SvgDocumentGetRootElement( SvgDocumentHandle aDocumentHandle ); + + /** + * Get the svg element in the given SVG document with + * the given unique ID string.If no such element exists, this returns NULL. + * + * @since 1.0 + * @see org.w3c.dom.Document#getElementById() + * @param aDocumentHandle SVG document handle + * @param aId the ID of the element to be retrieved. + * @return An element handle that matches with the given ID or + * NULL if the ID is not present. + */ + IMPORT_C SvgElementHandle SvgDocumentGetElementById( SvgDocumentHandle aDocumentHandle, const TPtrC16& aID ); + + /** + * Get the number of ids in the current SVG document. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + */ + IMPORT_C TInt SvgDocumentGetNumberOfIds(SvgDocumentHandle aDocumentHandle ); + + /** + * Get an id (at index) from the current SVG document. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param index ID index + * @return ID string + */ + IMPORT_C TInt SvgDocumentGetId(SvgDocumentHandle aDocumentHandle, TInt index, TPtrC16& aId); + + /** + * Set the begin animation time for the given element in the given SVG document. + * The new time is added to the + * begin instance times list. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#beginElementAt() + * @param aDocumentHandle SVG document handle + * @param aElementHandle Element handle + * @param aOffsetTime The time in seconds at which to begin the element. + */ + IMPORT_C void SvgDocumentBeginElementAt( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle, + TReal32 aOffsetTime ) __SOFTFP; + + /** + * Set the end animation time for the given element in the given SVG document. + * The new time is added to the + * end instance times list. + * NOTE: Native engine checks the element is active before set the new end time. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#endElementAt() + * @param aDocumentHandle SVG document handle + * @param aElementHandle Element handle + * @param aOffsetTime The time in seconds at which to end the element. + */ + IMPORT_C void SvgDocumentEndElementAt( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle, + TReal32 aOffsetTime ) __SOFTFP; + + /** + * Set the given element to have the focus in the given SVG document. + * The initial focus is always null and setting + * NULL will remove the current focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOn() + * @param aDocumentHandle SVG document handle + * @param aElementHandle The element to set the focus on. + + * changes made for Focus-in/focus-out bug(AMIA-6T8EEG) + */ + IMPORT_C void SvgDocumentFocusOn( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle ); + + /** + * Get the element having the focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOn() + * @param aDocumentHandle SVG document handle + * @return The element focused. + */ + IMPORT_C SvgElementHandle SvgDocumentGetFocus( SvgDocumentHandle aDocumentHandle ); + + /** + * Activate the element that has the focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#activate() + * @param aDocumentHandle SVG document handle + */ + IMPORT_C void SvgDocumentActivate( SvgDocumentHandle aDocumentHandle ); + + /** + * Request a mouse event at the given coordinate. + * This method is used to dispatch a mouse "click" event to the given + * document. The mouse position is given as screen coordinates aMouseX, aMouseY. + * If the aMouseX, aMouseY values are outside the viewport area or no target is available + * for the aMouseX, aMouseY coordinates, the event is not dispatched. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param aDocumentHandle SVG document handle + * @param aMouseX The x location of the mouse/pointer in viewport coordinate system. + * @param aMouseX The y location of the mouse/pointer in viewport coordinate system. + * @return Element handle to where mouse was clicked. Return null if no hit. + */ + IMPORT_C SvgElementHandle SvgDocumentDispatchMouseEvent( SvgDocumentHandle aDocumentHandle, + TInt aMouseX, TInt aMouseY ); + + /** + * Check if document has animation. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aDocumentHandle SVG document handle + * @param TBool . ETrue if animation present otherwise EFalse. + */ + IMPORT_C TInt SvgDocumentHasAnimation( SvgDocumentHandle aDocumentHandle ); + + + // *********************************************************************** + // SVG Element + // *********************************************************************** + /** + * Create a new svg element based on the specified + * (aType) SVG tag name. Only the following elements must be supported: + * <rect>, <circle>, <ellipse>, <line>, + * <path> <use> <image> <text>, + * <a> and <g>. + * + * @since 1.0 + * @see org.w3c.dom.Document#createElementNS() + * @param aType + * @return handle to the newly created SVG Element. + */ + IMPORT_C SvgElementHandle SvgElementCreate( SvgAttrType aType ); + + /** + * Destroy svg element of the given handle. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param hElement Element handle + */ + IMPORT_C void SvgElementDestroy( SvgElementHandle hElement ); + + /** + * Returns a parent element of the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getParentNode() + * @param aElementHandle Element handle + * @return The parent element or NULL if there is no parent + * (i.e. if a element has just been created and not yet added to the tree, + * or if it has been removed from the tree, this is null). + */ + IMPORT_C SvgElementHandle SvgElementGetParent( SvgElementHandle aElementHandle ); + + /** + * Returns the first child element node of the given element. + * Return NULL if this element has no child elements. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFirstElementChild() + * @param aElementHandle Element handle + * @return The first child element node of the given element. + */ + IMPORT_C SvgElementHandle SvgElementGetFirstElementChild( SvgElementHandle aElementHandle ); + + /** + * Returns the next sibling element of the given element. + * Return NULL if the given element has no element sibling + * nodes that come after this one in the document tree. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getNextElementSibling() + * @param aElementHandle Element handle + * @return The next sibling element node of this element. + */ + IMPORT_C SvgElementHandle SvgElementGetNextElementSibling( SvgElementHandle aElementHandle ); + + /** + * Append the given child element to the given svg element. + * + * @since 1.0 + * @see org.w3c.dom.Node#appendChild() + * @param aElementHandle Element handle + * @param aChildElementHandle New child element handle + * @return Next sibling element + */ + IMPORT_C void SvgElementAppendChild( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle ); + + /** + * Remove the given child element from the given svg element. + * Elements that have ids cannot be removed from the tree. + * + * @since 1.0 + * @see org.w3c.dom.Node#removeChild() + * @param aElementHandle The parent element. + * @param aChildElementHandle The element that is to be removed + * TODO @return Handle to the removed element. Return NULL + * if operation failed. + */ + IMPORT_C SvgElementHandle SvgElementRemoveChild( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle ); + + /** + * Inserts aChildElementHandle before aReferenceElementHandle + * in the child list for the aElementHandle. If aReferenceElementHandle + * is NULL, aChildElementHandle is inserted at the end of the list. + * If the aChildElementHandle is already part of the tree, it is first removed. + * + * @since 1.0 + * @see org.w3c.dom.Node#insertBefore() + * @param aElementHandle The parent element. + * @param aChildElementHandle The child to add + * @param aReferenceElementHandle The child before which the new child should be added. + * @throws TODO Should throw exception if the aChildElementHandle would cause + * the SVG document to go into error, for ex: when the newChild contains a <use> + * element with an invalid xlink:href attribute. + */ + IMPORT_C void SvgElementInsertBefore( SvgElementHandle aElementHandle, + SvgElementHandle aChildElementHandle, + SvgElementHandle aReferenceElementHandle ); + + /** + * Request element type. The following element type are supported: + * <a>, <animate>, <animateColor>, <animateMotion>, + * <animateTransform> <circle> <defs> <ellipse>, + * <font>, <font-face>, <font-face-name>, <font-face-src>, + * <foreignObject>, <g>, <glyph>, <hkern>, <image>, + * <line>, <metadata>, <missing-glyph>, <metadata>, <mpath>. + * <path>, <polygon>, <polyline>, <rect>, <set>, + * <svg>, <switch>, <text>, <title>, <use>. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element. + * @return Element type. + */ + IMPORT_C TInt SvgElementGetType( SvgElementHandle aElementHandle ); + + /** + * Check if document has animation. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle SVG element handle + * @param TBool . ETrue if animation present otherwise EFalse. + */ + IMPORT_C TInt SvgElementHasAnimation( SvgElementHandle aElementHandle ); + + /** + * Get a string attribute from the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element. + * @param aAttributeName Attribute's name + * @return Attribute value. + */ + IMPORT_C TInt SvgElementGetStringAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttributeName, TPtrC16& aStrAttribute ); + + /** + * Set a string attribute in the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The SVG element handle. + * @param aAttributeName Attribute's name + * @param aAttributeValue Atribute's value. + */ + IMPORT_C void SvgElementSetStringAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttributeName, + const TPtrC16& aAttributeValue ); + + /** + * Get a color attribute from the given element. + * The values are copied into the color components given. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGRGBColor + * @param aElementHandle The element handle. + * @param aAttributeName Attribute's name + * @param aRedValue The red value + * @param aGreenValue The green value + * @param aBlueValue The blue value + * @return Integer containing the RGB value for the color. + */ + IMPORT_C TInt SvgElementGetColorAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TInt* aRedValue, TInt* aGreenValue, TInt* aBlueValue ); + + /** + * Set a color attribute for the given element. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGRGBColor + * @param aElementHandle The element. + * @param aAttribute Attribute's name + * @param aRedValue The red value + * @param aGreenValue The green value + * @param aBlueValue The blue value + */ + IMPORT_C void SvgElementSetColorAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TInt aRedValue, TInt aGreenValue, TInt aBlueValue ); + + + /** + * Return a attribute (trait) value as float. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFloatTrait() + * @param aElementHandle The element. + * @param aAttribute Attribute's (or trait's) name + * @return The attribute (or trait) value as float for the specified name. + */ + IMPORT_C TReal32 SvgElementGetFloatAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute ) __SOFTFP; + + /** + * Set the attribute (trait) value as float. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getFloatTrait() + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait) to be set. + * @param aFloatValue The value of the attribute (trait) to be set as float. + */ + IMPORT_C void SvgElementSetFloatAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, + TReal32 aFloatValue ) __SOFTFP; + + /** + * Set enum attribute (trait) value. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait) to be set. + * @param aValue The value of the attribute (trait) to be set. + */ + IMPORT_C void SvgElementSetEnumAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute, short aValue ); + + /** + * Get enum attribute (trait) value. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement + * @param aElementHandle The element handle. + * @param aAttribute The name of the attribute (trait). + * @return The value of the attribute (trait). + */ + IMPORT_C short SvgElementGetEnumAttribute( SvgElementHandle aElementHandle, + SvgAttrType aAttribute ); + + /** + * Return the rectangle attribute (trait) values. + * NOTE: The returned values are copies of the actual attribute (trait) values and + * will not change if the corresponding trait changes. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getRectTrait() + * @param aElementHandle The element handle. + * @param aRectAttribute The name of the attribute (trait) to retrieve. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + * @return -1 if failed otherwise returns positive integer. + */ + IMPORT_C TInt SvgElementGetRectAttribute( SvgElementHandle aElementHandle, + SvgAttrType aRectAttribute, + TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP; + + /** + * Set the rectangle attribute (trait) values. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setRectTrait() + * @param aElementHandle The element handle. + * @param aRectAttribute The name of the attribute (trait) to be set. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + */ + IMPORT_C void SvgElementSetRectAttribute( SvgElementHandle aElementHandle, + SvgAttrType aRectAttribute, + TReal32 aX, TReal32 aY, TReal32 aWidth, TReal32 aHeight ) __SOFTFP; + + /** + * Get the matrix attribute (trait) values. + * NOTE: The returned values are copies of the actual attribute (trait) values and + * will not change if the corresponding trait changes. + *
    +     * [aAVal aCVal aEVal]
    +     * [aBVal aDVal aFVal]
    +     * 
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getMatrixTrait() + * @param aElementHandle The element handle. + * @param aMatrixAttribute The name of the attribute (trait) to retrieve. + * @param aAVal The x scaling component + * @param aBVal The y shearing component + * @param aCVal The x shearing component + * @param aDVal The y scaling component + * @param aEVal The x translation component + * @param aFVal The y translation component + * @return TODO + */ + IMPORT_C TInt SvgElementGetMatrixAttribute( SvgElementHandle aElementHandle, + SvgAttrType aMatrixAttribute, + TReal32* aAVal, TReal32* aBVal, TReal32* aCVal, + TReal32* aDVal, TReal32* aEVal, TReal32* aFVal ) __SOFTFP; + + /** + * Set the matrix attribute (trait) values. + *
    +     * [aAVal aCVal aEVal]
    +     * [aBVal aDVal aFVal]
    +     * 
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setMatrixTrait() + * @param aElementHandle The element handle. + * @param aMatrixAttribute The name of the attribute (trait) to be set. + * @param aAVal The x scaling component + * @param aBVal The y shearing component + * @param aCVal The x shearing component + * @param aDVal The y scaling component + * @param aEVal The x translation component + * @param aFVal The y translation component + */ + IMPORT_C void SvgElementSetMatrixAttribute( SvgElementHandle aElementHandle, + SvgAttrType aMatrixAttribute, + TReal32 aAVal, TReal32 aBVal, TReal32 aCVal, + TReal32 aDVal, TReal32 aEVal, TReal32 aFVal ) __SOFTFP; + + /** + * Get the path attribute (trait)value. + * NOTE: The returned values are copies of the actual attribute values and will not change if + * the corresponding trait changes. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#getPathTrait() + * @see org.w3c.dom.svg.SVGPath + * @param aElementHandle The element handle. + * @param aPathAttribute The name of the attribute (trait) to retrieve. + * @return The handle to path object. NULL if not successed. + */ + IMPORT_C TInt SvgElementGetPathAttribute( SvgElementHandle aElementHandle, + SvgAttrType aPathAttribute ); + + /** + * Set the path attribute (trait) value. + * NOTE: Value is a copy in the trait so subsequent changes to the given + * aPathHandle have no effect on the value of the attribute (trait). + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGElement#setPathTrait() + * @see org.w3c.dom.svg.SVGPath + * @param aElementHandle The element handle. + * @param aPathAttribute The name of the attribute (trait) to be set. + * @param aPathHandle The value of the attribute (trait) to be set as. + */ + IMPORT_C void SvgElementSetPathAttribute( SvgElementHandle aElementHandle, + SvgAttrType aPathAttribute , SvgPathHandle aPathHandle); + + /** + * Returns the tight bounding box in current user coordinate space. + * Tight bounding box is the smallest possible rectangle that includes the geometry + * of all contained graphics elements excluding stroke. + * The calculation is done in the user coordinate space of the element. When bounding box + * is calculated elements with display property (trait) set to none are ignored. + * Exact rules for the bounding box calculation are given in the + * SVG spec. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGLocatableElement#getBBox() + * @param aElementHandle The element handle. + * @param aAttributeType The name of the attribute (trait) to retrieve. + * @param aX X coordinate. + * @param aY Y coordinate. + * @param aWidth Width. + * @param aHeight Height. + */ + IMPORT_C void SvgElementGetBBox( SvgElementHandle aElementHandle, + SvgAttrType aAttributeType, + TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP; + + /** + * Add event listener to the given element. + * Note: need to replace void* with specific class + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aListener Listener + * @param aType Type + */ + IMPORT_C void SvgElementAddEventListener( SvgElementHandle aElementHandle, + TInt aListener, SvgAttrType aType ); + + /** + * Remove event listener from the given element. + * Note: need to replace void* with specific class + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aListener Listener + * @param aType Type + */ + IMPORT_C void SvgElementRemoveEventListener( SvgElementHandle aElementHandle, + TInt aListener, SvgAttrType aType ); + /** + * Check if element is active. + * i.e. an animation element is active in these cases: + *
      + *
    • + * A media time is 1s. + *
      +	 *    
      +          
      +		   
      +     * 
      + *
    • + *
    • + * A media time is 2s. + *
      +	 *    
      +          
      +		   
      +     * 
      + *
    • + *
    + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGAnimationElement#endElementAt() + * @param aElementHandle The element handle. + * @return Positive integer if element is active. + */ + IMPORT_C TInt SvgElementIsActive( SvgElementHandle aElementHandle ); + + /** + * Check if the given element is removable (no id or children with ids). + * + * @since 1.0 + * @see org.w3c.dom.Node#removeChild() + * @param aElementHandle The element handle. + * @return Positive integer if element is removeable. + */ + IMPORT_C TInt SvgElementCheckRemoveable( SvgElementHandle aElementHandle ); + + // *********************************************************************** + // SVG Path + // *********************************************************************** + /** + * Creates new path object that is empty. + * This object can be used to modify value of path traits + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGSVGElement#createSVGPath() + * @see org.w3c.dom.svg.SVGPath + * @return The newly created path object handle with empty path commands. + */ + IMPORT_C SvgPathHandle SvgPathCreate(); + + /** + * Destroy the specified path path + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath + * @param aPathHandle Handle to the path to be deleted. + */ + IMPORT_C void SvgPathDestroy( SvgPathHandle aPathHandle ); + + /** + * Get the segment count of the given path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getNumberOfSegments() + * @param aPathHandle The path handle. + * @return Segment count + */ + IMPORT_C TInt SvgPathGetSegmentCount( SvgPathHandle aPathHandle ); + + /** + * Returns segment command by zero-based command index. + * Returns one of MOVE_TO, LINE_TO, + * CURVE_TO, QUAD_TO or CLOSE. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getSegment() + * @param aPathHandle The path handle. + * @param aSegmentIndex The command index for the segment command to retrieve. + * @return The segment command for the specified aSegmentIndex. + */ + IMPORT_C TInt SvgPathGetSegmentType( SvgPathHandle aPathHandle, TInt aSegmentIndex ); + + /** + * Returns segment parameter by zero-based command index and zero-based parametr index. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#getSegmentParameter() + * @param aPathHandle The path handle. + * @param aSegmentIndex The command index for the segment command to retrieve. + * @param aSegmentParameterIndex The parameter index for the segment parameter to retrieve. + * @return the segment parameter for the specified aSegmentIndex and aSegmentParameterIndex. + */ + IMPORT_C TReal32 SvgPathGetSegmentParameter( SvgPathHandle aPathHandle, + TInt aSegmentIndex, + TInt aSegmentParameterIndex ) __SOFTFP; + + /** + * Appends 'M' (absolute move) segment to the path with the specified coordinates. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#moveTo() + * @param aPathHandle The path handle. + * @param aX The x-axis coordinate for the specified point. + * @param aY The y-axis coordinate for the specified point. + */ + IMPORT_C void SvgPathAddMoveTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP; + + /** + * Appends 'L' (absolute line) segment to the path with the specified coordinates. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#moveTo() + * @param aPathHandle The path handle. + * @param aX The x-axis coordinate for the specified point. + * @param aY The y-axis coordinate for the specified point. + */ + IMPORT_C void SvgPathAddLineTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP; + + /** + * Appends 'Q' (absolute quadratic curve) segment to the path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#quadTo() + * @param aPathHandle The path handle. + * @param aX1 the x-axis coordinate of the first control point. + * @param aY1 the y-axis coordinate of the first control point. + * @param aX2 the x-axis coordinate of the final end point. + * @param aY2 the y-axis coordinate of the final end point. + * + */ + IMPORT_C void SvgPathAddQuadTo( SvgPathHandle aPathHandle, + TReal32 aX1, TReal32 aY1, + TReal32 aX2, TReal32 aY2 ) __SOFTFP; + + /** + * Appends 'C' (absolute cubic curve) segment to the path. + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#curveTo() + * @param aPathHandle The path handle. + * @param aX1 the x-axis coordinate of the first control point. + * @param aY1 the y-axis coordinate of the first control point. + * @param aX2 the x-axis coordinate of the second end point. + * @param aY2 the y-axis coordinate of the second end point. + * @param aX3 the x-axis coordinate of the final end point. + * @param aY3 the y-axis coordinate of the final end point. + * + */ + IMPORT_C void SvgPathAddCurveTo( SvgPathHandle aPathHandle, + TReal32 aX1, TReal32 aY1, + TReal32 aX2, TReal32 aY2, + TReal32 aX3, TReal32 aY3 ) __SOFTFP; + /** + * Appends 'Z' (close path) segment to the path + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGPath#close() + * @param aPathHandle The path handle. + */ + IMPORT_C void SvgPathAddClose( SvgPathHandle aPathHandle ); + + /** + * Update path info. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @param aElementHandle The element handle. + * @param aPathHandle The path handle. + */ + IMPORT_C void SvgElementUpdatePath( SvgElementHandle aElementHandle, SvgPathHandle aPathHandle ); + + /** + * Find whether the element is present in a document. + * + * @since 1.0 + * @param hDocument The SVG document handle. + * @param hElement The element handle. + * @return Positive integer if the element presents in the given SVG document. + */ + IMPORT_C TInt SvgElementElementInDOM ( TInt hDocument, TInt hElement ); + + /** + * Checks whether this element is child of a use element. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param hElement The element handle. + * @return Postivive integer if the element is child of a use element. + */ + IMPORT_C TInt SvgElementIsUsed ( TInt hElement ); + + /** + * Finds the handle to the actual cloned element. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#dispatchMouseEvent() + * @param hElement aElement This is handle to the cloned element. this is child of the + * element. + * @return Element handle to the actual element, which is cloned. + */ + IMPORT_C TInt SvgElementGetUsedFromElement ( TInt hElement ); + + /** + * Gets a screen bounding box for the given element. + * Returns the tight bounding box in screen coordinate space. Tight bounding box is the smallest + * possible rectangle that includes the geometry of all contained graphics elements excluding + * stroke. The box coordinates are in the screen coordinate space, which is connected to the + * current user coordinate space by the matrix returned by SvgElementGetMatrixAttribute + * (with attribute id=<svg>). + * + * @since 1.0 + * @see org.w3c.dom.svg.SVGLocatableElement#getScreenBBox() + * @see org.w3c.dom.svg.SVGLocatableElement#getScreenCTM() + * @param hElement The element handle. + */ + IMPORT_C void SvgElementGetScreenBBox( TInt hElement, TReal32* x,TReal32* y, TReal32* w, TReal32* h ) __SOFTFP; + + /** + * Set the focus out of the given element. + * The initial focus is always null and setting + * NULL will remove the current focus. + * NOTE: Java doesn't use this method. + * + * @since 1.0 + * @see javax.microedition.m2g.SVGImage#focusOut() + * @param aDocumentHandle SVG document handle + * @param aElementHandle The element for which to set the focus out. + + * changes made for Focus-in/focus-out bug(AMIA-6T8EEG) + */ + IMPORT_C void CSvgJavaInterfaceImpl::SvgDocumentFocusOut( SvgDocumentHandle aDocumentHandle, + SvgElementHandle aElementHandle); + + /* + * Maps the PATH segment type from SVG to JSR. + */ + + TInt MapSegmentType(TInt aSvgSegmentType); + + /* + * LISTENER IMPLEMENTATIONS FROM THE ENGINE + */ + + TBool MouseEntered( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseExited( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseMoved( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MousePressed( RPointerArray& aElements, TInt aX, TInt aY ); + + TBool MouseReleased( RPointerArray& aElements, TInt aX, TInt aY ); + +public: + CSvgDocumentImpl* iTempDoc; + +private: + + TBool IsAnimationElemId( const TInt aElementId ); + /** + * Gets The corresponding JSR-to-SVG element id. Ids of the elements differ in the svg + * engine and the JSR-API's. + */ + TInt SvgGetElementTypeMappingJSRtoSVG( SvgAttrType aType ); + /** + * Gets The corresponding SVG-to-JSR element id. Ids of the elements differ in the svg + * engine and the JSR-API's. + */ + SvgAttrType SvgGetElementTypeMappingSVGtoJSR( const TInt aElementId); + + /** + * Gets the attribute type mapping from SVG to JSR. Attribute t + * + */ + SvgAttrType SvgGetAttributeTypeMappingSVGtoJSR( const TInt aElementId); + /** + * Gets the attribute type mapping from JSR to SVG. Attribute t + * + */ + TInt SvgGetAttributeTypeMappingJSRtoSVG( SvgAttrType aType ); + /** + * Gets the Enumeration value mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationMappingJSRtoSVG(const TInt aAttributeId, TInt aJsrEnumValue); + /** + * Gets the Enumeration value to string mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationtoStringMappingJSRtoSVG(const TInt aAttributeId, short aJsrEnumValue, TDes& aValue); + /** + * Gets the string to enumeration value mapping from SVG to JSR. Attribute t + * + */ + TInt SvgStringtoEnumerationMappingSVGtoJSR(const TInt aAttrbuteId , TPtrC16 aValue); + /** + * Gets the Enumeration value mapping from JSR to SVG. Attribute t + * + */ + TInt SvgEnumerationMappingSVGtoJSR(const TInt aAttributeId, TInt32 aSvgEnumValue); + +private: + CSvgJavaInterfaceImpl(); + void ConstructL( TFontSpec& aFontSpec ); + void ConstructL(); + +private: + +}; + +#endif \ No newline at end of file