Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 192013 Details for
Bug 324436
[Theming] Implement themeable shadow effects
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Updated Patch
CombinedShadows.patch (text/plain), 194.27 KB, created by
Tim Buschtoens
on 2011-03-28 11:24:13 EDT
(
hide
)
Description:
Updated Patch
Filename:
MIME Type:
Creator:
Tim Buschtoens
Created:
2011-03-28 11:24:13 EDT
Size:
194.27 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.rap.rwt >Index: src/org/eclipse/rwt/internal/theme/QxColor.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/theme/QxColor.java,v >retrieving revision 1.9 >diff -u -r1.9 QxColor.java >--- src/org/eclipse/rwt/internal/theme/QxColor.java 8 Oct 2010 13:14:20 -0000 1.9 >+++ src/org/eclipse/rwt/internal/theme/QxColor.java 28 Mar 2011 15:10:13 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2007, 2008 Innoopract Informationssysteme GmbH. >+ * Copyright (c) 2007, 2011 Innoopract Informationssysteme GmbH. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -7,6 +7,7 @@ > * > * Contributors: > * Innoopract Informationssysteme GmbH - initial API and implementation >+ * EclipseSource - ongoing development > ******************************************************************************/ > > package org.eclipse.rwt.internal.theme; >@@ -24,9 +25,9 @@ > > private static final Map NAMED_COLORS = new HashMap(); > >- public static final QxColor BLACK = new QxColor( 0, 0, 0 ); >+ public static final QxColor BLACK = new QxColor( 0, 0, 0, 1f ); > >- public static final QxColor WHITE = new QxColor( 255, 255, 255 ); >+ public static final QxColor WHITE = new QxColor( 255, 255, 255, 1f ); > > public static final QxColor TRANSPARENT = new QxColor(); > >@@ -35,8 +36,8 @@ > public final int green; > > public final int blue; >- >- public final boolean transparent; >+ >+ public final float alpha; > > static { > // register 16 standard HTML colors >@@ -62,14 +63,18 @@ > this.red = 0; > this.green = 0; > this.blue = 0; >- this.transparent = true; >+ this.alpha = 0f; > } > >- private QxColor( final int red, final int green, final int blue ) { >+ private QxColor( final int red, >+ final int green, >+ final int blue, >+ final float alpha ) >+ { > this.red = red; > this.green = green; > this.blue = blue; >- this.transparent = false; >+ this.alpha = alpha; > } > > public static QxColor create( final int red, final int green, final int blue ) >@@ -80,10 +85,32 @@ > } else if( red == 255 && green == 255 && blue == 255 ) { > result = WHITE; > } else { >- result = new QxColor( red, green, blue ); >+ result = new QxColor( red, green, blue, 1f ); > } > return result; > } >+ >+ public static QxColor create( final int red, >+ final int green, >+ final int blue, >+ final float alpha ) >+ { >+ checkAlpha( alpha ); >+ QxColor result; >+ if( alpha == 1f ) { >+ result = create( red, green, blue ); >+ } else { >+ result = new QxColor( red, green, blue, alpha ); >+ } >+ return result; >+ } >+ >+ private static void checkAlpha( final float alpha ) { >+ if( alpha < 0 || alpha > 1 ) { >+ String msg = "Alpha out of range [ 0, 1 ]: " + alpha; >+ throw new IllegalArgumentException( msg ); >+ } >+ } > > public static QxColor valueOf( final String input ) { > QxColor result; >@@ -94,6 +121,7 @@ > result = TRANSPARENT; > } else { > int red, green, blue; >+ float alpha = 1f; > String lowerCaseInput = input.toLowerCase( Locale.ENGLISH ); > if( input.startsWith( "#" ) ) { > try { >@@ -124,11 +152,14 @@ > blue = values[ 2 ]; > } else { > String[] parts = input.split( "\\s*,\\s*" ); >- if( parts.length == 3 ) { >+ if( parts.length >= 3 && parts.length <= 4 ) { > try { > red = Integer.parseInt( parts[ 0 ] ); > green = Integer.parseInt( parts[ 1 ] ); > blue = Integer.parseInt( parts[ 2 ] ); >+ if( parts.length == 4 ) { >+ alpha = Float.parseFloat( parts[ 3 ] ); >+ } > } catch( final NumberFormatException e ) { > String pattern = "Illegal number format in color definition ''{0}''"; > Object[] arguments = new Object[] { input }; >@@ -142,13 +173,25 @@ > throw new IllegalArgumentException( message ); > } > } >- result = create( red, green, blue ); >+ result = create( red, green, blue, alpha ); > } > return result; > } > >+ public boolean isTransparent() { >+ return alpha == 0f; >+ } >+ > public String toDefaultString() { >- return transparent ? TRANSPARENT_STR : toHtmlString( red, green, blue ); >+ String result; >+ if( isTransparent() ) { >+ result = TRANSPARENT_STR; >+ } else if( alpha == 1f ) { >+ result = toHtmlString( red, green, blue ); >+ } else { >+ result = toRgbaString( red, green, blue, alpha ); >+ } >+ return result; > } > > public boolean equals( final Object obj ) { >@@ -159,18 +202,27 @@ > QxColor other = ( QxColor )obj; > result = other.red == red > && other.green == green >- && other.blue == blue; >+ && other.blue == blue >+ && other.alpha == alpha; > } > return result; > } > > public int hashCode() { >- return transparent ? -1 : red + green * 256 + blue * 65536; >+ int result = -1; >+ if( !isTransparent() ) { >+ result = 41; >+ result += 19 * result + red; >+ result += 19 * result + green; >+ result += 19 * result + blue; >+ result += 19 * result + Float.floatToIntBits( alpha ); >+ } >+ return result; > } > > public String toString() { >- String colors = red + ", " + green + ", " + blue; >- return "QxColor{ " + ( transparent ? TRANSPARENT_STR : colors ) + " }"; >+ String colors = red + ", " + green + ", " + blue + ", " + alpha; >+ return "QxColor{ " + ( isTransparent() ? TRANSPARENT_STR : colors ) + " }"; > } > > public static String toHtmlString( final int red, >@@ -187,7 +239,7 @@ > > public static Color createColor( final QxColor color ) { > Color result = null; >- if( !color.transparent ) { >+ if( color.alpha == 1f ) { > result = Graphics.getColor( color.red, color.green, color.blue ); > } > return result; >@@ -197,4 +249,22 @@ > String hex = Integer.toHexString( value ); > return hex.length() == 1 ? "0" + hex : hex; > } >+ >+ private static String toRgbaString( final int red, >+ final int green, >+ final int blue, >+ final float alpha ) >+ { >+ StringBuffer sb = new StringBuffer(); >+ sb.append( "rgba(" ); >+ sb.append( red ); >+ sb.append( "," ); >+ sb.append( green ); >+ sb.append( "," ); >+ sb.append( blue ); >+ sb.append( "," ); >+ sb.append( alpha ); >+ sb.append( ")" ); >+ return sb.toString(); >+ } > } >Index: src/org/eclipse/rwt/internal/theme/QxShadow.java >=================================================================== >RCS file: src/org/eclipse/rwt/internal/theme/QxShadow.java >diff -N src/org/eclipse/rwt/internal/theme/QxShadow.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/rwt/internal/theme/QxShadow.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,158 @@ >+/******************************************************************************* >+ * Copyright (c) 2011 EclipseSource and others. All rights reserved. >+ * This program and the accompanying materials are made available under the >+ * terms of the Eclipse Public License v1.0 which accompanies this distribution, >+ * and is available at http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * EclipseSource - initial API and implementation >+ ******************************************************************************/ >+package org.eclipse.rwt.internal.theme; >+ >+ >+public class QxShadow implements QxType { >+ >+ public static final QxShadow NONE >+ = new QxShadow( false, 0 , 0, 0, 0, null, 0 ); >+ >+ public final boolean inset; >+ public final int offsetX; >+ public final int offsetY; >+ public final int blur; >+ public final int spread; >+ public final String color; >+ public final float opacity; >+ >+ private QxShadow( final boolean inset, >+ final int offsetX, >+ final int offsetY, >+ final int blur, >+ final int spread, >+ final String color, >+ final float opacity ) >+ { >+ this.inset = inset; >+ this.offsetX = offsetX; >+ this.offsetY = offsetY; >+ this.blur = blur; >+ this.spread = spread; >+ this.color = color; >+ this.opacity = opacity; >+ } >+ >+ public static QxShadow create( final boolean inset, >+ final int offsetX, >+ final int offsetY, >+ final int blur, >+ final int spread, >+ final QxColor color ) >+ { >+ String msg; >+ if( inset ) { >+ msg = "Shadow \"inset\" keyword is not supported"; >+ throw new IllegalArgumentException( msg ); >+ } >+ if( blur < 0 ) { >+ msg = "Shadow blur distance can't be negative"; >+ throw new IllegalArgumentException( msg ); >+ } >+ if( spread != 0 ) { >+ msg = "Shadow spread distance is not supported"; >+ throw new IllegalArgumentException( msg ); >+ } >+ if( color == null ) { >+ throw new NullPointerException( "null argument" ); >+ } >+ String htmlColor = QxColor.toHtmlString( color.red, >+ color.green, >+ color.blue ); >+ return new QxShadow( inset, >+ offsetX, >+ offsetY, >+ blur, >+ spread, >+ htmlColor, >+ color.alpha ); >+ } >+ >+ public boolean equals( final Object obj ) { >+ boolean result = false; >+ if( obj == this ) { >+ result = true; >+ } else if( obj instanceof QxShadow ) { >+ QxShadow other = ( QxShadow )obj; >+ result = other.inset == inset >+ && other.offsetX == offsetX >+ && other.offsetY == offsetY >+ && other.blur == blur >+ && other.spread == spread >+ && ( color == null >+ ? other.color == null >+ : color.equals( other.color ) ) >+ && other.opacity == opacity; >+ } >+ return result; >+ } >+ >+ public int hashCode() { >+ int result = 17; >+ result += 11 * result + offsetX; >+ result += 11 * result + offsetY; >+ result += 11 * result + blur; >+ result += 11 * result + spread; >+ if( color != null ) { >+ result += 11 * result + color.hashCode(); >+ } >+ result += 11 * result + Float.floatToIntBits( opacity ); >+ result += inset ? 0 : 11 * result + 13; >+ return result; >+ } >+ >+ public String toDefaultString() { >+ StringBuffer buffer = new StringBuffer(); >+ if( color == null ) { >+ buffer.append( "none" ); >+ } else { >+ if( inset ) { >+ buffer.append( "inset " ); >+ } >+ buffer.append( offsetX ); >+ buffer.append( "px " ); >+ buffer.append( offsetY ); >+ buffer.append( "px " ); >+ buffer.append( blur ); >+ buffer.append( "px " ); >+ buffer.append( spread ); >+ buffer.append( "px " ); >+ buffer.append( "rgba( " ); >+ QxColor qxColor = QxColor.valueOf( color ); >+ buffer.append( qxColor.red ); >+ buffer.append( ", " ); >+ buffer.append( qxColor.green ); >+ buffer.append( ", " ); >+ buffer.append( qxColor.blue ); >+ buffer.append( ", " ); >+ buffer.append( opacity ); >+ buffer.append( " )" ); >+ } >+ return buffer.toString(); >+ } >+ >+ public String toString() { >+ StringBuffer buffer = new StringBuffer(); >+ buffer.append( inset ); >+ buffer.append( ", " ); >+ buffer.append( offsetX ); >+ buffer.append( ", " ); >+ buffer.append( offsetY ); >+ buffer.append( ", " ); >+ buffer.append( blur ); >+ buffer.append( ", " ); >+ buffer.append( spread ); >+ buffer.append( ", " ); >+ buffer.append( color ); >+ buffer.append( ", " ); >+ buffer.append( opacity ); >+ return "QxShadow{ " + buffer.toString() + " }"; >+ } >+} >Index: src/org/eclipse/rwt/internal/theme/ThemeStoreWriter.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/theme/ThemeStoreWriter.java,v >retrieving revision 1.12 >diff -u -r1.12 ThemeStoreWriter.java >--- src/org/eclipse/rwt/internal/theme/ThemeStoreWriter.java 20 Dec 2010 14:51:08 -0000 1.12 >+++ src/org/eclipse/rwt/internal/theme/ThemeStoreWriter.java 28 Mar 2011 15:10:14 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. >+ * Copyright (c) 2009, 2011 EclipseSource and others. All rights reserved. > * This program and the accompanying materials are made available under the > * terms of the Eclipse Public License v1.0 which accompanies this distribution, > * and is available at http://www.eclipse.org/legal/epl-v10.html >@@ -54,6 +54,7 @@ > JsonObject borderMap = new JsonObject(); > JsonObject cursorMap = new JsonObject(); > JsonObject animationMap = new JsonObject(); >+ JsonObject shadowMap = new JsonObject(); > QxType[] values = new QxType[ valueSet.size() ]; > valueSet.toArray( values ); > for( int i = 0; i < values.length; i++ ) { >@@ -94,7 +95,7 @@ > } > } else if( value instanceof QxColor ) { > QxColor color = ( QxColor )value; >- if( color.transparent ) { >+ if( color.isTransparent() ) { > colorMap.append( key, "undefined" ); > } else { > colorMap.append( key, QxColor.toHtmlString( color.red, >@@ -137,6 +138,21 @@ > currentAnimationArray ); > } > animationMap.append( key, animationObject ); >+ } else if( value instanceof QxShadow ) { >+ QxShadow shadow = ( QxShadow )value; >+ if( shadow.equals( QxShadow.NONE ) ) { >+ shadowMap.append( key, JsonValue.NULL ); >+ } else { >+ JsonArray shadowArray = new JsonArray(); >+ shadowArray.append( shadow.inset ); >+ shadowArray.append( shadow.offsetX ); >+ shadowArray.append( shadow.offsetY ); >+ shadowArray.append( shadow.blur ); >+ shadowArray.append( shadow.spread ); >+ shadowArray.append( shadow.color ); >+ shadowArray.append( shadow.opacity ); >+ shadowMap.append( key, shadowArray ); >+ } > } > } > JsonObject valuesMap = new JsonObject(); >@@ -149,6 +165,7 @@ > valuesMap.append( "borders", borderMap ); > valuesMap.append( "cursors", cursorMap ); > valuesMap.append( "animations", animationMap ); >+ valuesMap.append( "shadows", shadowMap ); > return valuesMap; > } > >Index: src/org/eclipse/rwt/internal/theme/css/PropertyResolver.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/rwt/internal/theme/css/PropertyResolver.java,v >retrieving revision 1.23 >diff -u -r1.23 PropertyResolver.java >--- src/org/eclipse/rwt/internal/theme/css/PropertyResolver.java 21 Jan 2011 22:20:07 -0000 1.23 >+++ src/org/eclipse/rwt/internal/theme/css/PropertyResolver.java 28 Mar 2011 15:10:14 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2008, 2010 Innoopract Informationssysteme GmbH. >+ * Copyright (c) 2008, 2011 Innoopract Informationssysteme GmbH. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -119,6 +119,8 @@ > result = readFloat( unit ); > } else if( isAnimationProperty( name ) ) { > result = readAnimation( unit ); >+ } else if( isShadowProperty( name ) ) { >+ result = readShadow( unit ); > } else { > throw new IllegalArgumentException( "Unknown property " + name ); > } >@@ -183,6 +185,61 @@ > return result; > } > >+ static QxColor readColorWithAlpha( final LexicalUnit unit ) { >+ QxColor result = null; >+ int[] values = new int[ 3 ]; >+ float alpha = 1f; >+ short type = unit.getLexicalUnitType(); >+ if( type == LexicalUnit.SAC_FUNCTION >+ && "rgba".equals( unit.getFunctionName() ) ) >+ { >+ LexicalUnit nextUnit = unit.getParameters(); >+ boolean ok = nextUnit != null; >+ boolean mixedTypes = false; >+ short previousType = -1; >+ int pos = 0; >+ while( ok ) { >+ type = nextUnit.getLexicalUnitType(); >+ if( pos == 0 || pos == 2 || pos == 4 ) { >+ // color number >+ if( type == LexicalUnit.SAC_INTEGER ) { >+ values[ pos / 2 ] = normalizeRGBValue( nextUnit.getIntegerValue() ); >+ } else if( type == LexicalUnit.SAC_PERCENTAGE ) { >+ float percentValue >+ = normalizePercentValue( nextUnit.getFloatValue() ); >+ values[ pos / 2 ] = ( int )( 255 * percentValue / 100 ); >+ } else { >+ ok = false; >+ } >+ mixedTypes = previousType != -1 && previousType != type; >+ previousType = type; >+ } else if( pos == 1 || pos == 3 || pos == 5 ) { >+ // comma >+ if( type != LexicalUnit.SAC_OPERATOR_COMMA ) { >+ ok = false; >+ } >+ } else if( pos == 6 ) { >+ // alpha number >+ if( type == LexicalUnit.SAC_REAL ) { >+ alpha = normalizeAlphaValue( nextUnit.getFloatValue() ); >+ } else { >+ ok = false; >+ } >+ } >+ pos++; >+ nextUnit = nextUnit.getNextLexicalUnit(); >+ ok &= nextUnit != null && pos < 7 && !mixedTypes; >+ } >+ if( pos == 7 ) { >+ result = QxColor.create( values[ 0 ], values[ 1 ], values[ 2 ], alpha ); >+ } >+ } >+ if( result == null ) { >+ throw new IllegalArgumentException( "Failed to parse rgba color" ); >+ } >+ return result; >+ } >+ > static boolean isDimensionProperty( final String property ) { > return "spacing".equals( property ) > || "width".equals( property ) >@@ -771,6 +828,75 @@ > return result; > } > >+ static boolean isShadowProperty( final String property ) { >+ return "box-shadow".equals( property ); >+ } >+ >+ static QxShadow readShadow( final LexicalUnit unit ) { >+ QxShadow result = null; >+ boolean inset = false; >+ Integer offsetX = null; >+ Integer offsetY = null; >+ int blur = 0; >+ int spread = 0; >+ QxColor color = QxColor.BLACK; >+ LexicalUnit nextUnit = unit; >+ short type = nextUnit.getLexicalUnitType(); >+ if( type == LexicalUnit.SAC_IDENT ) { >+ String value = nextUnit.getStringValue(); >+ if( NONE.equals( value ) ) { >+ result = QxShadow.NONE; >+ } else if( INSET.equals( value ) ) { >+ inset = true; >+ } >+ nextUnit = nextUnit.getNextLexicalUnit(); >+ } >+ if( result == null ) { >+ boolean ok = true; >+ int pos = 0; >+ while( nextUnit != null && ok ) { >+ pos++; >+ Integer nextValue = readSingleLengthUnit( nextUnit ); >+ ok &= nextValue != null && pos <= 4; >+ if( ok ) { >+ if( pos == 1 ) { >+ offsetX = nextValue; >+ } else if( pos == 2 ) { >+ offsetY = nextValue; >+ } else if( pos == 3 ) { >+ blur = nextValue.intValue(); >+ } else if( pos == 4 ) { >+ spread = nextValue.intValue(); >+ } >+ nextUnit = nextUnit.getNextLexicalUnit(); >+ } >+ } >+ if( nextUnit != null ) { >+ type = nextUnit.getLexicalUnitType(); >+ if( type == LexicalUnit.SAC_FUNCTION >+ && "rgba".equals( nextUnit.getFunctionName() ) ) >+ { >+ color = readColorWithAlpha( nextUnit ); >+ } else { >+ color = readColor( nextUnit ); >+ } >+ } >+ } >+ if( offsetX != null && offsetY != null ) { >+ result = QxShadow.create( inset, >+ offsetX.intValue(), >+ offsetY.intValue(), >+ blur, >+ spread, >+ color ); >+ } >+ if( result == null ) { >+ throw new IllegalArgumentException( "Failed to parse shadow " >+ + toString( unit ) ); >+ } >+ return result; >+ } >+ > private static Integer readSingleLengthUnit( final LexicalUnit unit ) { > Integer result = null; > short type = unit.getLexicalUnitType(); >@@ -795,6 +921,16 @@ > return result; > } > >+ private static float normalizeAlphaValue( final float input ) { >+ float result = input; >+ if( input < 0 ) { >+ result = 0f; >+ } else if( input > 1 ) { >+ result = 1f; >+ } >+ return result; >+ } >+ > private static float normalizePercentValue( final float input ) { > float result = input; > if( input < 0f ) { >Index: src/org/eclipse/swt/internal/widgets/shellkit/Shell.default.css >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/shellkit/Shell.default.css,v >retrieving revision 1.15 >diff -u -r1.15 Shell.default.css >--- src/org/eclipse/swt/internal/widgets/shellkit/Shell.default.css 3 Mar 2011 15:49:22 -0000 1.15 >+++ src/org/eclipse/swt/internal/widgets/shellkit/Shell.default.css 28 Mar 2011 15:10:14 -0000 >@@ -18,9 +18,11 @@ > padding: 0px; > background-image: none; > opacity: 1; >+ box-shadow: none; > } > > Shell[TITLE], Shell[BORDER] { >+ box-shadow: 5px 5px 3px rgba( 0, 0, 0, 0.5 ); > background-color: white; > border: 2px solid #005092; > border-radius: 5px 5px 0px 0px; >@@ -29,10 +31,12 @@ > > Shell[BORDER]:inactive, Shell[TITLE]:inactive { > border: 2px solid #4b4b4b; >+ box-shadow: none; > } > > Shell:maximized, Shell:maximized:inactive { > border: none; >+ box-shadow: none; > border-radius: 0px 0px 0px 0px; > } > >Index: src/org/eclipse/swt/internal/widgets/shellkit/Shell.theme.xml >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/widgets/shellkit/Shell.theme.xml,v >retrieving revision 1.38 >diff -u -r1.38 Shell.theme.xml >--- src/org/eclipse/swt/internal/widgets/shellkit/Shell.theme.xml 6 Feb 2011 16:57:15 -0000 1.38 >+++ src/org/eclipse/swt/internal/widgets/shellkit/Shell.theme.xml 28 Mar 2011 15:10:14 -0000 >@@ -1,6 +1,6 @@ > <?xml version="1.0" encoding="UTF-8" ?> > <!-- >- Copyright (c) 2008, 2009 Innoopract Informationssysteme GmbH. >+ Copyright (c) 2008, 2011 Innoopract Informationssysteme GmbH. > All rights reserved. This program and the accompanying materials > are made available under the terms of the Eclipse Public License v1.0 > which accompanies this distribution, and is available at >@@ -35,8 +35,11 @@ > <property name="background-color" > description="Background color for shells." /> > >- <property name="opacity" >- description="The opacity of the shell. A value between 0 and 1." /> >+ <property name="opacity" >+ description="The opacity of the shell. A value between 0 and 1." /> >+ >+ <property name="box-shadow" >+ description="The shadow behind the shell." /> > > <style name="BORDER" > description="Indicates that the shell should have a border." /> >#P org.eclipse.rap.rwt.q07 >Index: js/org/eclipse/rwt/GraphicsMixin.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/rwt/GraphicsMixin.js,v >retrieving revision 1.20 >diff -u -r1.20 GraphicsMixin.js >--- js/org/eclipse/rwt/GraphicsMixin.js 14 Feb 2011 16:12:48 -0000 1.20 >+++ js/org/eclipse/rwt/GraphicsMixin.js 28 Mar 2011 15:10:15 -0000 >@@ -19,13 +19,63 @@ > apply : "_applyBackgroundGradient", > event : "changeBackgroundGradient", > themeable : true >+ }, >+ >+ /** >+ * Syntax for shadow: >+ * [ >+ * inset, //boolean, currently not supported >+ * offsetX, // positive or negative number >+ * offsetY, // positive or negative number >+ * blurRadius, // positive number or zero >+ * spread, // positive or negative number >+ * color, // string >+ * opacity, // number between 0 and 1 >+ * ] >+ */ >+ shadow : { >+ check : "Array", >+ nullable : true, >+ init : null, >+ apply : "_applyShadow", >+ event : "changeShadow", >+ themeable : true > } > > }, >+ >+ statics : { >+ >+ getSupportsShadows : function() { >+ if( this._shadowSupport === undefined ) { >+ var engine = org.eclipse.rwt.Client.getEngine(); >+ var version = org.eclipse.rwt.Client.getVersion(); >+ this._shadowSupport = false; >+ switch( engine ) { >+ case "gecko": >+ this._shadowSupport = version >= 1.9; >+ break; >+ case "mshtml": >+ this._shadowSupport = version >= 7; >+ break; >+ case "opera": >+ this._shadowSupport = version >= 9.8; >+ break; >+ case "webkit": >+ var browser = org.eclipse.rwt.Client.getBrowser(); >+ this._shadowSupport = /* browser === "chrome" && */ version >= 532.9; >+ break; >+ } >+ } >+ return this._shadowSupport; >+ } >+ >+ }, > > members : { > // NOTE : "gfx" (short for "graphics") is used in field-names to prevent > // potential name-clashes with the classes including this mixin. >+ // TODO [tb] : refactor to work entirely with gfxData (with setter/getter) > _gfxData : null, > _gfxProperties : null, > _gfxCanvas : null, >@@ -41,7 +91,14 @@ > // color-theme values are NOT supported for gradient > this.setGfxProperty( "gradient", value ); > this._handleGfxBackground(); >- } , >+ }, >+ >+ _applyShadow : function( value, oldValue ) { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ this.setGfxProperty( "shadow", value ); >+ this._handleGfxShadow(); >+ } >+ }, > > //overwritten > _styleBackgroundColor : function( value ) { >@@ -105,7 +162,7 @@ > this.setGfxProperty( "borderMaxWidth", max ); > this.setGfxProperty( "borderColor", color ); > this.setGfxProperty( "borderRadii", renderRadii ); >- this.setGfxProperty( "borderLayouted", false ); // use GfxBorder to chcek >+ this.setGfxProperty( "borderLayouted", null ); // use GfxBorder to chcek > this._handleGfxBorder(); > }, > >@@ -160,13 +217,16 @@ > // if gfxBorder is not used, canvas can still ready for background > if( ( toggle || useBorder ) && this._isCanvasReady() ) { > this._renderGfxBorder(); >- if ( useBorder && this._willBeLayouted() ) { >- this._enableGfxLayout( true ); >- //_layoutGfxBorder will be called on the next _layoutPost anyway >- } else { >+ if( !useBorder || !this._willBeLayouted() ) { >+ // TODO [tb] : refactor conditions, "!useBorder" is only for padding > this._layoutGfxBorder(); >+ if( this._gfxShadowEnabled ) { >+ this._layoutGfxShadow(); >+ } > } >+ this._handleFlushListener(); > } else if( toggle && !useBorder && this._innerStyle ) { >+ this._handleFlushListener(); > this._setSimulatedPadding(); > } > }, >@@ -203,14 +263,37 @@ > this.setGfxProperty( "backgroundImage", null ); > } > this._handleGfxStatus(); >- } >- if( ( toggle || useBackground ) && this._isCanvasReady() ) { >+ } >+ if( ( toggle || useBackground ) && this._isCanvasReady() ) { > this._renderGfxBackground(); >+ } else if( !useBackground >+ && this._gfxData >+ && this._gfxData.backgroundInsert ) >+ { >+ this._prepareBackgroundShape(); >+ } >+ }, >+ >+ _handleGfxShadow : function() { >+ var hasShadow = this.getGfxProperty( "shadow" ) != null; >+ this._gfxShadowEnabled = hasShadow; >+ this._handleGfxStatus(); >+ this._handleFlushListener(); >+ if( this._isCanvasReady() ) { >+ this._renderGfxShadow(); >+ } else if( !this._gfxShadowEnabled >+ && this._gfxData >+ && this._gfxData.shadowInsert ) >+ { >+ // remove shape from canvas >+ this._prepareShadowShape(); > } > }, > > _handleGfxStatus : function() { >- var useGfx = ( this._gfxBorderEnabled || this._gfxBackgroundEnabled ); >+ var useGfx = this._gfxBorderEnabled >+ || this._gfxBackgroundEnabled >+ || this._gfxShadowEnabled; > if( useGfx != this._gfxEnabled ) { > if( useGfx ) { > this.addEventListener( "changeElement", >@@ -230,21 +313,21 @@ > // internals - canvas > > _isCanvasReady : function() { >- var ret = false; >+ var result = false; > if( this._isCreated ) { > if( this._gfxEnabled && this._gfxCanvasAppended ) { >- ret = true; >+ result = true; > } else if( this._gfxEnabled && !this._gfxCanvasAppended ) { > if( this._gfxCanvas == null ) { > this._createCanvas(); > } > this._appendCanvas(); >- ret = true; >+ result = true; > } else if( !this._gfxEnabled && this._gfxCanvasAppended ) { > this._removeCanvas(); > } > } >- return ret; >+ return result; > }, > > _createCanvas : function() { >@@ -273,7 +356,8 @@ > } > this._gfxData = {}; > this._gfxCanvas = org.eclipse.rwt.GraphicsUtil.createCanvas(); >- this._prepareGfxShape(); >+ // TODO [tb] : can be removed? >+ this._prepareBackgroundShape(); > }, > > _appendCanvas : function() { >@@ -300,47 +384,44 @@ > } > }, > >- //overwritten, analog to the above function: >- _getTargetNode : function() { >- return this._targetNode || this._element; >- }, >- >- //////////////////// >- // internals - shape >+ ////////////////////////////// >+ // internals - backgroundShape > >- _prepareGfxShape : function() { >+ _prepareBackgroundShape : function() { > var util = org.eclipse.rwt.GraphicsUtil; >- var shape = this._gfxData.currentShape; >- if( shape ) { >- if( !this._gfxBorderEnabled && shape !== this._gfxData.rect ) { >- util.removeFromCanvas( this._gfxCanvas, shape ); >- if( !this._gfxData.rect ) { >- shape = this._createGfxShape( false ); >- } else { >- shape = this._gfxData.rect; >- } >- util.addToCanvas( this._gfxCanvas, shape ); >- this._gfxData.currentShape = shape; >- } else if( this._gfxBorderEnabled >- && shape !== this._gfxData.pathElement ) >- { >- util.removeFromCanvas( this._gfxCanvas, shape ); >- if( !this._gfxData.pathElement ) { >- shape = this._createGfxShape( true ); >- } else { >- shape = this._gfxData.pathElement; >+ var backgroundShape = this._gfxData.backgroundShape; >+ if( this._gfxBackgroundEnabled ) { >+ var usePath = this._gfxBorderEnabled; >+ if( backgroundShape === undefined ) { >+ this._gfxData.backgroundShape >+ = this._createBackgroundShape( usePath ); >+ } else { >+ if( usePath && backgroundShape === this._gfxData.rectShape ) { >+ util.removeFromCanvas( this._gfxCanvas, backgroundShape ); >+ this._gfxData.backgroundInsert = false; >+ delete this._gfxData.rectShape; >+ this._gfxData.backgroundShape >+ = this._createBackgroundShape( usePath ); >+ } else if( !usePath && backgroundShape === this._gfxData.pathElement ) { >+ util.removeFromCanvas( this._gfxCanvas, backgroundShape ); >+ this._gfxData.backgroundInsert = false; >+ delete this._gfxData.pathElement; >+ this._gfxData.backgroundShape >+ = this._createBackgroundShape( usePath ); > } >+ } >+ if( !this._gfxData.backgroundInsert ) { >+ var shape = this._gfxData.backgroundShape; > util.addToCanvas( this._gfxCanvas, shape ); >- this._gfxData.currentShape = shape; >+ this._gfxData.backgroundInsert = true; > } >- } else { // no shape created at all >- shape = this._createGfxShape( this._gfxBorderEnabled ); >- util.addToCanvas( this._gfxCanvas, shape ); >- this._gfxData.currentShape = shape; >+ } else if( this._gfxData.backgroundInsert ) { >+ util.removeFromCanvas( this._gfxCanvas, backgroundShape ); >+ this._gfxData.backgroundInsert = false; > } > }, > >- _createGfxShape : function( usePath ) { >+ _createBackgroundShape : function( usePath ) { > var shape = null; > var util = org.eclipse.rwt.GraphicsUtil; > if( usePath ) { >@@ -349,7 +430,7 @@ > } else { > var shape = util.createShape( "rect" ); > util.setRectBounds( shape, "0%", "0%", "100%", "100%" ); >- this._gfxData.rect = shape; >+ this._gfxData.rectShape = shape; > } > return shape; > }, >@@ -359,21 +440,21 @@ > // internals - background > > _renderGfxBackground : function() { >- this._prepareGfxShape(); >+ this._prepareBackgroundShape(); > var fillType = this.getGfxProperty( "fillType" ); > var util = org.eclipse.rwt.GraphicsUtil; > if( fillType == "gradient" ) { > var gradient = this.getGfxProperty( "gradient" ); >- util.setFillGradient( this._gfxData.currentShape, gradient ); >+ util.setFillGradient( this._gfxData.backgroundShape, gradient ); > } else if( fillType == "image" ) { > var image = this.getGfxProperty( "backgroundImage" ); > image = typeof image == "undefined" ? null : image; > var size = this._getImageSize( image ); >- util.setFillPattern( this._gfxData.currentShape, image, size[ 0 ], size[ 1 ] ); >+ util.setFillPattern( this._gfxData.backgroundShape, image, size[ 0 ], size[ 1 ] ); > } else { //assume fillType is "solid" > var color = this.getGfxProperty( "backgroundColor" ); > color = color == "" ? null : color; >- util.setFillColor( this._gfxData.currentShape, color ); >+ util.setFillColor( this._gfxData.backgroundShape, color ); > } > }, > >@@ -384,8 +465,8 @@ > this._style.borderWidth = 0; > var inner = this._innerStyle; > inner.borderWidth = 0; >- this._prepareGfxShape(); >- var shape = this._gfxData.currentShape; >+ this._prepareBackgroundShape(); >+ var shape = this._gfxData.backgroundShape; > var width = this.getGfxProperty( "borderMaxWidth" ); > var color = this.getGfxProperty( "borderColor" ); > org.eclipse.rwt.GraphicsUtil.setStroke( shape, color, width ); >@@ -393,20 +474,19 @@ > > _layoutGfxBorder : function() { > var rectDimension = [ this.getBoxWidth(), this.getBoxHeight() ]; >- var oldDimension = this.getGfxProperty( "rectDimension" ); >- if( !this.getGfxProperty( "borderLayouted" ) >- || ( rectDimension[ 0 ] != oldDimension[ 0 ] ) >- || ( rectDimension[ 1 ] != oldDimension[ 1 ] ) ) >- { >- this.setGfxProperty( "rectDimension", rectDimension ); >+ var oldDimension = this.getGfxProperty( "borderLayouted" ); >+ var changedX >+ = !oldDimension || ( rectDimension[ 0 ] !== oldDimension[ 0 ] ); >+ var changedY >+ = !oldDimension || ( rectDimension[ 1 ] !== oldDimension[ 1 ] ); >+ if( changedX || changedY ) { >+ this.setGfxProperty( "borderLayouted", rectDimension ); > this._setSimulatedPadding(); >+ var rectDimension = [ this.getBoxWidth(), this.getBoxHeight() ]; > var radii = this.getGfxProperty( "borderRadii" ); > var borderWidth = this.getGfxProperty( "borderWidths" ); > if( borderWidth != null && radii != null ) { >- var shape = this._gfxData.pathElement; > var maxWidth = this.getGfxProperty( "borderMaxWidth" ); >- this._enableGfxLayout( true ); >- var rectDimension = this.getGfxProperty( "rectDimension" ); > var borderTop = 0; > var borderRight = 0; > var borderBottom = 0; >@@ -430,16 +510,14 @@ > //a few safeguards: > rectWidth = Math.max( 0, rectWidth ); > rectHeight = Math.max( 0, rectHeight ); >+ var shape = this._gfxData.pathElement; > org.eclipse.rwt.GraphicsUtil.setRoundRectLayout( shape, > left, > top, > rectWidth, > rectHeight, > radii ); >- } else { >- this._enableGfxLayout( false ); > } >- this.setGfxProperty( "borderLayouted", true ); > } > }, > >@@ -447,7 +525,7 @@ > var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); > var width = this.getGfxProperty( "borderWidths" ); > if( width ) { >- var rect = this.getGfxProperty( "rectDimension" ); >+ var rect = this.getGfxProperty( "borderLayouted" ); > var style = this._innerStyle; > style.top = width[ 0 ] + "px"; > style.left = width[ 3 ] + "px"; >@@ -468,15 +546,92 @@ > } > }, > >- _enableGfxLayout : function( value ) { >- this._layoutTargetNode = !value; >- if( value ) { >+ _handleFlushListener : function( value ) { >+ var enhanced = this._innerStyle || this._gfxEnabled; >+ this._layoutTargetNode = enhanced && !this._gfxBorderEnabled; >+ if( this._gfxBorderEnabled || this._gfxShadowEnabled ) { > this.addEventListener( "flush", this._gfxOnFlush, this ); > } else { > this.removeEventListener( "flush", this._gfxOnFlush, this ); > } > }, > >+ //////////////////// >+ // internal - shadow >+ >+ _prepareShadowShape : function() { >+ var util = org.eclipse.rwt.GraphicsUtil; >+ if( this._gfxShadowEnabled ) { >+ if( this._gfxData.shadowShape === undefined ) { >+ this._createShadowShape(); >+ var canvasNode = util.getCanvasNode( this._gfxCanvas ); >+ org.eclipse.rwt.HtmlUtil.setPointerEvents( canvasNode, "none" ); >+ } >+ var shape = this._gfxData.shadowShape; >+ if( !this._gfxData.shadowInsert ) { >+ var before = null; >+ if( this._gfxData.backgroundInsert ) { >+ before = this._gfxData.backgroundShape; >+ } >+ util.addToCanvas( this._gfxCanvas, shape, before ); >+ this._gfxData.shadowInsert = true; >+ } >+ } else if( this._gfxData.shadowInsert ) { >+ util.removeFromCanvas( this._gfxCanvas, this._gfxData.shadowShape ); >+ // disable overflow: >+ util.enableOverflow( this._gfxCanvas, 0, 0, null, null ); >+ delete this._gfxData.shadowInsert; >+ } >+ }, >+ >+ _createShadowShape : function() { >+ var shape = null; >+ var util = org.eclipse.rwt.GraphicsUtil; >+ var shape = util.createShape( "roundrect" ); >+ this._gfxData.shadowShape = shape; >+ return shape; >+ }, >+ >+ _renderGfxShadow : function() { >+ this._prepareShadowShape(); >+ if( this._gfxShadowEnabled ) { >+ var util = org.eclipse.rwt.GraphicsUtil; >+ var shadow = this.getGfxProperty( "shadow" ); >+ var shape = this._gfxData.shadowShape; >+ util.setBlur( shape, shadow[ 3 ] ); >+ util.setFillColor( shape, shadow[ 5 ] ); >+ util.setOpacity( shape, shadow[ 6 ] ); >+ this._layoutGfxShadow(); >+ } >+ }, >+ >+ _layoutGfxShadow : function() { >+ var util = org.eclipse.rwt.GraphicsUtil; >+ var rect = [ this.getBoxWidth(), this.getBoxHeight() ]; >+ var shape = this._gfxData.shadowShape; >+ var shadow = this.getGfxProperty( "shadow" ); >+ var radii = this.getGfxProperty( "borderRadii" ); >+ radii = radii === null ? [ 0, 0, 0, 0 ] : radii; >+ var left = shadow[ 1 ]; >+ var top = shadow[ 2 ]; >+ var width = rect[ 0 ]; >+ var height = rect[ 1 ]; >+ var blur = shadow[ 3 ]; >+ var overflowLeft = left < 0 ? Math.abs( left ) + blur : 0; >+ var overflowTop = top < 0 ? Math.abs( top ) + blur : 0; >+ var overflowRight = Math.max( 0, blur + left ); >+ var overflowBottom = Math.max( 0, blur + top ); >+ var overflowWidth = width + overflowRight; >+ var overflowHeight = height + overflowBottom; >+ // overflow-area must be defined every time: >+ util.enableOverflow( this._gfxCanvas, >+ overflowLeft, >+ overflowTop, >+ overflowWidth, >+ overflowHeight ); >+ util.setRoundRectLayout( shape, left, top, width, height, radii ); >+ }, >+ > //////////////////////////////////// > // internals - helper & eventhandler > >@@ -500,7 +655,12 @@ > this._removeCanvas(); > } > if( event.getValue() != null && this._isCanvasReady() ) { >- this._renderGfxBackground(); >+ if( this._gfxBackgroundEnabled ) { >+ this._renderGfxBackground(); >+ } >+ if( this._gfxShadowEnabled ) { >+ this._renderGfxShadow(); >+ } > // border is handled by widget queue > } > }, >@@ -519,11 +679,17 @@ > }, > > _gfxOnFlush : function( event ) { >+ // TODO [tb] : refactor / optimize > var changes = event.getData(); > if ( changes.paddingRight || changes.paddingBottom ) { >- this.setGfxProperty( "borderLayouted", false ); >+ this.setGfxProperty( "borderLayouted", null ); >+ } >+ if( this._gfxBorderEnabled ) { >+ this._layoutGfxBorder(); >+ } >+ if( this._gfxShadowEnabled ) { >+ this._layoutGfxShadow(); > } >- this._layoutGfxBorder(); > } > > } >Index: js/org/eclipse/rwt/GraphicsUtil.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/rwt/GraphicsUtil.js,v >retrieving revision 1.8 >diff -u -r1.8 GraphicsUtil.js >--- js/org/eclipse/rwt/GraphicsUtil.js 2 Feb 2011 16:11:11 -0000 1.8 >+++ js/org/eclipse/rwt/GraphicsUtil.js 28 Mar 2011 15:10:15 -0000 >@@ -64,6 +64,15 @@ > }, > > /** >+ * Grants the canvas at least 50 px overflow in every direction. >+ * The overflow captures events, so HtmlUtil.setPointerEvents should be >+ * used on canvas. Not setting this does not mean that overflow is hidden. >+ */ >+ enableOverflow : function( canvas, x, y, width, height ) { >+ this._renderClass.enableOverflow( canvas, x, y, width, height ); >+ }, >+ >+ /** > * Returns a handle for a shape. This objects members are considered > * package-private and should not be accessed outside the renderclass. > * Currently supported types: "rect", "roundrect" >@@ -78,8 +87,8 @@ > > // TODO [tb] : There might currently be a glitch in IE if a shape is added > // to an alreadey visible canvas. >- addToCanvas : function( canvas, shape ) { >- this._renderClass.addToCanvas( canvas, shape ); >+ addToCanvas : function( canvas, shape, beforeShape ) { >+ this._renderClass.addToCanvas( canvas, shape, beforeShape ); > }, > > removeFromCanvas : function( canvas, shape ) { >@@ -202,8 +211,24 @@ > */ > setOpacity : function( shape, opacity ) { > this._renderClass.setOpacity( shape, opacity ); >+ }, >+ >+ getOpacity : function( shape ) { >+ return this._renderClass.getOpacity( shape ); >+ }, >+ >+ /** >+ * radius is 0 or greater >+ */ >+ setBlur : function( shape, radius ) { >+ this._renderClass.setBlur( shape, radius ); >+ }, >+ >+ getBlur : function( shape ) { >+ return this._renderClass.getBlur( shape ); > } > >+ > } > > } ); >\ No newline at end of file >Index: js/org/eclipse/rwt/HtmlUtil.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/rwt/HtmlUtil.js,v >retrieving revision 1.4 >diff -u -r1.4 HtmlUtil.js >--- js/org/eclipse/rwt/HtmlUtil.js 26 Oct 2010 10:23:05 -0000 1.4 >+++ js/org/eclipse/rwt/HtmlUtil.js 28 Mar 2011 15:10:15 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright: 2004-2010 1&1 Internet AG, Germany, http://www.1und1.de, >+ * Copyright: 2004, 2011 1&1 Internet AG, Germany, http://www.1und1.de, > * and EclipseSource > * > * This program and the accompanying materials are made available under the >@@ -24,7 +24,7 @@ > setOpacity : qx.core.Variant.select("qx.client", { > "mshtml" : function( target, value ) { > if( value == null || value >= 1 || value < 0 ) { >- this._removeCssFilter( target ); >+ this.removeCssFilter( target ); > } else { > var valueStr = "Alpha(opacity=" + Math.round( value * 100 ) + ")"; > this.setStyleProperty( target, "filter", valueStr ); >@@ -46,6 +46,21 @@ > } > } ), > >+ setPointerEvents : function( target, value ) { >+ var version = org.eclipse.rwt.Client.getVersion(); >+ var ffSupport >+ = org.eclipse.rwt.Client.getEngine() === "gecko" && version >= 1.9; >+ // NOTE: chrome does not support pointerEvents, but not on svg-nodes >+ var webKitSupport >+ = org.eclipse.rwt.Client.getBrowser() === "safari" && version >= 530; >+ if( ffSupport || webKitSupport ) { >+ this.setStyleProperty( target, "pointerEvents", value ); >+ target.setAttribute( "pointerEvents", value ); >+ } else { >+ this._passEventsThrough( target, value ); >+ } >+ }, >+ > setStyleProperty : function( target, property, value ) { > if( target instanceof qx.ui.core.Widget ) { > target.setStyleProperty( property, value ); >@@ -53,7 +68,7 @@ > target.style[ property ] = value; > } > }, >- >+ > removeStyleProperty : function( target, property ) { > if( target instanceof qx.ui.core.Widget ) { > target.removeStyleProperty( property ); >@@ -61,11 +76,8 @@ > target.style[ property ] = ""; > } > }, >- >- ////////// >- // Private >- >- _removeCssFilter : function( target ) { >+ >+ removeCssFilter : function( target ) { > var element = null; > if( target instanceof qx.ui.core.Widget ) { if( target.isCreated() ) { > element = target.getElement(); >@@ -80,7 +92,80 @@ > cssText = cssText.replace( /FILTER:[^;]*(;|$)/, "" ); > element.style.cssText = cssText; > } >- } >- } >+ }, >+ >+ ///////// >+ // Helper >+ >+ _passEventsThrough : function( target, value ) { >+ // TODO [tb] : This is a very limited implementation that allowes >+ // to click "through" the elmement, but won't handle hover and cursor. >+ var util = qx.html.EventRegistration; >+ var types = org.eclipse.rwt.EventHandler._mouseEventTypes; >+ var handler = this._passEventThroughHandler; >+ if( value === "none" ) { >+ this.setStyleProperty( target, "cursor", "default" ); >+ for( var i = 0; i < types.length; i++ ) { >+ util.addEventListener( target, types[ i ], handler ); >+ } >+ } else { >+ // TODO >+ } >+ }, >+ >+ _passEventThroughHandler : function() { >+ var util = org.eclipse.rwt.EventHandlerUtil; >+ var domEvent = util.getDomEvent( arguments ); >+ var domTarget = util.getDomTarget( domEvent ); >+ var type = domEvent.type; >+ domTarget.style.display = "none"; >+ var newTarget >+ = document.elementFromPoint( domEvent.clientX, domEvent.clientY ); >+ domEvent.cancelBubble = true; >+ util.stopDomEvent( domEvent ); >+ if( newTarget >+ && type !== "mousemove" >+ && type !== "mouseover" >+ && type !== "mouseout" ) >+ { >+ if( type === "mousedown" ) { >+ org.eclipse.rwt.HtmlUtil._refireEvent( newTarget, "mouseover", domEvent ); >+ } >+ org.eclipse.rwt.HtmlUtil._refireEvent( newTarget, type, domEvent ); >+ if( type === "mouseup" ) { >+ org.eclipse.rwt.HtmlUtil._refireEvent( newTarget, "mouseout", domEvent ); >+ } >+ } >+ domTarget.style.display = ""; >+ }, >+ >+ _refireEvent : qx.core.Variant.select("qx.client", { >+ "mshtml" : function( target, type, originalEvent ) { >+ var newEvent = document.createEventObject( originalEvent ); >+ target.fireEvent( "on" + type , newEvent ); >+ }, >+ "default" : function( target, type, originalEvent ) { >+ var newEvent = document.createEvent( "MouseEvents" ); >+ newEvent.initMouseEvent( type, >+ true, /* can bubble */ >+ true, /*cancelable */ >+ originalEvent.view, >+ originalEvent.detail, >+ originalEvent.screenX, >+ originalEvent.screenY, >+ originalEvent.clientX, >+ originalEvent.clientY, >+ originalEvent.ctrlKey, >+ originalEvent.altKey, >+ originalEvent.shiftKey, >+ originalEvent.metaKey, >+ originalEvent.button, >+ originalEvent.relatedTarget); >+ console.log( "dispatch " + event.type ); >+ target.dispatchEvent( newEvent ); >+ } >+ } ) > >+ } >+ > } ); >Index: js/org/eclipse/rwt/SVG.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/rwt/SVG.js,v >retrieving revision 1.13 >diff -u -r1.13 SVG.js >--- js/org/eclipse/rwt/SVG.js 11 Jan 2011 15:57:31 -0000 1.13 >+++ js/org/eclipse/rwt/SVG.js 28 Mar 2011 15:10:15 -0000 >@@ -11,36 +11,66 @@ > qx.Class.define( "org.eclipse.rwt.SVG", { > > statics : { >- >+ > init : function(){ > // nothing to do > }, >- >+ > createCanvas : function() { > var result = {}; > var node = this._createNode( "svg" ); > node.style.position = "absolute" > node.style.left = "0px"; >- node.style.right = "0px"; >+ node.style.top = "0px"; > node.style.width = "100%"; >- node.style.height = "100%" >- node.style.overflow = "hidden"; >+ node.style.height = "100%"; > var defs = this._createNode( "defs" ); > node.appendChild( defs ); > result.type = "svgCanvas"; > result.node = node; >+ result.group = node; > result.defsNode = defs; > return result; > }, >- >+ > getCanvasNode : function( canvas ) { > return canvas.node; > }, >- >+ > handleAppear : function( canvas ) { > // nothing to do > }, >- >+ >+ enableOverflow : function( canvas, x, y, width, height ) { >+ // Supported in firefox 3.0+, safari and chrome (with limitations) >+ if( canvas.group === canvas.node ) { >+ var node = canvas.node; >+ var group = this._createNode( "g" ); >+ canvas.group = group; >+ while( node.firstChild ) { >+ group.appendChild( node.firstChild ); >+ } >+ node.appendChild( group ); >+ } >+ canvas.node.style.left = ( x * -1 ) + "px"; >+ canvas.node.style.top = ( y * -1 ) + "px"; >+ if( width ) { >+ canvas.node.style.width = ( x + width ) + "px"; >+ } else { >+ canvas.node.style.width = "100%"; >+ } >+ if( height ) { >+ canvas.node.style.height = ( y + height ) + "px"; >+ } else { >+ canvas.node.style.height = "100%"; >+ } >+ if( x === 0 && y === 0 ) { >+ canvas.group.setAttribute( "transform", "" ); >+ } else { >+ canvas.group.setAttribute( "transform", "translate(" + x + "," + y + ")" ); >+ } >+ }, >+ > createShape : function( type ) { > var result; > switch( type ) { >@@ -61,23 +91,27 @@ > result.parent = null > return result; > }, >- >- addToCanvas : function( canvas, shape ) { >+ >+ addToCanvas : function( canvas, shape, beforeShape ) { > shape.parent = canvas; >- canvas.node.appendChild( shape.node ); >+ if( beforeShape ) { >+ canvas.group.insertBefore( shape.node, beforeShape.node ); >+ } else { >+ canvas.group.appendChild( shape.node ); >+ } > this._attachDefinitions( shape ); > }, >- >+ > removeFromCanvas : function( canvas, shape ) { > this._detachDefinitions( shape ); >- canvas.node.removeChild( shape.node ); >+ canvas.group.removeChild( shape.node ); > shape.parent = null; > }, >- >+ > setDisplay : function( shape, value ) { > shape.node.setAttribute( "display", value ? "inline" : "none" ); > }, >- >+ > getDisplay : function( shape ) { > var display = shape.node.getAttribute( "display" ); > var result = display == "none" ? false : true; >@@ -91,7 +125,7 @@ > node.setAttribute( "x", this._convertNumeric( x ) ); > node.setAttribute( "y", this._convertNumeric( y ) ); > }, >- >+ > setRoundRectLayout : function( shape, x, y, width, height, radii ) { > var radiusLeftTop = radii[ 0 ]; > var radiusTopRight = radii[ 1 ]; >@@ -140,7 +174,7 @@ > shape.node.setAttribute( "fill", "none" ); > } > }, >- >+ > getFillColor : function( shape ) { > var result = null; > if( this.getFillType( shape ) == "color" ) { >@@ -148,7 +182,7 @@ > } > return result; > }, >- >+ > setFillGradient : function( shape, gradient ) { > if( gradient != null ) { > var id = "gradient_" + qx.core.Object.toHashCode( shape ); >@@ -230,7 +264,7 @@ > shape.node.setAttribute( "fill", "none" ); > } > }, >- >+ > getFillType : function( shape ) { > var result = shape.node.getAttribute( "fill" ); > if( result.search( "pattern_") != -1 ) { >@@ -259,14 +293,49 @@ > // this assumes that only px can be set, which is true within this class > return parseFloat( shape.node.getAttribute( "stroke-width" ) ); > }, >- >+ > setOpacity : function( shape, opacity ) { > shape.node.setAttribute( "opacity", opacity ); > }, >+ >+ getOpacity : function( shape ) { >+ var result = shape.node.getAttribute( "opacity" ); >+ return result ? result : 0; >+ }, >+ >+ setBlur : function( shape, blurRadius ) { >+ if( blurRadius > 0 ) { >+ var id = "filter_" + qx.core.Object.toHashCode( shape ); >+ var filterNode; >+ if( typeof shape.defNodes[ id ] === "undefined" ) { >+ filterNode = this._createNode( "filter" ); >+ filterNode.setAttribute( "id", id ); >+ filterNode.appendChild( this._createNode( "feGaussianBlur" ) ); >+ this._addNewDefinition( shape, filterNode, id ); >+ } else { >+ filterNode = shape.defNodes[ id ]; >+ } >+ filterNode.firstChild.setAttribute( "stdDeviation", blurRadius / 2 ); >+ shape.node.setAttribute( "filter", "url(#" + id + ")" ); >+ } else { >+ shape.node.setAttribute( "filter", "none" ); >+ } >+ }, >+ >+ getBlur : function( shape ) { >+ var result = 0; >+ var filter = shape.node.getAttribute( "filter" ); >+ if( filter && filter !== "none" ) { >+ var id = "filter_" + qx.core.Object.toHashCode( shape ); >+ var filterNode = shape.defNodes[ id ]; >+ result = filterNode.firstChild.getAttribute( "stdDeviation" ) * 2; >+ } >+ return result; >+ }, > > ///////// > // helper >- >+ > _onImageLoad : function( source, func ) { > var loader = new Image(); > loader.src = source; >@@ -280,11 +349,11 @@ > } > }; > }, >- >+ > _createNode : function( type ) { > return document.createElementNS( "http://www.w3.org/2000/svg", type ); > }, >- >+ > _createRect : function() { > var result = {}; > result.type = "svgRect"; >@@ -296,7 +365,7 @@ > result.node = node; > return result; > }, >- >+ > _setXLink : function( node, value ) { > node.setAttributeNS( "http://www.w3.org/1999/xlink", "href", value ); > }, >@@ -308,14 +377,14 @@ > result.node = node; > return result; > }, >- >+ > _addNewDefinition : function( shape, node, id ) { > shape.defNodes[ id ] = node; > if( shape.parent != null ) { > shape.parent.defsNode.appendChild( node ); > } > }, >- >+ > // TODO [tb] : optimize so only the currently needed defs. are attached? > _attachDefinitions : function( shape ) { > for( var id in shape.defNodes ) { >@@ -323,18 +392,18 @@ > shape.parent.defsNode.appendChild( node ); > } > }, >- >+ > _detachDefinitions : function( shape ) { > for( var id in shape.defNodes ) { > var node = shape.defNodes[ id ]; > node.parentNode.removeChild( node ); > } > }, >- >+ > _convertNumeric : function( value ) { > return typeof value == "string" ? value : value + "px"; > }, >- >+ > _redrawWebkit : function( shape ) { > var wrapper = function() { > org.eclipse.rwt.SVG._redrawWebkitCore( shape ); >@@ -347,18 +416,18 @@ > shape.node.style.webkitTransform = "scale(1)"; > } > }, >- >+ > // TODO [tb] : remove if no longer needed: >- >+ > _dummyNode : null, >- >+ > _getDummyNode : function() { > if( this._dummyNode == null ) { > this._dummyNode = this._createNode( "rect" ); > } > return this._dummyNode; > } >- >+ > } > > } ); >\ No newline at end of file >Index: js/org/eclipse/rwt/VML.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/rwt/VML.js,v >retrieving revision 1.10 >diff -u -r1.10 VML.js >--- js/org/eclipse/rwt/VML.js 21 Mar 2011 11:04:31 -0000 1.10 >+++ js/org/eclipse/rwt/VML.js 28 Mar 2011 15:10:15 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2010 EclipseSource and others. All rights reserved. >+ * Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. > * This program and the accompanying materials are made available under the > * terms of the Eclipse Public License v1.0 which accompanies this distribution, > * and is available at http://www.eclipse.org/legal/epl-v10.html >@@ -66,6 +66,7 @@ > case "roundrect": > case "custom": > result = this._createCustomShape(); >+ result.blurRadius = 0; > break; > case "image": > result = this._createImage(); >@@ -86,12 +87,21 @@ > return result; > }, > >- addToCanvas : function( canvas, shape ) { >+ addToCanvas : function( canvas, shape, beforeShape ) { > var hash = qx.core.Object.toHashCode( shape ); > canvas.children[ hash ] = shape; >- canvas.node.appendChild( shape.node ); >+ //canvas.node.appendChild( shape.node ); >+ if( beforeShape ) { >+ canvas.node.insertBefore( shape.node, beforeShape.node ); >+ } else { >+ canvas.node.appendChild( shape.node ); >+ } > }, > >+ enableOverflow : function( canvas ) { >+ // nothing to do >+ }, >+ > removeFromCanvas : function( canvas, shape ) { > var hash = qx.core.Object.toHashCode( shape ); > delete canvas.children[ hash ]; >@@ -140,10 +150,11 @@ > var radiusTopRight = this._convertNumeric( radii[ 1 ], false ); > var radiusRightBottom = this._convertNumeric( radii[ 2 ], false ); > var radiusBottomLeft = this._convertNumeric( radii[ 3 ], false ); >- var rectLeft = this._convertNumeric( x, true ); >- var rectTop = this._convertNumeric( y, true ) >- var rectWidth = this._convertNumeric( width, false ); >- var rectHeight = this._convertNumeric( height, false ); >+ var bluroffsets = this._getBlurOffsets( shape.blurRadius ); >+ var rectLeft = this._convertNumeric( x - bluroffsets[ 1 ], true ); >+ var rectTop = this._convertNumeric( y - bluroffsets[ 1 ], true ) >+ var rectWidth = this._convertNumeric( width - bluroffsets[ 2 ], false ); >+ var rectHeight = this._convertNumeric( height - bluroffsets[ 2 ], false ); > if( ( radiusLeftTop + radiusTopRight ) > rectWidth > || ( radiusRightBottom + radiusBottomLeft ) > rectWidth > || ( radiusLeftTop + radiusBottomLeft ) > rectHeight >@@ -338,10 +349,55 @@ > }, > > setOpacity : function( shape, opacity ) { >- org.eclipse.rwt.HtmlUtil.setOpacity( shape.node, opacity ); >+ shape.opacity = opacity; >+ this._renderFilter( shape ); > this._setAntiAlias( shape, opacity < 1 ); > }, > >+ getOpacity : function( shape ) { >+ var result = 1; >+ if( typeof shape.opacity === "number" && shape.opacity < 1 ) { >+ result = shape.opacity; >+ } >+ return result; >+ }, >+ >+ setBlur : function( shape, radius ) { >+ // NOTE: IE shifts the shape to the bottom-right, >+ // compensated ONLY in setRoundRectLayout >+ shape.blurRadius = radius; >+ this._renderFilter( shape ); >+ }, >+ >+ getBlur : function( shape, radius ) { >+ var result = 0; >+ if( typeof shape.blurRadius === "number" && shape.blurRadius > 0 ) { >+ result = shape.blurRadius; >+ } >+ return result; >+ }, >+ >+ _renderFilter : function( shape ) { >+ var filterStr = []; >+ var opacity = this.getOpacity( shape ); >+ var blurRadius = this.getBlur( shape ); >+ if( opacity < 1 ) { >+ filterStr.push( "Alpha(opacity=" ); >+ filterStr.push( Math.round( opacity * 100 ) ); >+ filterStr.push( ")" ); >+ } >+ if( blurRadius > 0 ) { >+ filterStr.push( "progid:DXImageTransform.Microsoft.Blur(pixelradius=" ); >+ filterStr.push( this._getBlurOffsets( blurRadius )[ 0 ] ); >+ filterStr.push( ")" ); >+ } >+ if( filterStr.length > 0 ) { >+ shape.node.style.filter = filterStr.join( "" ); >+ } else { >+ org.eclipse.rwt.HtmlUtil.removeCssFilter( shape.node ); >+ } >+ }, >+ > ///////// > // helper > >@@ -519,19 +575,26 @@ > shape.node.style.antialias = value; > }, > >- _removeFilter : function( shape ) { >- var str = shape.node.style.cssText; >- var start = str.indexOf( "FILTER:" ); >- if( start != -1 ) { >- var end = str.indexOf( ";", start ) + 1; >- var newStr = str.slice( 0, start ); >- if( end !== -1 ) { >- newStr += str.slice( end ); >- } >- shape.node.style.cssText = newStr; >+ _getBlurOffsets : function( blurradius ) { >+ // returns [ blurradius, location-offset, dimension-offset ] >+ var result; >+ var offsets = this._BLUROFFSETS[ blurradius ]; >+ if( offsets !== undefined ) { >+ result = offsets; >+ } else { >+ result = [ blurradius, blurradius, 1 ]; > } >- } >- >+ return result; >+ }, >+ >+ _BLUROFFSETS : [ >+ // NOTE: these values are chosen to resemble the blur-effect on css3-shadows >+ // as closely as possible, but in doubt going for the stronger effect. >+ [ 0, 0, 0 ], >+ [ 2, 2, 1 ], >+ [ 3, 3, 1 ], >+ [ 4, 4, 1 ] >+ ] > } > > } ); >\ No newline at end of file >Index: js/org/eclipse/swt/theme/AppearancesBase.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/swt/theme/AppearancesBase.js,v >retrieving revision 1.227 >diff -u -r1.227 AppearancesBase.js >--- js/org/eclipse/swt/theme/AppearancesBase.js 3 Mar 2011 08:54:51 -0000 1.227 >+++ js/org/eclipse/swt/theme/AppearancesBase.js 28 Mar 2011 15:10:16 -0000 >@@ -455,6 +455,7 @@ > result.minWidth = states.rwt_TITLE ? 80 : 5; > result.minHeight = states.rwt_TITLE ? 25 : 5; > result.opacity = tv.getCssFloat( "Shell", "opacity" ); >+ result.shadow = tv.getCssShadow( "Shell", "box-shadow" ); > return result; > } > }, >Index: js/org/eclipse/swt/theme/ThemeStore.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/swt/theme/ThemeStore.js,v >retrieving revision 1.31 >diff -u -r1.31 ThemeStore.js >--- js/org/eclipse/swt/theme/ThemeStore.js 27 Jan 2011 11:57:48 -0000 1.31 >+++ js/org/eclipse/swt/theme/ThemeStore.js 28 Mar 2011 15:10:16 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2007, 2010 Innoopract Informationssysteme GmbH. >+ * Copyright (c) 2007, 2011 Innoopract Informationssysteme GmbH. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -31,7 +31,8 @@ > colors : {}, > borders : {}, > cursors : {}, >- animations : {} >+ animations : {}, >+ shadows : {} > }; > this._cssValues = {}; > this._statesMap = { >Index: js/org/eclipse/swt/theme/ThemeValues.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt/org.eclipse.rap.rwt.q07/js/org/eclipse/swt/theme/ThemeValues.js,v >retrieving revision 1.33 >diff -u -r1.33 ThemeValues.js >--- js/org/eclipse/swt/theme/ThemeValues.js 1 Feb 2011 14:07:40 -0000 1.33 >+++ js/org/eclipse/swt/theme/ThemeValues.js 28 Mar 2011 15:10:16 -0000 >@@ -168,7 +168,14 @@ > getCssAnimation : function( element, key ) { > var vkey = this._store.getCssValue( element, this._states, key ); > var values = this._store.getThemeValues(); >- var result = values.animations[ vkey ]; >+ var result = values.animations[ vkey ]; >+ return result; >+ }, >+ >+ getCssShadow : function( element, key ) { >+ var vkey = this._store.getCssValue( element, this._states, key ); >+ var values = this._store.getThemeValues(); >+ var result = values.shadows[ vkey ]; > return result; > } > >#P org.eclipse.rap.rwt.q07.jstest >Index: js/org/eclipse/rwt/test/tests/GraphicsMixinTest.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.q07.jstest/js/org/eclipse/rwt/test/tests/GraphicsMixinTest.js,v >retrieving revision 1.12 >diff -u -r1.12 GraphicsMixinTest.js >--- js/org/eclipse/rwt/test/tests/GraphicsMixinTest.js 2 Feb 2011 16:11:16 -0000 1.12 >+++ js/org/eclipse/rwt/test/tests/GraphicsMixinTest.js 28 Mar 2011 15:10:17 -0000 >@@ -16,9 +16,9 @@ > this.cssBorder = new qx.ui.core.Border( 1, "solid", "black" ); > this.gradient = [ [ 0, "red" ], [ 1, "yellow" ] ]; > }, >- >+ > members : { >- >+ > testSetGradient : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -26,7 +26,7 @@ > assertTrue( shell.isSeeable() ); > assertFalse( this.usesGfxBackground( shell ) ); > shell.setBackgroundGradient( this.gradient ); >- var shape = shell._gfxData.currentShape; >+ var shape = shell._gfxData.backgroundShape; > assertTrue( this.usesGfxBackground( shell ) ); > assertTrue( gfxUtil.getFillType( shape ) == "gradient" ); > shell.setBackgroundGradient( null ); >@@ -35,7 +35,7 @@ > shell.destroy(); > testUtil.flush(); > }, >- >+ > testSetGradientWhileNotInDOM : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -45,7 +45,7 @@ > shell.setBackgroundGradient( this.gradient ); > shell.addToDocument(); > testUtil.flush(); >- var shape = shell._gfxData.currentShape; >+ var shape = shell._gfxData.backgroundShape; > assertTrue( this.usesGfxBackground( shell ) ); > assertTrue( gfxUtil.getFillType( shape ) == "gradient" ); > shell.setParent( null ); >@@ -65,7 +65,7 @@ > shell.setBorder( this.gfxBorder ); > testUtil.flush(); > assertTrue( this.usesGfxBackground( shell ) ); >- var shape = shell._gfxData.currentShape; >+ var shape = shell._gfxData.backgroundShape; > assertNull( gfxUtil.getFillType( shape ) ); > shell.setBackgroundColor( "green" ); > assertEquals( "color", gfxUtil.getFillType( shape ) ); >@@ -82,13 +82,13 @@ > shell.setBorder( this.gfxBorder ); > testUtil.flush(); > assertTrue( this.usesGfxBackground( shell ) ); >- var shape = shell._gfxData.currentShape; >+ var shape = shell._gfxData.backgroundShape; > assertEquals( "color", gfxUtil.getFillType( shape ) ); > assertEquals( "green", gfxUtil.getFillColor( shape ) ); > shell.destroy(); > testUtil.flush(); > }, >- >+ > testRestoreBackgroundColor : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -102,7 +102,7 @@ > shell.destroy(); > testUtil.flush(); > }, >- >+ > testCssBorder : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -161,7 +161,7 @@ > widget.setBorder( this.gfxBorder ); > testUtil.flush(); > assertTrue( this.usesGfxBorder( widget ) ); >- var shape = widget._gfxData.currentShape; >+ var shape = widget._gfxData.backgroundShape; > assertEquals( 0, gfxUtil.getStrokeWidth( shape ) ); > this.gfxBorder.setWidth( 2 ); > testUtil.flush(); >@@ -172,7 +172,7 @@ > widget.destroy(); > testUtil.flush(); > }, >- >+ > testOutline : function() { > // in Safari the outline must always be set because the default > // outline is visually incompatible with SVG (glitch) >@@ -200,7 +200,7 @@ > shell.destroy(); > testUtil.flush(); > }, >- >+ > testGfxRadiusInvisibleEdges : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var widget = new org.eclipse.rwt.widgets.MultiCellWidget( [] ); >@@ -220,7 +220,7 @@ > widget.destroy(); > testUtil.flush(); > }, >- >+ > testGfxRadiusInvisibleBorder : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var widget = new org.eclipse.rwt.widgets.MultiCellWidget( [] ); >@@ -250,12 +250,12 @@ > qx.ui.core.Widget.flushGlobalQueues(); > assertTrue( this.usesGfxBackground( widget ) ); > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >- var shape = widget._gfxData.currentShape; >+ var shape = widget._gfxData.backgroundShape; > assertTrue( gfxUtil.getFillType( shape ) == "pattern" ); > widget.destroy(); > qx.ui.core.Widget.flushGlobalQueues(); > }, >- >+ > testGfxBackgroundColorToImage : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -264,7 +264,7 @@ > shell.setBorder( this.gfxBorder ); > testUtil.flush(); > assertTrue( this.usesGfxBackground( shell ) ); >- var shape = shell._gfxData.currentShape; >+ var shape = shell._gfxData.backgroundShape; > assertEquals( "color", gfxUtil.getFillType( shape ) ); > shell.setBackgroundImage( "bla.jpg" ); > testUtil.flush(); >@@ -356,7 +356,7 @@ > assertFalse( testUtil.hasElementOpacity( widget._getTargetNode() ) ); > widget.destroy(); > }, >- >+ > testAntialiasingBugIE : qx.core.Variant.select("qx.client", { > "mshtml" : function() { > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -373,8 +373,7 @@ > }, > "default" : function(){} > } ), >- >- >+ > testAntialiasingBugIEWithOpacitySet : qx.core.Variant.select("qx.client", { > "mshtml" : function() { > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >@@ -397,7 +396,6 @@ > }, > "default" : function(){} > } ), >- > > testSetBackgroundImageOverwritesGradient : function() { > // Note: a gradient and background-image can note be set at the same >@@ -414,11 +412,11 @@ > testUtil.flush(); > assertTrue( this.usesGfxBackground( widget ) ); > var gfxUtil = org.eclipse.rwt.GraphicsUtil; >- var shape = widget._gfxData.currentShape; >+ var shape = widget._gfxData.backgroundShape; > assertEquals( "pattern", gfxUtil.getFillType( shape ) ); > widget.destroy(); > }, >- >+ > testChangeBackgroundImageWhileBackgoundGradientSet : function() { > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var widget = new org.eclipse.rwt.widgets.MultiCellWidget( [] ); >@@ -440,6 +438,285 @@ > widget.destroy(); > }, > >+ testSetShadowCreatesCanvas : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ assertTrue( this.widgetContainsCanvas( widget ) ); >+ widget.setShadow( null ); >+ assertFalse( this.widgetContainsCanvas( widget ) ); >+ widget.destroy(); >+ } >+ }, >+ >+ testSetShadowCreatesShape : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ var canvas = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var shape = widget._gfxData.shadowShape.node; >+ assertTrue( shape.parentNode === canvas ); >+ widget.setShadow( null ); >+ assertTrue( shape.parentNode !== canvas ); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ assertTrue( shape.parentNode === canvas ); >+ widget.destroy(); >+ } >+ }, >+ >+ testDisableShadow : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var widget = this._createWidget(); >+ widget.setBackgroundGradient( this.gradient ); >+ widget.setBorder( this.gfxBorder ); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ var canvas = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var shape = widget._gfxData.shadowShape.node; >+ assertTrue( shape.parentNode === canvas ); >+ widget.setShadow( null ); >+ assertTrue( shape.parentNode !== canvas ); >+ widget.destroy(); >+ } >+ }, >+ >+ testSetShadowEnablesOverflow : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ var canvas = widget._gfxCanvas; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ if( !isMshtml ) { >+ assertTrue( canvas.node !== canvas.group ); >+ } >+ var node = gfxUtil.getCanvasNode( canvas ); >+ var pointerEvents = node.style.pointerEvents === "none"; >+ // indicates that HtmlUtil.passEventsThrough is activated: >+ var cursorDefault = node.style.cursor === "default"; >+ assertTrue( pointerEvents || cursorDefault ); >+ widget.destroy(); >+ } >+ }, >+ >+ testSetShadowAndGradient : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ var childOffset = isMshtml ? 0 : 1;// Count defs-node >+ var widget = this._createWidget(); >+ widget.setBackgroundGradient( this.gradient ); >+ testUtil.flush(); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ var canvasNode = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var shadow = widget._gfxData.shadowShape.node; >+ var background = widget._gfxData.backgroundShape.node; >+ assertEquals( 2 + childOffset, canvasNode.childNodes.length ); >+ assertIdentical( canvasNode, background.parentNode ); >+ assertIdentical( canvasNode, shadow.parentNode ); >+ assertIdentical( shadow, canvasNode.childNodes[ 0 + childOffset ] ); >+ assertIdentical( background, canvasNode.childNodes[ 1 + childOffset ] ); >+ widget.setBackgroundGradient( null ); >+ testUtil.flush(); >+ assertFalse( background.parentNode === canvasNode ); >+ assertIdentical( canvasNode, shadow.parentNode ); >+ assertEquals( 1 + childOffset, canvasNode.childNodes.length ); >+ widget.destroy(); >+ } >+ }, >+ >+ testSetShadowBeforeCreate : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var widget = this._createWidget( true ); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ testUtil.flush(); >+ var canvas = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var shadow = widget._gfxData.shadowShape.node; >+ assertIdentical( canvas, shadow.parentNode ); >+ widget.destroy(); >+ } >+ }, >+ >+ testRemoveGradientSetShadow : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var widget = this._createWidget(); >+ widget.setBackgroundGradient( this.gradient ); >+ testUtil.flush(); >+ var canvas = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var background = widget._gfxData.backgroundShape.node; >+ assertTrue( canvas === background.parentNode ); >+ widget.setBackgroundGradient( null ); >+ widget.setShadow( [ false, 10, 10, 10, 3, "#ff00ff", 1 ] ); >+ canvas = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var shadow = widget._gfxData.shadowShape.node; >+ assertTrue( canvas === shadow.parentNode ); >+ assertFalse( canvas === background.parentNode ); >+ widget.destroy(); >+ } >+ }, >+ >+ testSetShadowColorAndOpacity : function() { >+ // Note: In the CSS3 speficifcation the opacity is part of the color, >+ // for simplicity this is a sepearate value in our shadow-array. >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 10, 10, 3, 10, "#ff00ff", 1 ] ); >+ var shape = widget._gfxData.shadowShape; >+ assertEquals( 3, gfxUtil.getBlur( shape ) ); >+ assertEquals( "#ff00ff", gfxUtil.getFillColor( shape ) ); >+ assertEquals( 1, gfxUtil.getOpacity( shape ) ); >+ widget.setShadow( [ false, 10, 10, 5, 10, "#000000", 0.5 ] ); >+ assertEquals( 5, gfxUtil.getBlur( shape ) ); >+ assertEquals( "#000000", gfxUtil.getFillColor( shape ) ); >+ assertEquals( 0.5, gfxUtil.getOpacity( shape ) ); >+ widget.setShadow( [ false, 10, 10, 0, 0, "#ffffff", 0.5 ] ); >+ assertEquals( 0, gfxUtil.getBlur( shape ) ); >+ assertEquals( "#ffffff", gfxUtil.getFillColor( shape ) ); >+ assertEquals( 0.5, gfxUtil.getOpacity( shape ) ); >+ widget.destroy(); >+ } >+ }, >+ >+ testBasicShadowLayout : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 0, 0, 0, 0, "#000000", 1 ] ); >+ var shape = widget._gfxData.shadowShape; >+ var expected1; >+ var expected2; >+ if( isMshtml ) { >+ expected1 = " m-5,-5 l995,-5,995,995,-5,995 xe"; >+ expected2 = " m-5,-5 l1195,-5,1195,1495,-5,1495 xe"; >+ } else { >+ expected1 = "M 0 0 L 100 0 100 0 L 100 100 100 100 L 0 100 0 100 Z"; >+ expected2 = "M 0 0 L 120 0 120 0 L 120 150 120 150 L 0 150 0 150 Z"; >+ } >+ assertEquals( expected1, this._getPath( shape ) ); >+ widget.setWidth( 120 ); >+ widget.setHeight( 150 ); >+ testUtil.flush(); >+ assertEquals( expected2, this._getPath( shape ) ); >+ widget.destroy(); >+ } >+ }, >+ >+ testRoundedShadowLayout : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 0, 0, 0, 0, "#000000", 1 ] ); >+ this.gfxBorder.setRadius( 5 ); >+ widget.setBorder( this.gfxBorder ); >+ testUtil.flush(); >+ var shape = widget._gfxData.shadowShape; >+ var expected1; >+ var expected2; >+ if( isMshtml ) { >+ expected1 = " al45,45,50,50,-11796300,-5898150 ae945,45,50,50,-17694450,-5898150 ae945,945,50,50,0,-5898150 ae45,945,50,50,-5898150,-5898150 x e"; >+ expected2 = " m-5,-5 l995,-5,995,995,-5,995 xe"; >+ } else { >+ expected1 = "M 0 5 A 5 5 0 0 1 5 0 L 95 0 A 5 5 0 0 1 100 5 L 100 95 A 5 5 0 0 1 95 100 L 5 100 A 5 5 0 0 1 0 95 Z"; >+ expected2 = "M 0 0 L 100 0 100 0 L 100 100 100 100 L 0 100 0 100 Z"; >+ } >+ assertEquals( expected1, this._getPath( shape ) ); >+ widget.setBorder( null ); >+ testUtil.flush(); >+ assertEquals( expected2, this._getPath( shape ) ); >+ widget.destroy(); >+ } >+ }, >+ >+ testShiftShadowLayout : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, 3, 5, 0, 0, "#000000", 1 ] ); >+ var shape = widget._gfxData.shadowShape; >+ var expected1; >+ var expected2; >+ if( isMshtml ) { >+ expected1 = " m55,35 l1055,35,1055,1035,55,1035 xe"; >+ expected2 = " m55,35 l1255,35,1255,1535,55,1535 xe"; >+ } else { >+ expected1 = "M 6 4 L 106 4 106 4 L 106 104 106 104 L 6 104 6 104 Z"; >+ expected2 = "M 6 4 L 126 4 126 4 L 126 154 126 154 L 6 154 6 154 Z"; >+ } >+ widget.setShadow( [ false, 6, 4, 0, 0, "#000000", 1 ] ); >+ assertEquals( expected1, this._getPath( shape ) ); >+ widget.setWidth( 120 ); >+ widget.setHeight( 150 ); >+ testUtil.flush(); >+ assertEquals( expected2, this._getPath( shape ) ); >+ widget.destroy(); >+ } >+ }, >+ >+ testEnableDisableOverflowForShadow : qx.core.Variant.select("qx.client", { >+ "mshtml" : function() { >+ }, >+ "default" : function(){ >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ var widget = this._createWidget(); >+ widget.setShadow( [ false, -3, -5, 4, 0, "#000000", 1 ] ); >+ testUtil.flush(); >+ var canvas = widget._gfxCanvas; >+ assertEquals( "108px", canvas.node.style.width ); >+ assertEquals( "109px", canvas.node.style.height ); >+ assertEquals( "-7px", canvas.node.style.left ); >+ assertEquals( "-9px", canvas.node.style.top ); >+ widget.setShadow( [ false, 3, 5, 2, 0, "#000000", 1 ] ); >+ testUtil.flush(); >+ assertTrue( canvas.node.style.left == "0px" ); >+ assertTrue( canvas.node.style.top == "0px" ); >+ assertTrue( canvas.node.style.width == "105px" ); >+ assertTrue( canvas.node.style.height == "107px" ); >+ widget.setShadow( null ); >+ testUtil.flush(); >+ assertTrue( canvas.node.style.left == "0px" ); >+ assertTrue( canvas.node.style.top == "0px" ); >+ assertTrue( canvas.node.style.width == "100%" ); >+ assertTrue( canvas.node.style.height == "100%" ); >+ widget.destroy(); >+ } >+ } >+ } ), >+ >+ >+ testLayoutTargetNodeAfterBorderRemove : qx.core.Variant.select("qx.client", { >+ "mshtml" : function() { >+ if( org.eclipse.rwt.GraphicsMixin.getSupportsShadows() ) { >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil; >+ var widget = this._createWidget(); >+ widget.setBorder( this.gfxBorder ); >+ testUtil.flush(); >+ assertTrue( this.widgetContainsCanvas( widget ) ); >+ widget.setBorder( null ); >+ assertFalse( this.widgetContainsCanvas( widget ) ); >+ widget.setWidth( 400 ); >+ testUtil.flush(); >+ assertEquals( "400px", widget._getTargetNode().style.width ); >+ widget.destroy(); >+ } >+ }, >+ "default" : function(){} >+ } ), > ///////// > // Helper > >@@ -447,28 +724,41 @@ > var result = new org.eclipse.swt.widgets.Shell(); > result.addToDocument(); > result.setBackgroundColor( null ); >+ result.setShadow( null ); > result.open(); > qx.ui.core.Widget.flushGlobalQueues(); > return result; > }, >- >- _createWidget : function() { >+ >+ _createWidget : function( noFlush ) { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var result = new org.eclipse.rwt.widgets.MultiCellWidget( [] ); > result.addToDocument(); > result.setLocation( 0, 0 ); > result.setDimension( 100, 100 ); >- qx.ui.core.Widget.flushGlobalQueues(); >+ if( !noFlush ) { >+ testUtil.flush(); >+ } > return result; > }, > > usesGfxBorder : function( widget ) { > return widget._gfxBorderEnabled > && this.widgetContainsCanvas( widget ) >- && widget._gfxData.currentShape == widget._gfxData.pathElement; >+ && widget._gfxData.backgroundShape == widget._gfxData.pathElement; > }, > > usesGfxBackground : function( widget ) { >- var result = widget._gfxBackgroundEnabled >+ var canvas = widget._gfxCanvas; >+ var shape = widget._gfxData ? widget._gfxData.backgroundShape : null; >+ var shapeInsert = false; >+ if( canvas && shape ) { >+ var parent = this._getCanvasGroupNode( widget._gfxCanvas ); >+ var child = shape.node; >+ shapeInsert = parent === child.parentNode; >+ } >+ var result = shapeInsert >+ && widget._gfxBackgroundEnabled > && this.widgetContainsCanvas( widget ); > return result; > }, >@@ -508,12 +798,27 @@ > } > return result; > }, >- >+ > getBorderCache : function( widget ) { > return [ widget._cachedBorderTop, > widget._cachedBorderRight, > widget._cachedBorderBottom, > widget._cachedBorderLeft ]; >+ }, >+ >+ _getPath : function( shape ) { >+ var result = null; >+ var isMshtml = qx.core.Variant.isSet( "qx.client", "mshtml" ); >+ if( isMshtml ) { >+ result = shape.node.path.v; >+ } else { >+ result = shape.node.getAttribute( "d" ); >+ } >+ return result; >+ }, >+ >+ _getCanvasGroupNode : function( canvas ) { >+ return canvas.group ? canvas.group : canvas.node; > } > > } >Index: js/org/eclipse/rwt/test/tests/ProgressBarTest.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.q07.jstest/js/org/eclipse/rwt/test/tests/ProgressBarTest.js,v >retrieving revision 1.3 >diff -u -r1.3 ProgressBarTest.js >--- js/org/eclipse/rwt/test/tests/ProgressBarTest.js 2 Feb 2011 16:11:16 -0000 1.3 >+++ js/org/eclipse/rwt/test/tests/ProgressBarTest.js 28 Mar 2011 15:10:17 -0000 >@@ -105,6 +105,7 @@ > var testUtil = org.eclipse.rwt.test.fixture.TestUtil; > var gfxUtil = org.eclipse.rwt.GraphicsUtil; > var shell = new org.eclipse.swt.widgets.Shell(); >+ shell.setShadow( null ); > shell.addToDocument(); > shell.setBackgroundColor( null ); > shell.open(); >Index: js/org/eclipse/rwt/test/tests/SVGTest.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.q07.jstest/js/org/eclipse/rwt/test/tests/SVGTest.js,v >retrieving revision 1.6 >diff -u -r1.6 SVGTest.js >--- js/org/eclipse/rwt/test/tests/SVGTest.js 11 Jan 2011 15:57:35 -0000 1.6 >+++ js/org/eclipse/rwt/test/tests/SVGTest.js 28 Mar 2011 15:10:17 -0000 >@@ -250,6 +250,112 @@ > } > assertEquals( "pattern", gfxUtil.getFillType( shape ) ); > parent.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testBlurFilter : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ var canvas = gfxUtil.createCanvas(); >+ var parent = document.body; >+ var shape = gfxUtil.createShape( "rect" ); >+ gfxUtil.setRectBounds( shape, 10, 10, 100, 100 ); >+ gfxUtil.setBlur( shape, 4 ); >+ gfxUtil.addToCanvas( canvas, shape ); >+ parent.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ gfxUtil.handleAppear( canvas ); >+ var hash = qx.core.Object.toHashCode( shape ); >+ var expected = "url(#filter_" + hash + ")"; >+ assertEquals( expected, shape.node.getAttribute( "filter" ) ); >+ var filterNode = canvas.defsNode.firstChild; >+ assertEquals( "filter", filterNode.tagName ); >+ assertEquals( "filter_" + hash, filterNode.getAttribute( "id" ) ); >+ assertEquals( "feGaussianBlur", filterNode.firstChild.tagName ); >+ assertEquals( "2", filterNode.firstChild.getAttribute( "stdDeviation" ) ); >+ assertEquals( "4", gfxUtil.getBlur( shape ) ); >+ gfxUtil.setBlur( shape, 0 ); >+ assertEquals( "none", shape.node.getAttribute( "filter" ) ); >+ assertEquals( "0", gfxUtil.getBlur( shape ) ); >+ gfxUtil.setBlur( shape, 2 ); >+ assertEquals( expected, shape.node.getAttribute( "filter" ) ); >+ assertEquals( "1", filterNode.firstChild.getAttribute( "stdDeviation" ) ); >+ assertEquals( "2", gfxUtil.getBlur( shape ) ); >+ gfxUtil.setBlur( shape, 2 ); >+ parent.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testOpacity : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ var canvas = gfxUtil.createCanvas(); >+ var parent = document.body; >+ var shape = gfxUtil.createShape( "rect" ); >+ gfxUtil.setRectBounds( shape, 10, 10, 100, 100 ); >+ assertEquals( 0, gfxUtil.getOpacity( shape ) ); >+ gfxUtil.setOpacity( shape, 0.4 ); >+ gfxUtil.addToCanvas( canvas, shape ); >+ parent.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ gfxUtil.handleAppear( canvas ); >+ assertEquals( 0.4, shape.node.getAttribute( "opacity" ) ); >+ assertEquals( 0.4, gfxUtil.getOpacity( shape ) ); >+ parent.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testNodeOrder : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ var parent = document.body; >+ canvas = gfxUtil.createCanvas(); >+ parent.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ gfxUtil.handleAppear( canvas ); >+ var shape1 = gfxUtil.createShape( "rect" ); >+ var shape2 = gfxUtil.createShape( "rect" ); >+ var shape3 = gfxUtil.createShape( "rect" ); >+ gfxUtil.addToCanvas( canvas, shape1 ); >+ gfxUtil.addToCanvas( canvas, shape3 ); >+ gfxUtil.addToCanvas( canvas, shape2, shape3 ); >+ var nodes = canvas.node.childNodes; >+ assertIdentical( nodes[ 1 ], shape1.node ); >+ assertIdentical( nodes[ 2 ], shape2.node ); >+ assertIdentical( nodes[ 3 ], shape3.node ); >+ parent.removeChild( canvas.node ); >+ }, >+ >+ testEnableOverflow : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ var parent = document.body; >+ canvas = gfxUtil.createCanvas(); >+ parent.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ gfxUtil.handleAppear( canvas ); >+ var shape = gfxUtil.createShape( "rect" ); >+ gfxUtil.addToCanvas( canvas, shape ); >+ assertIdentical( canvas.node, canvas.group ); >+ assertIdentical( canvas.node, shape.node.parentNode ); >+ gfxUtil.enableOverflow( canvas, 50, 30, 150, 140 ); >+ assertEquals( "-50px", canvas.node.style.left ); >+ assertEquals( "-30px", canvas.node.style.top ); >+ assertEquals( "200px", canvas.node.style.width ); >+ assertEquals( "170px", canvas.node.style.height ); >+ assertIdentical( canvas.node, canvas.group.parentNode ); >+ assertIdentical( canvas.group, shape.node.parentNode ); >+ var transform = canvas.group.getAttribute( "transform" ); >+ transform = transform.split( " " ).join( "" ); >+ assertEquals( "translate(50,30)", transform ); >+ gfxUtil.enableOverflow( canvas, 0, 0, 110, 120 ); >+ assertEquals( "0px", canvas.node.style.left ); >+ assertEquals( "0px", canvas.node.style.top ); >+ assertEquals( "110px", canvas.node.style.width ); >+ assertEquals( "120px", canvas.node.style.height ); >+ assertIdentical( canvas.node, canvas.group.parentNode ); >+ assertIdentical( canvas.group, shape.node.parentNode ); >+ var transform = canvas.group.getAttribute( "transform" ); >+ assertEquals( "", transform ); >+ gfxUtil.enableOverflow( canvas, 0, 0, null, null ); >+ assertEquals( "0px", canvas.node.style.left ); >+ assertEquals( "0px", canvas.node.style.top ); >+ assertEquals( "100%", canvas.node.style.width ); >+ assertEquals( "100%", canvas.node.style.height ); >+ parent.removeChild( canvas.node ); > } > > } >Index: js/org/eclipse/rwt/test/tests/VMLTest.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.q07.jstest/js/org/eclipse/rwt/test/tests/VMLTest.js,v >retrieving revision 1.5 >diff -u -r1.5 VMLTest.js >--- js/org/eclipse/rwt/test/tests/VMLTest.js 21 Mar 2011 11:04:34 -0000 1.5 >+++ js/org/eclipse/rwt/test/tests/VMLTest.js 28 Mar 2011 15:10:17 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2010 EclipseSource and others. All rights reserved. >+ * Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. > * This program and the accompanying materials are made available under the > * terms of the Eclipse Public License v1.0 which accompanies this distribution, > * and is available at http://www.eclipse.org/legal/epl-v10.html >@@ -241,10 +241,80 @@ > gfxUtil.setOpacity( shape, 0.5 ); > assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) != -1 ); > assertTrue( shape.node.style.filter.indexOf( "opacity=50" ) != -1 ); >+ assertEquals( 0.5, gfxUtil.getOpacity( shape ) ); > gfxUtil.setOpacity( shape, 1 ); > // It is important for some issues that filter is completely removed: > assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) == -1 ); >+ assertEquals( 1, gfxUtil.getOpacity( shape ) ); > parentNode.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testBlur : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ testUtil.flush(); >+ var parentNode = document.body; >+ var canvas = gfxUtil.createCanvas(); >+ parentNode.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ var shape = gfxUtil.createShape( "rect" ); >+ gfxUtil.addToCanvas( canvas, shape ); >+ gfxUtil.setBlur( shape, 4 ); >+ assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) != -1 ); >+ var filter = shape.node.style.filter; >+ var expected = "progid:DXImageTransform.Microsoft.Blur(pixelradius=4)"; >+ assertTrue( filter.indexOf( expected ) != -1 ); >+ assertEquals( 4, gfxUtil.getBlur( shape ) ); >+ gfxUtil.setBlur( shape, 0 ); >+ // It is important for some issues that filter is completely removed: >+ assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) == -1 ); >+ assertEquals( 0, gfxUtil.getBlur( shape ) ); >+ parentNode.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testBlurWithOpacity : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ testUtil.flush(); >+ var parentNode = document.body; >+ var canvas = gfxUtil.createCanvas(); >+ parentNode.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ var shape = gfxUtil.createShape( "rect" ); >+ gfxUtil.addToCanvas( canvas, shape ); >+ gfxUtil.setBlur( shape, 4 ); >+ gfxUtil.setOpacity( shape, 0.5 ); >+ assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) != -1 ); >+ var alpha = "Alpha(opacity=50)"; >+ var blur = "progid:DXImageTransform.Microsoft.Blur(pixelradius=4)"; >+ assertEquals( alpha+blur, shape.node.style.filter ); >+ gfxUtil.setBlur( shape, 0 ); >+ assertEquals( alpha, shape.node.style.filter ); >+ gfxUtil.setBlur( shape, 4 ); >+ assertEquals( alpha+blur, shape.node.style.filter ); >+ gfxUtil.setOpacity( shape, 1 ); >+ assertEquals( blur, shape.node.style.filter ); >+ gfxUtil.setBlur( shape, 0 ); >+ assertTrue( shape.node.style.cssText.indexOf( "FILTER:" ) == -1 ); >+ parentNode.removeChild( gfxUtil.getCanvasNode( canvas ) ); >+ }, >+ >+ testNodeOrder : function() { >+ var testUtil = org.eclipse.rwt.test.fixture.TestUtil; >+ var gfxUtil = org.eclipse.rwt.GraphicsUtil >+ var parent = document.body; >+ canvas = gfxUtil.createCanvas(); >+ parent.appendChild( gfxUtil.getCanvasNode( canvas ) ); >+ gfxUtil.handleAppear( canvas ); >+ var shape1 = gfxUtil.createShape( "rect" ); >+ var shape2 = gfxUtil.createShape( "rect" ); >+ var shape3 = gfxUtil.createShape( "rect" ); >+ gfxUtil.addToCanvas( canvas, shape1 ); >+ gfxUtil.addToCanvas( canvas, shape3 ); >+ gfxUtil.addToCanvas( canvas, shape2, shape3 ); >+ var nodes = canvas.node.childNodes; >+ assertIdentical( nodes[ 0 ], shape1.node ); >+ assertIdentical( nodes[ 1 ], shape2.node ); >+ assertIdentical( nodes[ 2 ], shape3.node ); >+ testUtil.flush(); > } > > >Index: js/resource/RAPThemeSupport.js >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.q07.jstest/js/resource/RAPThemeSupport.js,v >retrieving revision 1.29 >diff -u -r1.29 RAPThemeSupport.js >--- js/resource/RAPThemeSupport.js 22 Mar 2011 15:57:41 -0000 1.29 >+++ js/resource/RAPThemeSupport.js 28 Mar 2011 15:10:17 -0000 >@@ -19,7 +19,7 @@ > qx.Theme.define("org.eclipse.swt.theme.DefaultAppearances",{title:"RAP Default Theme",extend:org.eclipse.swt.theme.AppearancesBase,appearances:{}}); > qx.Theme.define("org.eclipse.swt.theme.Default",{title:"RAP Default Theme",meta:{"color":org.eclipse.swt.theme.DefaultColors,"border":org.eclipse.swt.theme.DefaultBorders,"font":org.eclipse.swt.theme.DefaultFonts,"icon":org.eclipse.swt.theme.DefaultIcons,"widget":org.eclipse.swt.theme.DefaultWidgets,"appearance":org.eclipse.swt.theme.DefaultAppearances}}); > ts=org.eclipse.swt.theme.ThemeStore.getInstance(); >-ts.defineValues({"dimensions":{"0": 0,"40a": 22,"5e": 2,"8d": 3,"bc": 4,"2f0": 16,"eb": 5,"2c1": 15,"34e": 18,"3db": 21},"boxdims":{"1204d3a5": [4,5,4,5],"120509bd": [5,5,5,5],"12043ca2": [1,10,1,10],"120450d9": [1,19,1,1],"12045c02": [2,0,0,2],"1203fb40": [0,5,0,0],"1205a000": [8,0,0,0],"12045c30": [2,0,2,0],"1204990b": [3,3,3,3],"12046534": [2,4,2,4],"1205a4b2": [8,2,2,2],"1204630b": [2,3,3,3],"1203f708": [0,3,3,0],"1204d377": [4,5,2,7],"12050940": [5,5,0,0],"1203fd80": [0,6,0,0],"12049b4c": [3,4,3,4],"12046775": [2,5,2,5],"1203f6c4": [0,3,0,4],"120462f3": [2,3,2,3],"12049203": [3,0,0,3],"120498c0": [3,3,0,0],"120460b1": [2,2,2,1],"120460b2": [2,2,2,2],"12042a9a": [1,2,1,2],"12042cf3": [1,3,2,3],"1204cf0b": [4,3,3,3],"1203f4b0": [0,2,2,0],"1203f480": [0,2,0,0],"12046080": [2,2,0,0],"1203f032": [0,0,2,2],"1203f030": [0,0,2,0],"1203f000": [0,0,0,0],"1203f04b": [0,0,3,3],"1204969c": [3,2,1,4]},"images":{"ed198000": null,"5efe3aa4": ["5efe3aa4",10,7],"df7ccd2b": ["df7ccd2b",16,5],"91dcf9c9": ["91dcf9c9",9,6],"f9835c9c": ["f9835c9c",6,9],"361d46ab": ["361d46ab",16,16],"ecca8c00": null,"3d543571": ["3d543571",10,7],"343b3df0": ["343b3df0",32,32],"6344dd7c": ["6344dd7c",15,15],"5310f593": ["5310f593",10,7],"38e1b619": ["38e1b619",7,7],"ec0d88bb": ["ec0d88bb",11,11],"6b1ea041": ["6b1ea041",6,9],"19d00025": null,"a7f80000": null,"96f80000": null,"4a0314a6": ["4a0314a6",15,15],"6181cefe": ["6181cefe",11,11],"d2e3902": ["d2e3902",10,7],"fbf80000": null,"9ee04c5a": ["9ee04c5a",9,6],"b17f67f9": ["b17f67f9",15,15],"b7351000": null,"5b0e5823": ["5b0e5823",6,9],"9df80cc3": ["9df80cc3",32,32],"63bd404f": ["63bd404f",11,11],"2607b23b": ["2607b23b",6,7],"f1188849": ["f1188849",9,5],"b3abf2ab": ["b3abf2ab",9,6],"44404c00": null,"1f6c63f6": ["1f6c63f6",10,7],"5402a05a": ["5402a05a",16,16],"2ac7a085": ["2ac7a085",6,9],"c049f400": null,"6e49954c": ["6e49954c",6,7],"66f5543e": ["66f5543e",6,7],"f7d3d3a4": ["f7d3d3a4",9,6],"24c84a49": ["24c84a49",7,8],"c8c41a97": ["c8c41a97",8,7],"528db58f": ["528db58f",6,7],"fcf99fc5": ["fcf99fc5",7,4],"560eb7d2": ["560eb7d2",6,9],"44048316": ["44048316",6,9],"38054a38": ["38054a38",32,32],"81f5b807": ["81f5b807",15,15],"7f141d33": ["7f141d33",32,32],"3698ef47": ["3698ef47",10,7],"42f14f4f": ["42f14f4f",15,15],"25ae5c00": null,"b215a2e5": ["b215a2e5",11,11],"98f8b000": null,"1e7357aa": ["1e7357aa",7,7],"dc3f170": ["dc3f170",6,9],"7f9d166a": ["7f9d166a",11,11],"20ce8000": null,"7a6be800": null,"bf9cb6": ["bf9cb6",15,15],"ffffffff": null,"551f1d87": ["551f1d87",6,9],"e37249d4": ["e37249d4",32,32],"8ad6c431": ["8ad6c431",16,7],"f281857c": ["f281857c",1,1600],"9ae0f28": ["9ae0f28",15,15],"dd20909f": ["dd20909f",32,32],"a6cd3400": null,"ec3b45d8": ["ec3b45d8",11,11],"903cec2d": ["903cec2d",16,16],"7f000025": null,"f92762a9": ["f92762a9",11,11],"b2707000": null,"7c0538c2": ["7c0538c2",9,5],"d2eb04f8": ["d2eb04f8",9,6],"af6f6914": ["af6f6914",11,11],"d18fce93": ["d18fce93",9,6],"15180000": null,"7e94854d": ["7e94854d",15,15],"d40ced5e": ["d40ced5e",2,2],"9ece8000": null,"4fb4e47": ["4fb4e47",13,13],"4f80000": null,"6219d800": null,"9f000025": null,"f0f66998": ["f0f66998",6,9],"6da39160": ["6da39160",15,15],"3a888000": null,"fa5acbe": ["fa5acbe",16,16],"ff000025": null,"2282bd8b": ["2282bd8b",6,9],"37dc5d28": ["37dc5d28",32,32],"6356c615": ["6356c615",15,15]},"gradients":{"ed198000":{"percents": [0.0,52.0,100.0],"colors": ["#b0b0b0","#e0e0e0","#ffffff"],"vertical": true},"5efe3aa4": null,"df7ccd2b": null,"91dcf9c9": null,"f9835c9c": null,"361d46ab": null,"ecca8c00":{"percents": [0.0,100.0],"colors": ["#e0e0e0","#ffffff"],"vertical": true},"3d543571": null,"343b3df0": null,"6344dd7c": null,"5310f593": null,"38e1b619": null,"ec0d88bb": null,"6b1ea041": null,"19d00025":{"percents": [0.0,52.0,100.0],"colors": ["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical": false},"a7f80000":{"percents": [0.0,42.0,58.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": true},"96f80000":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": true},"4a0314a6": null,"6181cefe": null,"d2e3902": null,"fbf80000":{"percents": [0.0,38.0,62.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": true},"9ee04c5a": null,"b17f67f9": null,"b7351000":{"percents": [0.0,100.0],"colors": ["#ffffff","#e0e0e0"],"vertical": true},"5b0e5823": null,"9df80cc3": null,"63bd404f": null,"2607b23b": null,"f1188849": null,"b3abf2ab": null,"44404c00":{"percents": [0.0,100.0],"colors": ["#0078bf","#00589f"],"vertical": true},"1f6c63f6": null,"5402a05a": null,"2ac7a085": null,"c049f400":{"percents": [0.0,100.0],"colors": ["#fbfcfd","#ececec"],"vertical": true},"6e49954c": null,"66f5543e": null,"f7d3d3a4": null,"24c84a49": null,"c8c41a97": null,"528db58f": null,"fcf99fc5": null,"560eb7d2": null,"44048316": null,"38054a38": null,"81f5b807": null,"7f141d33": null,"3698ef47": null,"42f14f4f": null,"25ae5c00":{"percents": [0.0,100.0],"colors": ["#005fac","#005092"],"vertical": true},"b215a2e5": null,"98f8b000":{"percents": [0.0,100.0],"colors": ["#ffffff","#e4e5f0"],"vertical": true},"1e7357aa": null,"dc3f170": null,"7f9d166a": null,"20ce8000":{"percents": [0.0,52.0,100.0],"colors": ["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical": true},"7a6be800":{"percents": [0.0,100.0],"colors": ["#a5a5a5","#858585"],"vertical": true},"bf9cb6": null,"ffffffff": null,"551f1d87": null,"e37249d4": null,"8ad6c431": null,"f281857c": null,"9ae0f28": null,"dd20909f": null,"a6cd3400":{"percents": [0.0,100.0],"colors": ["#595959","#4b4b4b"],"vertical": true},"ec3b45d8": null,"903cec2d": null,"7f000025":{"percents": [0.0,38.0,62.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": false},"f92762a9": null,"b2707000":{"percents": [0.0,100.0],"colors": ["#dae9f7","#d2e0ee"],"vertical": true},"7c0538c2": null,"d2eb04f8": null,"af6f6914": null,"d18fce93": null,"15180000":{"percents": [0.0,30.0,70.0,100.0],"colors": ["#e0e0e0","#f0f0f0","#e0e0e0","#b0b0b0"],"vertical": true},"7e94854d": null,"d40ced5e": null,"9ece8000":{"percents": [0.0,52.0,100.0],"colors": ["#ffffff","#e0e0e0","#b0b0b0"],"vertical": true},"4fb4e47": null,"4f80000":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": true},"6219d800":{"percents": [0.0,100.0],"colors": ["#f4f5f6","#e6e6e6"],"vertical": true},"9f000025":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": false},"f0f66998": null,"6da39160": null,"3a888000":{"percents": [0.0,55.0,100.0],"colors": ["#ffffff","#e0e0e0","#f0f0f0"],"vertical": true},"fa5acbe": null,"ff000025":{"percents": [0.0,42.0,58.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": false},"2282bd8b": null,"37dc5d28": null,"6356c615": null},"colors":{"0": "#000000","3cc8fe": "#fec83c","959595": "#959595","9f5800": "#00589f","99a8ac": "#aca899","f4f3f3": "#f3f3f4","cfcfcf": "#cfcfcf","9c5600": "#00569c","4a4a4a": "#4a4a4a","2020cb": "#cb2020","8c8785": "#85878c","ebebeb": "#ebebeb","666666": "#666666","a55900": "#0059a5","a59679": "#7996a5","4e4a46": "#464a4e","ffffff": "#ffffff","f7e9da": "#dae9f7","808080": "#808080","ffffffff": "undefined","e4dfdc": "#dcdfe4","993300": "#003399","aaaaaa": "#aaaaaa","a4a4a4": "#a4a4a4","c0c0c0": "#c0c0c0","fff8f8": "#f8f8ff","aaa6a7": "#a7a6aa","dedede": "#dedede","d2d2d2": "#d2d2d2","d0d0d0": "#d0d0d0","c08000": "#0080c0","fcfcfc": "#fcfcfc","f3e3d9": "#d9e3f3"},"fonts":{"dee31769":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 12,"bold": false,"italic": false},"67d9a7ad":{"family": ["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size": 11,"bold": false,"italic": false},"dee311c5":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 11,"bold": false,"italic": false},"c9a3013":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 14,"bold": true,"italic": false},"c9a2fa1":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 11,"bold": true,"italic": false}},"borders":{"c411a436":{"width": 1,"style": "outset","color": null},"e2677bf1":{"width": 1,"style": "solid","color": "#cccccc"},"de1b2d87":{"width": 1,"style": "solid","color": "#b4b4b4"},"8879b0d1":{"width": 1,"style": "solid","color": "#000000"},"98585c31":{"width": 1,"style": "solid","color": "#999999"},"92103dff":{"width": 2,"style": "solid","color": "#4b4b4b"},"dfa628db":{"width": 1,"style": "solid","color": "#c1c1c1"},"dc65e06a":{"width": 1,"style": "solid","color": "#a4a4a4"},"887c1e69":{"width": 1,"style": "solid","color": "#0059a5"},"dc902e9c":{"width": 1,"style": "solid","color": "#a7a6aa"},"36a":{"width": 0,"style": null,"color": null},"887bfd69":{"width": 2,"style": "solid","color": "#005092"},"2abfdf6d":{"width": 1,"style": "dotted","color": "#b8b8b8"},"5fbe2ff":{"width": 1,"style": "inset","color": null},"887c1601":{"width": 1,"style": "solid","color": "#00589f"}},"cursors":{"e81f3e3d": "pointer","5c13d641": "default"},"animations":{"7":{},"6d3dee97":{"hoverOut": [500,"easeOut"]},"4bbf0fbf":{"fadeIn": [200,"linear"],"fadeOut": [600,"easeOut"]},"4bbf04cf":{"fadeIn": [200,"linear"],"fadeOut": [400,"easeOut"]}}});ts.setThemeCssValues("org.eclipse.swt.theme.Default",{"Spinner-DownButton":{"background-image": [[[":pressed"],"ed198000"],[[],"ecca8c00"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f030"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"DateTime-DropDownButton":{"background-image": [[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"CoolBar":{"background-image": [[[],"ffffffff"]]},"TreeColumn":{"color": [[[":disabled"],"cfcfcf"],[[],"666666"]],"font": [[[],"dee31769"]],"background-color": [[[],"fff8f8"]],"background-image": [[[":hover"],"6219d800"],[[],"c049f400"]],"border-bottom": [[[":hover"],"36a"],[[],"36a"]],"padding": [[[],"12042a9a"]]},"ScrollBar-UpButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"de1b2d87"]],"border-radius": [[["[VERTICAL"],"1203f04b"],[["[HORIZONTAL"],"1203f708"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"ExpandItem-Button":{"background-image": [[[":expanded",":hover"],"903cec2d"],[[":expanded"],"fa5acbe"],[[":hover"],"5402a05a"],[[],"361d46ab"]]},"Spinner-UpButton":{"background-image": [[[":pressed"],"9ece8000"],[[],"b7351000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f480"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Group":{"background-color": [[[],"ffffff"]],"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Label-SeparatorLine":{"border": [[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[],"dc65e06a"]],"border-radius": [[[],"1203f000"]],"background-color": [[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"width": [[[],"5e"]]},"Slider-UpButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[["[VERTICAL"],"1203f032"],[["[HORIZONTAL"],"1203f4b0"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"DateTime":{"color": [[[":disabled"],"cfcfcf"],[[],"4e4a46"]],"background-color": [[[],"fcfcfc"]],"font": [[[],"dee311c5"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"padding": [[[],"12042a9a"]]},"Tree-Cell":{"padding": [[[],"1204630b"]],"spacing": [[[],"8d"]]},"Slider-DownButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[["[VERTICAL"],"12046080"],[["[HORIZONTAL"],"12045c02"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"CCombo-Button":{"background-image": [[[":pressed"],"20ce8000"],[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[":hover","[FLAT"],"c411a436"],[["[FLAT"],"36a"],[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Shell":{"border": [[[":inactive",":maximized"],"36a"],[[":inactive","[TITLE"],"92103dff"],[[":inactive","[BORDER"],"92103dff"],[[":maximized"],"36a"],[["[BORDER"],"887bfd69"],[["[TITLE"],"887bfd69"],[[],"8879b0d1"]],"border-radius": [[[":inactive",":maximized"],"1203f000"],[[":maximized"],"1203f000"],[["[BORDER"],"12050940"],[["[TITLE"],"12050940"]],"background-image": [[[],"ffffffff"]],"padding": [[["[BORDER"],"120509bd"],[["[TITLE"],"120509bd"],[[],"1203f000"]],"background-color": [[["[BORDER"],"ffffff"],[["[TITLE"],"ffffff"],[[],"ffffff"]],"opacity": [[[],"1.0"]]},"Combo":{"color": [[[":disabled"],"cfcfcf"],[[],"4e4a46"]],"background-color": [[[],"fcfcfc"]],"font": [[[],"dee311c5"]],"border": [[[],"dfa628db"]],"border-radius": [[[],"120460b2"]]},"ExpandItem-Header":{"background-color": [[[],"ffffff"]],"background-image": [[[],"3a888000"]],"border": [[[],"36a"]],"border-radius": [],"cursor": [[[":disabled"],"5c13d641"],[[],"e81f3e3d"]]},"Combo-Button":{"background-image": [[[":pressed"],"20ce8000"],[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"ToolItem-DropDownIcon":{"background-image": [[[],"fcf99fc5"]],"border": [[[":hover"],"5fbe2ff"],[[],"36a"]]},"DateTime-Calendar-Day":{"color": [[[":hover",":selected"],"ffffff"],[[":otherMonth"],"808080"],[[":selected"],"4a4a4a"],[[],"4a4a4a"]],"background-color": [[[":selected",":unfocused"],"c0c0c0"],[[":hover",":selected"],"9c5600"],[[":hover"],"f3e3d9"],[[":otherMonth"],"ffffffff"],[[":selected"],"d2d2d2"],[[],"ffffff"]]},"TableItem":{"color": [[[":even",":linesvisible",":selected",":unfocused"],"ffffff"],[[":even",":linesvisible",":selected"],"ffffff"],[[":selected",":unfocused"],"ffffff"],[[":selected"],"ffffff"],[[":disabled"],"cfcfcf"],[[],"ffffffff"]],"background-color": [[[":even",":linesvisible",":selected",":unfocused"],"959595"],[[":even",":linesvisible",":selected"],"9f5800"],[[":even",":hover",":linesvisible"],"f7e9da"],[[":even",":linesvisible"],"f4f3f3"],[[":selected",":unfocused"],"959595"],[[":selected"],"9f5800"],[[":hover"],"f7e9da"],[[],"ffffffff"]],"text-decoration": [[[],"none"]]},"*":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"background-image": [[[],"ffffffff"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding": [[[],"1203f000"]]},"Tree-GridLine":{"color": [[[":horizontal"],"0"],[[],"d0d0d0"]]},"CCombo-Button-Icon":{"background-image": [[[":hover"],"d2eb04f8"],[[],"91dcf9c9"]]},"Combo-Button-Icon":{"background-image": [[[":hover"],"d2eb04f8"],[[],"91dcf9c9"]]},"DateTime-UpButton-Icon":{"background-image": [[[":hover"],"d18fce93"],[[],"f7d3d3a4"]]},"Sash":{"background-color": [[[":hover"],"f7e9da"],[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"TabItem":{"background-color": [[[":hover"],"f7e9da"],[[":selected"],"ffffff"],[[],"ffffff"]],"background-image": [[[":hover"],"ffffffff"],[[":selected"],"ffffffff"],[[],"ffffffff"]],"border-top-color": [[[":selected"],"9f5800"],[[],"ffffff"]],"border-bottom-color": [[[":selected"],"9f5800"],[[],"ffffff"]]},"ToolItem-Separator":{"width": [[[],"bc"]]},"TableColumn-SortIndicator":{"background-image": [[[":down"],"f1188849"],[[":up"],"7c0538c2"],[[],"ffffffff"]]},"ToolTip-Text":{"color": [[[],"993300"]],"font": [[[],"c9a3013"]]},"ScrollBar":{"background-color": [[[],"f4f3f3"]],"border": [[[],"36a"]],"border-radius": [[[],"1204990b"]],"width": [[[],"2c1"]]},"ProgressBar":{"background-color": [[[],"ffffff"]],"background-image": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120460b2"]]},"Group-Frame":{"border": [[[],"e2677bf1"]],"border-radius": [[[],"120460b2"]],"margin": [[[],"1205a000"]],"padding": [[[],"1205a4b2"]]},"TreeColumn-SortIndicator":{"background-image": [[[":down"],"f1188849"],[[":up"],"7c0538c2"],[[],"ffffffff"]]},"Shell-MinButton":{"margin": [[[":inactive"],"1203fd80"],[[],"1203fd80"]],"background-image": [[[":hover",":inactive"],"ec3b45d8"],[[":inactive"],"f92762a9"],[[":hover"],"ec3b45d8"],[[],"f92762a9"]]},"TableColumn":{"color": [[[":disabled"],"cfcfcf"],[[],"666666"]],"font": [[[],"dee31769"]],"background-color": [[[],"fff8f8"]],"background-image": [[[":hover"],"6219d800"],[[],"c049f400"]],"border-bottom": [[[":hover"],"36a"],[[],"36a"]],"padding": [[[],"12042a9a"]]},"ToolTip-Image":{"background-image": [[["[ICON_WARNING"],"7f141d33"],[["[ICON_INFORMATION"],"9df80cc3"],[["[ICON_ERROR"],"dd20909f"],[[],"ffffffff"]]},"ScrollBar-Thumb-Icon":{"background-image": [[["[HORIZONTAL"],"c8c41a97"],[["[VERTICAL"],"24c84a49"],[[],"ffffffff"]]},"CTabItem":{"font": [[[],"dee31769"]],"color": [[[":disabled"],"0"],[[":selected"],"ffffff"],[[],"4a4a4a"]],"background-color": [[[":selected"],"9f5800"],[[],"ffffff"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"12046534"]],"spacing": [[[],"bc"]]},"Combo-Field":{"padding": [[[],"120462f3"]]},"Table":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"background-image": [[[],"ffffffff"]]},"Text-Message":{"color": [[[],"aaa6a7"]]},"Slider-DownButton-Icon":{"background-image": [[[":hover","[VERTICAL"],"d18fce93"],[[":hover","[HORIZONTAL"],"551f1d87"],[["[VERTICAL"],"f7d3d3a4"],[["[HORIZONTAL"],"f0f66998"],[[],"ffffffff"]]},"Spinner-Field":{"padding": [[[],"120462f3"]]},"Tree":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Widget-ToolTip":{"color": [[[],"4a4a4a"]],"background-color": [[[],"f7e9da"]],"border": [[[],"887c1601"]],"border-radius": [[[],"120460b2"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"12042cf3"]],"font": [[[],"dee31769"]],"opacity": [[[],"1.0"]],"animation": [[[],"4bbf0fbf"]]},"DateTime-Calendar-PreviousYearButton":{"background-image": [[[":hover"],"1f6c63f6"],[[],"3698ef47"]],"cursor": [[[],"5c13d641"]]},"List-Item":{"color": [[[":even",":selected",":unfocused"],"ffffff"],[[":even",":selected"],"ffffff"],[[":selected",":unfocused"],"ffffff"],[[":selected"],"ffffff"],[[":disabled"],"cfcfcf"],[[],"ffffffff"]],"background-color": [[[":even",":selected",":unfocused"],"959595"],[[":even",":selected"],"9f5800"],[[":even",":hover"],"f7e9da"],[[":selected",":unfocused"],"959595"],[[":even"],"f4f3f3"],[[":selected"],"9f5800"],[[":hover"],"f7e9da"],[[],"ffffffff"]],"background-image": [[[":even",":selected",":unfocused"],"7a6be800"],[[":even",":selected"],"44404c00"],[[":selected",":unfocused"],"7a6be800"],[[":selected"],"44404c00"],[[":hover"],"b2707000"],[[],"ffffffff"]]},"Scale-Thumb":{"background-color": [[[],"9f5800"]]},"Link":{"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Button-CheckIcon":{"background-image": [[[":grayed",":hover",":selected"],"bf9cb6"],[[":grayed",":selected"],"81f5b807"],[[":hover",":selected"],"42f14f4f"],[[":selected"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"Table-GridLine":{"color": [[[":horizontal"],"ffffffff"],[[],"dedede"]]},"Shell-CloseButton":{"margin": [[[":inactive"],"1203fb40"],[[],"1203fb40"]],"background-image": [[[":hover",":inactive"],"6181cefe"],[[":inactive"],"63bd404f"],[[":hover"],"6181cefe"],[[],"63bd404f"]]},"DateTime-DownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Label":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"ffffffff"]],"text-decoration": [[[],"none"]],"opacity": [[[],"1.0"]]},"Shell-Titlebar":{"color": [[[":inactive"],"aaaaaa"],[[],"ffffff"]],"background-color": [[[":inactive"],"a59679"],[[],"c08000"]],"background-gradient-color": [[[":inactive"],"a59679"],[[],"c08000"]],"background-image": [[[":inactive"],"a6cd3400"],[[],"25ae5c00"]],"font": [[[],"dee31769"]],"margin": [[[],"1203f000"]],"padding": [[[],"12046775"]],"height": [[[],"40a"]],"border": [[[],"36a"]],"border-radius": [[[],"120498c0"]]},"Tree-Indent":{"width": [[[],"2f0"]],"background-image": [[[":expanded",":first",":hover",":last"],"38e1b619"],[[":collapsed",":first",":hover",":last"],"2282bd8b"],[[":expanded",":first",":last"],"1e7357aa"],[[":collapsed",":first",":last"],"f9835c9c"],[[":expanded",":hover",":last"],"38e1b619"],[[":collapsed",":hover",":last"],"2282bd8b"],[[":expanded",":first",":hover"],"38e1b619"],[[":collapsed",":first",":hover"],"2282bd8b"],[[":first",":last"],"ffffffff"],[[":expanded",":last"],"1e7357aa"],[[":collapsed",":last"],"f9835c9c"],[[":expanded",":first"],"1e7357aa"],[[":collapsed",":first"],"f9835c9c"],[[":expanded",":hover"],"38e1b619"],[[":collapsed",":hover"],"2282bd8b"],[[":last"],"ffffffff"],[[":first"],"ffffffff"],[[":line"],"ffffffff"],[[":expanded"],"1e7357aa"],[[":collapsed"],"f9835c9c"],[[],"ffffffff"]]},"Combo-List":{"border": [[[],"dfa628db"]],"border-radius": [[[],"1203f032"]]},"Combo-FocusIndicator":{"background-color": [[[],"ffffffff"]],"border": [[[],"2abfdf6d"]],"margin": [[[],"120450d9"]],"opacity": [[[],"1.0"]]},"DateTime-DownButton":{"background-image": [[[":pressed"],"ed198000"],[[],"ecca8c00"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f030"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Link-Hyperlink":{"color": [[[":disabled"],"959595"],[[],"9f5800"]]},"Spinner":{"color": [[[":disabled"],"cfcfcf"],[[],"4e4a46"]],"background-color": [[[],"fcfcfc"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"padding": [[[],"12042a9a"]]},"MenuItem-CascadeIcon":{"background-image": [[[],"4fb4e47"]]},"ToolItem":{"color": [[[":disabled"],"cfcfcf"],[[],"ffffffff"]],"background-color": [[[":hover"],"ffffff"],[[],"ffffffff"]],"background-image": [[[":selected"],"d40ced5e"],[[":pressed"],"d40ced5e"],[[],"ffffffff"]],"border": [[[":selected"],"dc65e06a"],[[":pressed"],"dc65e06a"],[[":hover"],"dc65e06a"],[["[FLAT"],"36a"],[[],"36a"]],"border-radius": [[[":selected"],"120460b2"],[[":pressed"],"120460b2"],[[":hover"],"120460b2"],[[],"1203f000"]],"animation": [[[],"7"]],"spacing": [[[],"bc"]],"padding": [[[":selected"],"1204969c"],[[":pressed"],"1204969c"],[[":hover"],"120462f3"],[["[FLAT"],"12049b4c"],[[],"120462f3"]],"opacity": [[[],"1.0"]]},"CTabFolder":{"border-color": [[[],"a4a4a4"]],"border-radius": [[[],"120460b2"]]},"Tree-Checkbox":{"margin": [[[],"1203f480"]],"background-image": [[[":checked",":grayed",":hover"],"bf9cb6"],[[":checked",":grayed"],"81f5b807"],[[":checked",":hover"],"42f14f4f"],[[":checked"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"Menu":{"color": [[[":disabled"],"cfcfcf"],[[],"a55900"]],"background-color": [[[],"ffffff"]],"background-image": [[[],"ffffffff"]],"font": [[[],"dee31769"]],"border": [[[],"887c1e69"]],"border-radius": [[[],"120460b2"]],"opacity": [[[],"1.0"]],"padding": [[[],"12045c30"]],"animation": [[[],"7"]]},"TabFolder":{},"Button":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"background-image": [[[":hover",":selected","[TOGGLE"],"20ce8000"],[["[BORDER","[RADIO"],"ffffffff"],[["[BORDER","[CHECK"],"ffffffff"],[[":selected","[TOGGLE"],"15180000"],[[":pressed","[TOGGLE"],"20ce8000"],[[":pressed","[PUSH"],"20ce8000"],[[":hover","[TOGGLE"],"4f80000"],[[":hover","[PUSH"],"4f80000"],[["[BORDER"],"96f80000"],[["[TOGGLE"],"96f80000"],[["[PUSH"],"96f80000"],[[],"ffffffff"]],"border": [[["[BORDER"],"dc65e06a"],[["[TOGGLE"],"dc65e06a"],[["[PUSH"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"1204990b"],[["[TOGGLE"],"1204990b"],[["[PUSH"],"1204990b"]],"opacity": [[[],"1.0"]],"animation": [[[":pressed","[TOGGLE"],"7"],[[":pressed","[PUSH"],"7"],[["[BORDER"],"6d3dee97"],[["[TOGGLE"],"6d3dee97"],[["[PUSH"],"6d3dee97"],[[],"7"]],"cursor": [[[":disabled","[TOGGLE"],"5c13d641"],[[":disabled","[PUSH"],"5c13d641"],[["[BORDER"],"e81f3e3d"],[["[TOGGLE"],"e81f3e3d"],[["[PUSH"],"e81f3e3d"],[[],"5c13d641"]],"padding": [[[":pressed","[TOGGLE"],"1204d377"],[[":pressed","[PUSH"],"1204d377"],[["[BORDER"],"12046775"],[["[TOGGLE"],"12046775"],[["[PUSH"],"12046775"],[[],"1204d3a5"]],"spacing": [[["[RADIO"],"bc"],[["[CHECK"],"bc"],[[],"5e"]],"font": [[[],"dee31769"]]},"CLabel":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"1204990b"]],"spacing": [[[],"eb"]],"opacity": [[[],"1.0"]]},"MenuItem-CheckIcon":{"background-image": [[[],"8ad6c431"]]},"Scale":{"background-color": [[[],"ffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": []},"ToolTip":{"font": [[[],"dee31769"]],"color": [[[],"0"]],"background-color": [[[],"fcfcfc"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"98f8b000"]],"opacity": [[[],"1.0"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120509bd"]],"padding": [[[],"1204990b"]],"animation": [[[],"4bbf0fbf"]]},"Slider-Thumb":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120460b2"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]]},"CCombo-List":{"border": [[[],"dfa628db"]],"border-radius": [[[],"1203f032"]]},"ScrollBar-DownButton-Icon":{"background-image": [[[":hover","[HORIZONTAL"],"560eb7d2"],[[":hover","[VERTICAL"],"d18fce93"],[["[HORIZONTAL"],"5b0e5823"],[["[VERTICAL"],"f7d3d3a4"],[[],"ffffffff"]]},"Display":{"rwt-shadow-color": [[[],"aaa6a7"]],"rwt-highlight-color": [[[],"ffffff"]],"rwt-darkshadow-color": [[[],"8c8785"]],"rwt-lightshadow-color": [[[],"e4dfdc"]],"rwt-thinborder-color": [[[],"99a8ac"]],"rwt-selectionmarker-color": [[[],"3cc8fe"]],"rwt-infobackground-color": [[[],"ffffff"]],"rwt-error-image": [[[],"e37249d4"]],"rwt-information-image": [[[],"38054a38"]],"rwt-working-image": [[[],"38054a38"]],"rwt-question-image": [[[],"343b3df0"]],"rwt-warning-image": [[[],"37dc5d28"]],"rwt-fontlist": [[[],"67d9a7ad"]],"background-image": [[[],"f281857c"]],"font": [[[],"dee31769"]]},"ToolBar":{"color": [[[":disabled"],"cfcfcf"],[[],"0"]],"background-color": [[[],"ffffff"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"1203f000"]],"spacing": [[[],"0"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"opacity": [[[],"1.0"]]},"ExpandBar":{"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dfa628db"],[[],"36a"]],"border-radius": []},"Button-RadioIcon":{"background-image": [[[":hover",":selected"],"6344dd7c"],[[":selected"],"7e94854d"],[[":hover"],"6356c615"],[[],"4a0314a6"]]},"DateTime-DropDownCalendar":{"border": [[[],"dc902e9c"]]},"DateTime-Field":{"color": [[[":selected"],"4a4a4a"],[[],"4a4a4a"]],"background-color": [[[":selected"],"d2d2d2"],[[],"ffffff"]],"padding": [[[],"120462f3"]]},"DateTime-Calendar-NextYearButton":{"background-image": [[[":hover"],"5310f593"],[[],"5efe3aa4"]],"cursor": [[[],"5c13d641"]]},"ScrollBar-UpButton-Icon":{"background-image": [[[":hover","[HORIZONTAL"],"2ac7a085"],[[":hover","[VERTICAL"],"9ee04c5a"],[["[HORIZONTAL"],"44048316"],[["[VERTICAL"],"b3abf2ab"],[[],"ffffffff"]]},"DateTime-Calendar-NextMonthButton":{"background-image": [[[":hover"],"66f5543e"],[[],"528db58f"]],"cursor": [[[],"5c13d641"]]},"CCombo":{"color": [[[":disabled"],"cfcfcf"],[[],"4e4a46"]],"background-color": [[[],"fcfcfc"]],"font": [[[],"dee311c5"]],"border": [[["[BORDER"],"dfa628db"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"],[[],"120460b2"]]},"ScrollBar-Thumb":{"background-color": [[[],"ffffffff"]],"border": [[[":pressed"],"98585c31"],[[],"de1b2d87"]],"border-radius": [[[],"1203f000"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]]},"CCombo-FocusIndicator":{"background-color": [[[],"ffffffff"]],"border": [[[],"2abfdf6d"]],"margin": [[[],"120450d9"]],"opacity": [[[],"1.0"]]},"Composite":{"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [],"background-color": [[["[BORDER"],"ffffff"],[[],"ffffff"]],"background-image": [[["[BORDER"],"ffffffff"],[[],"ffffffff"]],"padding": [[[],"1203f000"]],"opacity": [[[],"1.0"]]},"MenuItem-RadioIcon":{"background-image": [[[],"df7ccd2b"]]},"Slider-UpButton-Icon":{"background-image": [[[":hover","[VERTICAL"],"9ee04c5a"],[[":hover","[HORIZONTAL"],"dc3f170"],[["[VERTICAL"],"b3abf2ab"],[["[HORIZONTAL"],"6b1ea041"],[[],"ffffffff"]]},"Group-Label":{"border": [[[],"36a"]],"border-radius": [],"padding": [[[],"1203f6c4"]],"margin": [[[],"12043ca2"]],"background-color": [[[],"ffffffff"]],"color": [[[],"4e4a46"]]},"Table-Checkbox":{"width": [[[],"3db"]],"margin": [[[],"1203f000"]],"background-image": [[[":checked",":grayed",":hover"],"bf9cb6"],[[":checked",":grayed"],"81f5b807"],[[":checked",":hover"],"42f14f4f"],[[":checked"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"TreeItem":{"color": [[[":even",":linesvisible",":selected",":unfocused"],"ffffff"],[[":even",":linesvisible",":selected"],"ffffff"],[[":selected",":unfocused"],"ffffff"],[[":selected"],"ffffff"],[[":disabled"],"cfcfcf"],[[],"ffffffff"]],"background-color": [[[":even",":linesvisible",":selected",":unfocused"],"959595"],[[":even",":linesvisible",":selected"],"9f5800"],[[":even",":hover",":linesvisible"],"f7e9da"],[[":even",":linesvisible"],"f4f3f3"],[[":selected",":unfocused"],"959595"],[[":selected"],"9f5800"],[[":hover"],"f7e9da"],[[],"ffffffff"]],"text-decoration": [[[],"none"]]},"DateTime-DropDownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Slider":{"background-color": [[[],"f4f3f3"]],"border": [[[],"36a"]],"border-radius": []},"Browser":{"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border": [[[],"36a"]],"border-radius": [],"color": [[[":disabled"],"cfcfcf"],[[],"ffffff"]],"background-color": [[[],"9c5600"]],"font": [[[],"c9a2fa1"]]},"CoolItem-Handle":{"border": [[[],"c411a436"]],"width": [[[],"bc"]]},"ToolTip-Message":{"color": [[[],"0"]],"font": [[[],"dee31769"]]},"ScrollBar-DownButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"de1b2d87"]],"border-radius": [[["[VERTICAL"],"120498c0"],[["[HORIZONTAL"],"12049203"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"List":{"font": [[[],"dee31769"]],"color": [[[":disabled"],"cfcfcf"],[[],"4a4a4a"]],"background-color": [[[],"ffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"DateTime-UpButton":{"background-image": [[[":pressed"],"9ece8000"],[[],"b7351000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f480"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Shell-DisplayOverlay":{"background-color": [[[],"808080"]],"background-image": [[[],"ffffffff"]],"animation": [[[],"4bbf04cf"]],"opacity": [[[],"0.2"]]},"Button-FocusIndicator":{"background-color": [[["[RADIO"],"ffffffff"],[["[CHECK"],"ffffffff"],[["[TOGGLE"],"ffffffff"],[["[PUSH"],"ffffffff"],[[],"ffffff"]],"border": [[["[RADIO"],"2abfdf6d"],[["[CHECK"],"2abfdf6d"],[["[TOGGLE"],"2abfdf6d"],[["[PUSH"],"2abfdf6d"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding": [[["[RADIO"],"120460b1"],[["[CHECK"],"120460b1"],[["[TOGGLE"],"1203f000"],[["[PUSH"],"1203f000"],[[],"1203f000"]],"margin": [[["[RADIO"],"1203f000"],[["[CHECK"],"1203f000"],[["[TOGGLE"],"120460b2"],[["[PUSH"],"120460b2"]],"opacity": [[["[RADIO"],"1.0"],[["[CHECK"],"1.0"],[["[TOGGLE"],"1.0"],[["[PUSH"],"1.0"]]},"Sash-Handle":{"background-image": [[[],"ffffffff"]]},"CTabFolder-DropDownButton-Icon":{"background-image": [[[":hover"],"3d543571"],[[],"d2e3902"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image": [[[":hover"],"2607b23b"],[[],"6e49954c"]],"cursor": [[[],"5c13d641"]]},"Spinner-DownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Table-Cell":{"padding": [[[],"1204cf0b"]],"spacing": [[[],"8d"]]},"Text":{"color": [[[":disabled"],"cfcfcf"],[[],"4e4a46"]],"background-color": [[[],"fcfcfc"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"120462f3"]]},"MenuItem":{"color": [[[":hover"],"4a4a4a"],[[":disabled"],"cfcfcf"],[[],"0"]],"background-color": [[[":hover"],"f7e9da"],[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"opacity": [[[],"1.0"]]},"ProgressBar-Indicator":{"background-color": [[[":error"],"2020cb"],[[":paused"],"ebebeb"],[[],"9f5800"]],"background-image": [[[],"ffffffff"]],"border": [[[],"36a"]],"opacity": [[[],"1.0"]]},"ExpandItem":{"border": [[[],"dfa628db"]],"border-radius": []},"CCombo-Field":{"padding": [[[],"120462f3"]]},"Shell-MaxButton":{"margin": [[[":inactive"],"1203fd80"],[[],"1203fd80"]],"background-image": [[[":hover",":inactive",":maximized"],"af6f6914"],[[":inactive",":maximized"],"b215a2e5"],[[":hover",":maximized"],"af6f6914"],[[":hover",":inactive"],"7f9d166a"],[[":maximized"],"b215a2e5"],[[":inactive"],"ec0d88bb"],[[":hover"],"7f9d166a"],[[],"ec0d88bb"]]},"Spinner-UpButton-Icon":{"background-image": [[[":hover"],"d18fce93"],[[],"f7d3d3a4"]]}},true); >+ts.defineValues({"dimensions":{"0": 0,"40a": 22,"5e": 2,"8d": 3,"bc": 4,"2f0": 16,"eb": 5,"2c1": 15,"34e": 18,"3db": 21},"boxdims":{"1204d3a5": [4,5,4,5],"120509bd": [5,5,5,5],"12043ca2": [1,10,1,10],"120450d9": [1,19,1,1],"12045c02": [2,0,0,2],"1203fb40": [0,5,0,0],"1205a000": [8,0,0,0],"12045c30": [2,0,2,0],"1204990b": [3,3,3,3],"12046534": [2,4,2,4],"1205a4b2": [8,2,2,2],"1204630b": [2,3,3,3],"1203f708": [0,3,3,0],"1204d377": [4,5,2,7],"12050940": [5,5,0,0],"1203fd80": [0,6,0,0],"12049b4c": [3,4,3,4],"12046775": [2,5,2,5],"1203f6c4": [0,3,0,4],"120462f3": [2,3,2,3],"12049203": [3,0,0,3],"120498c0": [3,3,0,0],"120460b1": [2,2,2,1],"120460b2": [2,2,2,2],"12042a9a": [1,2,1,2],"12042cf3": [1,3,2,3],"1204cf0b": [4,3,3,3],"1203f4b0": [0,2,2,0],"1203f480": [0,2,0,0],"12046080": [2,2,0,0],"1203f032": [0,0,2,2],"1203f030": [0,0,2,0],"1203f000": [0,0,0,0],"1203f04b": [0,0,3,3],"1204969c": [3,2,1,4]},"images":{"ed198000": null,"5efe3aa4": ["5efe3aa4",10,7],"df7ccd2b": ["df7ccd2b",16,5],"91dcf9c9": ["91dcf9c9",9,6],"f9835c9c": ["f9835c9c",6,9],"361d46ab": ["361d46ab",16,16],"ecca8c00": null,"3d543571": ["3d543571",10,7],"343b3df0": ["343b3df0",32,32],"6344dd7c": ["6344dd7c",15,15],"5310f593": ["5310f593",10,7],"38e1b619": ["38e1b619",7,7],"ec0d88bb": ["ec0d88bb",11,11],"6b1ea041": ["6b1ea041",6,9],"19d00025": null,"a7f80000": null,"96f80000": null,"4a0314a6": ["4a0314a6",15,15],"6181cefe": ["6181cefe",11,11],"d2e3902": ["d2e3902",10,7],"fbf80000": null,"9ee04c5a": ["9ee04c5a",9,6],"b17f67f9": ["b17f67f9",15,15],"b7351000": null,"5b0e5823": ["5b0e5823",6,9],"9df80cc3": ["9df80cc3",32,32],"63bd404f": ["63bd404f",11,11],"2607b23b": ["2607b23b",6,7],"f1188849": ["f1188849",9,5],"b3abf2ab": ["b3abf2ab",9,6],"44404c00": null,"1f6c63f6": ["1f6c63f6",10,7],"5402a05a": ["5402a05a",16,16],"2ac7a085": ["2ac7a085",6,9],"c049f400": null,"6e49954c": ["6e49954c",6,7],"66f5543e": ["66f5543e",6,7],"f7d3d3a4": ["f7d3d3a4",9,6],"24c84a49": ["24c84a49",7,8],"c8c41a97": ["c8c41a97",8,7],"528db58f": ["528db58f",6,7],"fcf99fc5": ["fcf99fc5",7,4],"560eb7d2": ["560eb7d2",6,9],"44048316": ["44048316",6,9],"38054a38": ["38054a38",32,32],"81f5b807": ["81f5b807",15,15],"7f141d33": ["7f141d33",32,32],"3698ef47": ["3698ef47",10,7],"42f14f4f": ["42f14f4f",15,15],"25ae5c00": null,"b215a2e5": ["b215a2e5",11,11],"98f8b000": null,"1e7357aa": ["1e7357aa",7,7],"dc3f170": ["dc3f170",6,9],"7f9d166a": ["7f9d166a",11,11],"20ce8000": null,"7a6be800": null,"bf9cb6": ["bf9cb6",15,15],"ffffffff": null,"551f1d87": ["551f1d87",6,9],"e37249d4": ["e37249d4",32,32],"8ad6c431": ["8ad6c431",16,7],"f281857c": ["f281857c",1,1600],"9ae0f28": ["9ae0f28",15,15],"dd20909f": ["dd20909f",32,32],"a6cd3400": null,"ec3b45d8": ["ec3b45d8",11,11],"903cec2d": ["903cec2d",16,16],"7f000025": null,"f92762a9": ["f92762a9",11,11],"b2707000": null,"7c0538c2": ["7c0538c2",9,5],"d2eb04f8": ["d2eb04f8",9,6],"af6f6914": ["af6f6914",11,11],"d18fce93": ["d18fce93",9,6],"15180000": null,"7e94854d": ["7e94854d",15,15],"d40ced5e": ["d40ced5e",2,2],"9ece8000": null,"4fb4e47": ["4fb4e47",13,13],"4f80000": null,"6219d800": null,"9f000025": null,"f0f66998": ["f0f66998",6,9],"6da39160": ["6da39160",15,15],"3a888000": null,"fa5acbe": ["fa5acbe",16,16],"ff000025": null,"2282bd8b": ["2282bd8b",6,9],"37dc5d28": ["37dc5d28",32,32],"6356c615": ["6356c615",15,15]},"gradients":{"ed198000":{"percents": [0.0,52.0,100.0],"colors": ["#b0b0b0","#e0e0e0","#ffffff"],"vertical": true},"5efe3aa4": null,"df7ccd2b": null,"91dcf9c9": null,"f9835c9c": null,"361d46ab": null,"ecca8c00":{"percents": [0.0,100.0],"colors": ["#e0e0e0","#ffffff"],"vertical": true},"3d543571": null,"343b3df0": null,"6344dd7c": null,"5310f593": null,"38e1b619": null,"ec0d88bb": null,"6b1ea041": null,"19d00025":{"percents": [0.0,52.0,100.0],"colors": ["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical": false},"a7f80000":{"percents": [0.0,42.0,58.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": true},"96f80000":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": true},"4a0314a6": null,"6181cefe": null,"d2e3902": null,"fbf80000":{"percents": [0.0,38.0,62.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": true},"9ee04c5a": null,"b17f67f9": null,"b7351000":{"percents": [0.0,100.0],"colors": ["#ffffff","#e0e0e0"],"vertical": true},"5b0e5823": null,"9df80cc3": null,"63bd404f": null,"2607b23b": null,"f1188849": null,"b3abf2ab": null,"44404c00":{"percents": [0.0,100.0],"colors": ["#0078bf","#00589f"],"vertical": true},"1f6c63f6": null,"5402a05a": null,"2ac7a085": null,"c049f400":{"percents": [0.0,100.0],"colors": ["#fbfcfd","#ececec"],"vertical": true},"6e49954c": null,"66f5543e": null,"f7d3d3a4": null,"24c84a49": null,"c8c41a97": null,"528db58f": null,"fcf99fc5": null,"560eb7d2": null,"44048316": null,"38054a38": null,"81f5b807": null,"7f141d33": null,"3698ef47": null,"42f14f4f": null,"25ae5c00":{"percents": [0.0,100.0],"colors": ["#005fac","#005092"],"vertical": true},"b215a2e5": null,"98f8b000":{"percents": [0.0,100.0],"colors": ["#ffffff","#e4e5f0"],"vertical": true},"1e7357aa": null,"dc3f170": null,"7f9d166a": null,"20ce8000":{"percents": [0.0,52.0,100.0],"colors": ["#e0e0e0","#e0e0e0","#b0b0b0"],"vertical": true},"7a6be800":{"percents": [0.0,100.0],"colors": ["#a5a5a5","#858585"],"vertical": true},"bf9cb6": null,"ffffffff": null,"551f1d87": null,"e37249d4": null,"8ad6c431": null,"f281857c": null,"9ae0f28": null,"dd20909f": null,"a6cd3400":{"percents": [0.0,100.0],"colors": ["#595959","#4b4b4b"],"vertical": true},"ec3b45d8": null,"903cec2d": null,"7f000025":{"percents": [0.0,38.0,62.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#ffffff"],"vertical": false},"f92762a9": null,"b2707000":{"percents": [0.0,100.0],"colors": ["#dae9f7","#d2e0ee"],"vertical": true},"7c0538c2": null,"d2eb04f8": null,"af6f6914": null,"d18fce93": null,"15180000":{"percents": [0.0,30.0,70.0,100.0],"colors": ["#e0e0e0","#f0f0f0","#e0e0e0","#b0b0b0"],"vertical": true},"7e94854d": null,"d40ced5e": null,"9ece8000":{"percents": [0.0,52.0,100.0],"colors": ["#ffffff","#e0e0e0","#b0b0b0"],"vertical": true},"4fb4e47": null,"4f80000":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": true},"6219d800":{"percents": [0.0,100.0],"colors": ["#f4f5f6","#e6e6e6"],"vertical": true},"9f000025":{"percents": [0.0,48.0,52.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": false},"f0f66998": null,"6da39160": null,"3a888000":{"percents": [0.0,55.0,100.0],"colors": ["#ffffff","#e0e0e0","#f0f0f0"],"vertical": true},"fa5acbe": null,"ff000025":{"percents": [0.0,42.0,58.0,100.0],"colors": ["#ffffff","#f0f0f0","#e0e0e0","#cccccc"],"vertical": false},"2282bd8b": null,"37dc5d28": null,"6356c615": null},"colors":{"40024a4c": "#ebebeb","40047970": "#fcfcfc","3ff48b00": "#808080","3ffd1540": "#cb2020","40009eb8": "#dedede","40035180": "#f3f3f4","3ff133d8": "#666666","4004dc1c": "#ffffff","400457b0": "#fec83c","4003f66c": "#f8f8ff","3fe474a4": "#003399","3ff73db4": "#959595","3fe4aeec": "#00589f","3ff9f068": "#aaaaaa","3fed1e38": "#464a4e","3ffa2a74": "#aca899","3ff53320": "#85878c","3ffed240": "#d0d0d0","40006240": "#dcdfe4","3ffeb15c": "#cfcfcf","40000bec": "#d9e3f3","3fe4b0f4": "#0059a5","ffffffff": "undefined","3fe41900": "#000000","3fff1408": "#d2d2d2","3fe4f000": "#0080c0","3fed9ae8": "#4a4a4a","3ff3d584": "#7996a5","3ff92b10": "#a4a4a4","400034dc": "#dae9f7","3ffcc400": "#c0c0c0","3fe4ab90": "#00569c","3ff98c68": "#a7a6aa"},"fonts":{"dee31769":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 12,"bold": false,"italic": false},"67d9a7ad":{"family": ["Segoe UI","Corbel","Calibri","Tahoma","Lucida Sans Unicode"],"size": 11,"bold": false,"italic": false},"dee311c5":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 11,"bold": false,"italic": false},"c9a3013":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 14,"bold": true,"italic": false},"c9a2fa1":{"family": ["Verdana","Lucida Sans","Arial","Helvetica","sans-serif"],"size": 11,"bold": true,"italic": false}},"borders":{"c411a436":{"width": 1,"style": "outset","color": null},"e2677bf1":{"width": 1,"style": "solid","color": "#cccccc"},"de1b2d87":{"width": 1,"style": "solid","color": "#b4b4b4"},"8879b0d1":{"width": 1,"style": "solid","color": "#000000"},"98585c31":{"width": 1,"style": "solid","color": "#999999"},"92103dff":{"width": 2,"style": "solid","color": "#4b4b4b"},"dfa628db":{"width": 1,"style": "solid","color": "#c1c1c1"},"dc65e06a":{"width": 1,"style": "solid","color": "#a4a4a4"},"887c1e69":{"width": 1,"style": "solid","color": "#0059a5"},"dc902e9c":{"width": 1,"style": "solid","color": "#a7a6aa"},"36a":{"width": 0,"style": null,"color": null},"887bfd69":{"width": 2,"style": "solid","color": "#005092"},"2abfdf6d":{"width": 1,"style": "dotted","color": "#b8b8b8"},"5fbe2ff":{"width": 1,"style": "inset","color": null},"887c1601":{"width": 1,"style": "solid","color": "#00589f"}},"cursors":{"e81f3e3d": "pointer","5c13d641": "default"},"animations":{"7":{},"6d3dee97":{"hoverOut": [500,"easeOut"]},"4bbf0fbf":{"fadeIn": [200,"linear"],"fadeOut": [600,"easeOut"]},"4bbf04cf":{"fadeIn": [200,"linear"],"fadeOut": [400,"easeOut"]}},"shadows":{"29f72ebd": [false,5,5,3,0,"#000000",0.5],"306900d": null}});ts.setThemeCssValues("org.eclipse.swt.theme.Default",{"Spinner-DownButton":{"background-image": [[[":pressed"],"ed198000"],[[],"ecca8c00"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f030"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"DateTime-DropDownButton":{"background-image": [[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"CoolBar":{"background-image": [[[],"ffffffff"]]},"TreeColumn":{"color": [[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font": [[[],"dee31769"]],"background-color": [[[],"4003f66c"]],"background-image": [[[":hover"],"6219d800"],[[],"c049f400"]],"border-bottom": [[[":hover"],"36a"],[[],"36a"]],"padding": [[[],"12042a9a"]]},"ScrollBar-UpButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"de1b2d87"]],"border-radius": [[["[VERTICAL"],"1203f04b"],[["[HORIZONTAL"],"1203f708"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"ExpandItem-Button":{"background-image": [[[":expanded",":hover"],"903cec2d"],[[":expanded"],"fa5acbe"],[[":hover"],"5402a05a"],[[],"361d46ab"]]},"Spinner-UpButton":{"background-image": [[[":pressed"],"9ece8000"],[[],"b7351000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f480"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Group":{"background-color": [[[],"4004dc1c"]],"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Label-SeparatorLine":{"border": [[["[SHADOW_OUT"],"c411a436"],[["[SHADOW_IN"],"5fbe2ff"],[[],"dc65e06a"]],"border-radius": [[[],"1203f000"]],"background-color": [[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"width": [[[],"5e"]]},"Slider-UpButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[["[VERTICAL"],"1203f032"],[["[HORIZONTAL"],"1203f4b0"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"DateTime":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color": [[[],"40047970"]],"font": [[[],"dee311c5"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"padding": [[[],"12042a9a"]]},"Tree-Cell":{"padding": [[[],"1204630b"]],"spacing": [[[],"8d"]]},"Slider-DownButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[["[VERTICAL"],"12046080"],[["[HORIZONTAL"],"12045c02"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"CCombo-Button":{"background-image": [[[":pressed"],"20ce8000"],[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[":hover","[FLAT"],"c411a436"],[["[FLAT"],"36a"],[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Shell":{"border": [[[":inactive",":maximized"],"36a"],[[":inactive","[TITLE"],"92103dff"],[[":inactive","[BORDER"],"92103dff"],[[":maximized"],"36a"],[["[BORDER"],"887bfd69"],[["[TITLE"],"887bfd69"],[[],"8879b0d1"]],"border-radius": [[[":inactive",":maximized"],"1203f000"],[[":maximized"],"1203f000"],[["[BORDER"],"12050940"],[["[TITLE"],"12050940"]],"background-image": [[[],"ffffffff"]],"padding": [[["[BORDER"],"120509bd"],[["[TITLE"],"120509bd"],[[],"1203f000"]],"background-color": [[["[BORDER"],"4004dc1c"],[["[TITLE"],"4004dc1c"],[[],"4004dc1c"]],"opacity": [[[],"1.0"]],"box-shadow": [[[":inactive",":maximized"],"306900d"],[[":inactive","[TITLE"],"306900d"],[[":inactive","[BORDER"],"306900d"],[[":maximized"],"306900d"],[["[BORDER"],"29f72ebd"],[["[TITLE"],"29f72ebd"],[[],"306900d"]]},"Combo":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color": [[[],"40047970"]],"font": [[[],"dee311c5"]],"border": [[[],"dfa628db"]],"border-radius": [[[],"120460b2"]]},"ExpandItem-Header":{"background-color": [[[],"4004dc1c"]],"background-image": [[[],"3a888000"]],"border": [[[],"36a"]],"border-radius": [],"cursor": [[[":disabled"],"5c13d641"],[[],"e81f3e3d"]]},"Combo-Button":{"background-image": [[[":pressed"],"20ce8000"],[[],"4f80000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f4b0"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"ToolItem-DropDownIcon":{"background-image": [[[],"fcf99fc5"]],"border": [[[":hover"],"5fbe2ff"],[[],"36a"]]},"DateTime-Calendar-Day":{"color": [[[":hover",":selected"],"4004dc1c"],[[":otherMonth"],"3ff48b00"],[[":selected"],"3fed9ae8"],[[],"3fed9ae8"]],"background-color": [[[":selected",":unfocused"],"3ffcc400"],[[":hover",":selected"],"3fe4ab90"],[[":hover"],"40000bec"],[[":otherMonth"],"ffffffff"],[[":selected"],"3fff1408"],[[],"4004dc1c"]]},"TableItem":{"color": [[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color": [[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fe4aeec"],[[":even",":hover",":linesvisible"],"400034dc"],[[":even",":linesvisible"],"40035180"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[],"ffffffff"]],"text-decoration": [[[],"none"]]},"*":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"background-image": [[[],"ffffffff"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding": [[[],"1203f000"]]},"Tree-GridLine":{"color": [[[":horizontal"],"ffffffff"],[[],"3ffed240"]]},"CCombo-Button-Icon":{"background-image": [[[":hover"],"d2eb04f8"],[[],"91dcf9c9"]]},"Combo-Button-Icon":{"background-image": [[[":hover"],"d2eb04f8"],[[],"91dcf9c9"]]},"DateTime-UpButton-Icon":{"background-image": [[[":hover"],"d18fce93"],[[],"f7d3d3a4"]]},"Sash":{"background-color": [[[":hover"],"400034dc"],[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"TabItem":{"background-color": [[[":hover"],"400034dc"],[[":selected"],"4004dc1c"],[[],"4004dc1c"]],"background-image": [[[":hover"],"ffffffff"],[[":selected"],"ffffffff"],[[],"ffffffff"]],"border-top-color": [[[":selected"],"3fe4aeec"],[[],"4004dc1c"]],"border-bottom-color": [[[":selected"],"3fe4aeec"],[[],"4004dc1c"]]},"ToolItem-Separator":{"width": [[[],"bc"]]},"TableColumn-SortIndicator":{"background-image": [[[":down"],"f1188849"],[[":up"],"7c0538c2"],[[],"ffffffff"]]},"ToolTip-Text":{"color": [[[],"3fe474a4"]],"font": [[[],"c9a3013"]]},"ScrollBar":{"background-color": [[[],"40035180"]],"border": [[[],"36a"]],"border-radius": [[[],"1204990b"]],"width": [[[],"2c1"]]},"ProgressBar":{"background-color": [[[],"4004dc1c"]],"background-image": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120460b2"]]},"Group-Frame":{"border": [[[],"e2677bf1"]],"border-radius": [[[],"120460b2"]],"margin": [[[],"1205a000"]],"padding": [[[],"1205a4b2"]]},"TreeColumn-SortIndicator":{"background-image": [[[":down"],"f1188849"],[[":up"],"7c0538c2"],[[],"ffffffff"]]},"Shell-MinButton":{"margin": [[[":inactive"],"1203fd80"],[[],"1203fd80"]],"background-image": [[[":hover",":inactive"],"ec3b45d8"],[[":inactive"],"f92762a9"],[[":hover"],"ec3b45d8"],[[],"f92762a9"]]},"TableColumn":{"color": [[[":disabled"],"3ffeb15c"],[[],"3ff133d8"]],"font": [[[],"dee31769"]],"background-color": [[[],"4003f66c"]],"background-image": [[[":hover"],"6219d800"],[[],"c049f400"]],"border-bottom": [[[":hover"],"36a"],[[],"36a"]],"padding": [[[],"12042a9a"]]},"ToolTip-Image":{"background-image": [[["[ICON_WARNING"],"7f141d33"],[["[ICON_INFORMATION"],"9df80cc3"],[["[ICON_ERROR"],"dd20909f"],[[],"ffffffff"]]},"ScrollBar-Thumb-Icon":{"background-image": [[["[HORIZONTAL"],"c8c41a97"],[["[VERTICAL"],"24c84a49"],[[],"ffffffff"]]},"CTabItem":{"font": [[[],"dee31769"]],"color": [[[":disabled"],"3fe41900"],[[":selected"],"4004dc1c"],[[],"3fed9ae8"]],"background-color": [[[":selected"],"3fe4aeec"],[[],"4004dc1c"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"12046534"]],"spacing": [[[],"bc"]]},"Combo-Field":{"padding": [[[],"120462f3"]]},"Table":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"background-image": [[[],"ffffffff"]]},"Text-Message":{"color": [[[],"3ff98c68"]]},"Slider-DownButton-Icon":{"background-image": [[[":hover","[VERTICAL"],"d18fce93"],[[":hover","[HORIZONTAL"],"551f1d87"],[["[VERTICAL"],"f7d3d3a4"],[["[HORIZONTAL"],"f0f66998"],[[],"ffffffff"]]},"Spinner-Field":{"padding": [[[],"120462f3"]]},"Tree":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Widget-ToolTip":{"color": [[[],"3fed9ae8"]],"background-color": [[[],"400034dc"]],"border": [[[],"887c1601"]],"border-radius": [[[],"120460b2"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"12042cf3"]],"font": [[[],"dee31769"]],"opacity": [[[],"1.0"]],"animation": [[[],"4bbf0fbf"]]},"DateTime-Calendar-PreviousYearButton":{"background-image": [[[":hover"],"1f6c63f6"],[[],"3698ef47"]],"cursor": [[[],"5c13d641"]]},"List-Item":{"color": [[[":even",":selected",":unfocused"],"4004dc1c"],[[":even",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color": [[[":even",":selected",":unfocused"],"3ff73db4"],[[":even",":selected"],"3fe4aeec"],[[":even",":hover"],"400034dc"],[[":selected",":unfocused"],"3ff73db4"],[[":even"],"40035180"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[],"ffffffff"]],"background-image": [[[":even",":selected",":unfocused"],"7a6be800"],[[":even",":selected"],"44404c00"],[[":selected",":unfocused"],"7a6be800"],[[":selected"],"44404c00"],[[":hover"],"b2707000"],[[],"ffffffff"]]},"Scale-Thumb":{"background-color": [[[],"3fe4aeec"]]},"Link":{"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"Button-CheckIcon":{"background-image": [[[":grayed",":hover",":selected"],"bf9cb6"],[[":grayed",":selected"],"81f5b807"],[[":hover",":selected"],"42f14f4f"],[[":selected"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"Table-GridLine":{"color": [[[":horizontal"],"ffffffff"],[[],"40009eb8"]]},"Shell-CloseButton":{"margin": [[[":inactive"],"1203fb40"],[[],"1203fb40"]],"background-image": [[[":hover",":inactive"],"6181cefe"],[[":inactive"],"63bd404f"],[[":hover"],"6181cefe"],[[],"63bd404f"]]},"DateTime-DownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Label":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"ffffffff"]],"text-decoration": [[[],"none"]],"opacity": [[[],"1.0"]]},"Shell-Titlebar":{"color": [[[":inactive"],"3ff9f068"],[[],"4004dc1c"]],"background-color": [[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-gradient-color": [[[":inactive"],"3ff3d584"],[[],"3fe4f000"]],"background-image": [[[":inactive"],"a6cd3400"],[[],"25ae5c00"]],"font": [[[],"dee31769"]],"margin": [[[],"1203f000"]],"padding": [[[],"12046775"]],"height": [[[],"40a"]],"border": [[[],"36a"]],"border-radius": [[[],"120498c0"]]},"Tree-Indent":{"width": [[[],"2f0"]],"background-image": [[[":expanded",":first",":hover",":last"],"38e1b619"],[[":collapsed",":first",":hover",":last"],"2282bd8b"],[[":expanded",":first",":last"],"1e7357aa"],[[":collapsed",":first",":last"],"f9835c9c"],[[":expanded",":hover",":last"],"38e1b619"],[[":collapsed",":hover",":last"],"2282bd8b"],[[":expanded",":first",":hover"],"38e1b619"],[[":collapsed",":first",":hover"],"2282bd8b"],[[":first",":last"],"ffffffff"],[[":expanded",":last"],"1e7357aa"],[[":collapsed",":last"],"f9835c9c"],[[":expanded",":first"],"1e7357aa"],[[":collapsed",":first"],"f9835c9c"],[[":expanded",":hover"],"38e1b619"],[[":collapsed",":hover"],"2282bd8b"],[[":last"],"ffffffff"],[[":first"],"ffffffff"],[[":line"],"ffffffff"],[[":expanded"],"1e7357aa"],[[":collapsed"],"f9835c9c"],[[],"ffffffff"]]},"Combo-List":{"border": [[[],"dfa628db"]],"border-radius": [[[],"1203f032"]]},"Combo-FocusIndicator":{"background-color": [[[],"ffffffff"]],"border": [[[],"2abfdf6d"]],"margin": [[[],"120450d9"]],"opacity": [[[],"1.0"]]},"DateTime-DownButton":{"background-image": [[[":pressed"],"ed198000"],[[],"ecca8c00"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f030"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Link-Hyperlink":{"color": [[[":disabled"],"3ff73db4"],[[],"3fe4aeec"]]},"Spinner":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color": [[[],"40047970"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"padding": [[[],"12042a9a"]]},"MenuItem-CascadeIcon":{"background-image": [[[],"4fb4e47"]]},"ToolItem":{"color": [[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color": [[[":hover"],"4004dc1c"],[[],"ffffffff"]],"background-image": [[[":selected"],"d40ced5e"],[[":pressed"],"d40ced5e"],[[],"ffffffff"]],"border": [[[":selected"],"dc65e06a"],[[":pressed"],"dc65e06a"],[[":hover"],"dc65e06a"],[["[FLAT"],"36a"],[[],"36a"]],"border-radius": [[[":selected"],"120460b2"],[[":pressed"],"120460b2"],[[":hover"],"120460b2"],[[],"1203f000"]],"animation": [[[],"7"]],"spacing": [[[],"bc"]],"padding": [[[":selected"],"1204969c"],[[":pressed"],"1204969c"],[[":hover"],"120462f3"],[["[FLAT"],"12049b4c"],[[],"120462f3"]],"opacity": [[[],"1.0"]]},"CTabFolder":{"border-color": [[[],"3ff92b10"]],"border-radius": [[[],"120460b2"]]},"Tree-Checkbox":{"margin": [[[],"1203f480"]],"background-image": [[[":checked",":grayed",":hover"],"bf9cb6"],[[":checked",":grayed"],"81f5b807"],[[":checked",":hover"],"42f14f4f"],[[":checked"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"Menu":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fe4b0f4"]],"background-color": [[[],"4004dc1c"]],"background-image": [[[],"ffffffff"]],"font": [[[],"dee31769"]],"border": [[[],"887c1e69"]],"border-radius": [[[],"120460b2"]],"opacity": [[[],"1.0"]],"padding": [[[],"12045c30"]],"animation": [[[],"7"]]},"TabFolder":{},"Button":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"background-image": [[[":hover",":selected","[TOGGLE"],"20ce8000"],[["[BORDER","[RADIO"],"ffffffff"],[["[BORDER","[CHECK"],"ffffffff"],[[":selected","[TOGGLE"],"15180000"],[[":pressed","[TOGGLE"],"20ce8000"],[[":pressed","[PUSH"],"20ce8000"],[[":hover","[TOGGLE"],"4f80000"],[[":hover","[PUSH"],"4f80000"],[["[BORDER"],"96f80000"],[["[TOGGLE"],"96f80000"],[["[PUSH"],"96f80000"],[[],"ffffffff"]],"border": [[["[BORDER"],"dc65e06a"],[["[TOGGLE"],"dc65e06a"],[["[PUSH"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"1204990b"],[["[TOGGLE"],"1204990b"],[["[PUSH"],"1204990b"]],"opacity": [[[],"1.0"]],"animation": [[[":pressed","[TOGGLE"],"7"],[[":pressed","[PUSH"],"7"],[["[BORDER"],"6d3dee97"],[["[TOGGLE"],"6d3dee97"],[["[PUSH"],"6d3dee97"],[[],"7"]],"cursor": [[[":disabled","[TOGGLE"],"5c13d641"],[[":disabled","[PUSH"],"5c13d641"],[["[BORDER"],"e81f3e3d"],[["[TOGGLE"],"e81f3e3d"],[["[PUSH"],"e81f3e3d"],[[],"5c13d641"]],"padding": [[[":pressed","[TOGGLE"],"1204d377"],[[":pressed","[PUSH"],"1204d377"],[["[BORDER"],"12046775"],[["[TOGGLE"],"12046775"],[["[PUSH"],"12046775"],[[],"1204d3a5"]],"spacing": [[["[RADIO"],"bc"],[["[CHECK"],"bc"],[[],"5e"]],"font": [[[],"dee31769"]]},"CLabel":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"1204990b"]],"spacing": [[[],"eb"]],"opacity": [[[],"1.0"]]},"MenuItem-CheckIcon":{"background-image": [[[],"8ad6c431"]]},"Scale":{"background-color": [[[],"4004dc1c"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": []},"ToolTip":{"font": [[[],"dee31769"]],"color": [[[],"3fe41900"]],"background-color": [[[],"40047970"]],"cursor": [[[],"5c13d641"]],"background-image": [[[],"98f8b000"]],"opacity": [[[],"1.0"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120509bd"]],"padding": [[[],"1204990b"]],"animation": [[[],"4bbf0fbf"]]},"Slider-Thumb":{"background-color": [[[],"ffffffff"]],"border": [[[],"dc65e06a"]],"border-radius": [[[],"120460b2"]],"background-image": [[[":pressed","[VERTICAL"],"19d00025"],[[":pressed","[HORIZONTAL"],"20ce8000"],[["[VERTICAL"],"9f000025"],[["[HORIZONTAL"],"4f80000"],[[],"ffffffff"]]},"CCombo-List":{"border": [[[],"dfa628db"]],"border-radius": [[[],"1203f032"]]},"ScrollBar-DownButton-Icon":{"background-image": [[[":hover","[HORIZONTAL"],"560eb7d2"],[[":hover","[VERTICAL"],"d18fce93"],[["[HORIZONTAL"],"5b0e5823"],[["[VERTICAL"],"f7d3d3a4"],[[],"ffffffff"]]},"Display":{"rwt-shadow-color": [[[],"3ff98c68"]],"rwt-highlight-color": [[[],"4004dc1c"]],"rwt-darkshadow-color": [[[],"3ff53320"]],"rwt-lightshadow-color": [[[],"40006240"]],"rwt-thinborder-color": [[[],"3ffa2a74"]],"rwt-selectionmarker-color": [[[],"400457b0"]],"rwt-infobackground-color": [[[],"4004dc1c"]],"rwt-error-image": [[[],"e37249d4"]],"rwt-information-image": [[[],"38054a38"]],"rwt-working-image": [[[],"38054a38"]],"rwt-question-image": [[[],"343b3df0"]],"rwt-warning-image": [[[],"37dc5d28"]],"rwt-fontlist": [[[],"67d9a7ad"]],"background-image": [[[],"f281857c"]],"font": [[[],"dee31769"]]},"ToolBar":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color": [[[],"4004dc1c"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"1203f000"]],"spacing": [[[],"0"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"opacity": [[[],"1.0"]]},"ExpandBar":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dfa628db"],[[],"36a"]],"border-radius": []},"Button-RadioIcon":{"background-image": [[[":hover",":selected"],"6344dd7c"],[[":selected"],"7e94854d"],[[":hover"],"6356c615"],[[],"4a0314a6"]]},"DateTime-DropDownCalendar":{"border": [[[],"dc902e9c"]]},"DateTime-Field":{"color": [[[":selected"],"3fed9ae8"],[[],"3fed9ae8"]],"background-color": [[[":selected"],"3fff1408"],[[],"4004dc1c"]],"padding": [[[],"120462f3"]]},"DateTime-Calendar-NextYearButton":{"background-image": [[[":hover"],"5310f593"],[[],"5efe3aa4"]],"cursor": [[[],"5c13d641"]]},"ScrollBar-UpButton-Icon":{"background-image": [[[":hover","[HORIZONTAL"],"2ac7a085"],[[":hover","[VERTICAL"],"9ee04c5a"],[["[HORIZONTAL"],"44048316"],[["[VERTICAL"],"b3abf2ab"],[[],"ffffffff"]]},"DateTime-Calendar-NextMonthButton":{"background-image": [[[":hover"],"66f5543e"],[[],"528db58f"]],"cursor": [[[],"5c13d641"]]},"CCombo":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color": [[[],"40047970"]],"font": [[[],"dee311c5"]],"border": [[["[BORDER"],"dfa628db"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"],[[],"120460b2"]]},"ScrollBar-Thumb":{"background-color": [[[],"ffffffff"]],"border": [[[":pressed"],"98585c31"],[[],"de1b2d87"]],"border-radius": [[[],"1203f000"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]]},"CCombo-FocusIndicator":{"background-color": [[[],"ffffffff"]],"border": [[[],"2abfdf6d"]],"margin": [[[],"120450d9"]],"opacity": [[[],"1.0"]]},"Composite":{"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [],"background-color": [[["[BORDER"],"4004dc1c"],[[],"4004dc1c"]],"background-image": [[["[BORDER"],"ffffffff"],[[],"ffffffff"]],"padding": [[[],"1203f000"]],"opacity": [[[],"1.0"]]},"MenuItem-RadioIcon":{"background-image": [[[],"df7ccd2b"]]},"Slider-UpButton-Icon":{"background-image": [[[":hover","[VERTICAL"],"9ee04c5a"],[[":hover","[HORIZONTAL"],"dc3f170"],[["[VERTICAL"],"b3abf2ab"],[["[HORIZONTAL"],"6b1ea041"],[[],"ffffffff"]]},"Group-Label":{"border": [[[],"36a"]],"border-radius": [],"padding": [[[],"1203f6c4"]],"margin": [[[],"12043ca2"]],"background-color": [[[],"ffffffff"]],"color": [[[],"3fed1e38"]]},"Table-Checkbox":{"width": [[[],"3db"]],"margin": [[[],"1203f000"]],"background-image": [[[":checked",":grayed",":hover"],"bf9cb6"],[[":checked",":grayed"],"81f5b807"],[[":checked",":hover"],"42f14f4f"],[[":checked"],"6da39160"],[[":hover"],"9ae0f28"],[[],"b17f67f9"]]},"TreeItem":{"color": [[[":even",":linesvisible",":selected",":unfocused"],"4004dc1c"],[[":even",":linesvisible",":selected"],"4004dc1c"],[[":selected",":unfocused"],"4004dc1c"],[[":selected"],"4004dc1c"],[[":disabled"],"3ffeb15c"],[[],"ffffffff"]],"background-color": [[[":even",":linesvisible",":selected",":unfocused"],"3ff73db4"],[[":even",":linesvisible",":selected"],"3fe4aeec"],[[":even",":hover",":linesvisible"],"400034dc"],[[":even",":linesvisible"],"40035180"],[[":selected",":unfocused"],"3ff73db4"],[[":selected"],"3fe4aeec"],[[":hover"],"400034dc"],[[],"ffffffff"]],"text-decoration": [[[],"none"]]},"DateTime-DropDownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Slider":{"background-color": [[[],"40035180"]],"border": [[[],"36a"]],"border-radius": []},"Browser":{"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"DateTime-Calendar-Navbar":{"border": [[[],"36a"]],"border-radius": [],"color": [[[":disabled"],"3ffeb15c"],[[],"4004dc1c"]],"background-color": [[[],"3fe4ab90"]],"font": [[[],"c9a2fa1"]]},"CoolItem-Handle":{"border": [[[],"c411a436"]],"width": [[[],"bc"]]},"ToolTip-Message":{"color": [[[],"3fe41900"]],"font": [[[],"dee31769"]]},"ScrollBar-DownButton":{"background-color": [[[],"ffffffff"]],"border": [[[],"de1b2d87"]],"border-radius": [[["[VERTICAL"],"120498c0"],[["[HORIZONTAL"],"12049203"]],"background-image": [[[":pressed","[HORIZONTAL"],"20ce8000"],[[":hover","[HORIZONTAL"],"a7f80000"],[[":pressed","[VERTICAL"],"19d00025"],[[":hover","[VERTICAL"],"ff000025"],[["[HORIZONTAL"],"fbf80000"],[["[VERTICAL"],"7f000025"],[[],"ffffffff"]],"cursor": [[[],"5c13d641"]]},"List":{"font": [[[],"dee31769"]],"color": [[[":disabled"],"3ffeb15c"],[[],"3fed9ae8"]],"background-color": [[[],"4004dc1c"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]]},"DateTime-UpButton":{"background-image": [[[":pressed"],"9ece8000"],[[],"b7351000"]],"background-color": [[[],"ffffffff"]],"border": [[[],"36a"]],"border-radius": [[[],"1203f480"]],"cursor": [[[],"5c13d641"]],"width": [[[],"34e"]]},"Shell-DisplayOverlay":{"background-color": [[[],"3ff48b00"]],"background-image": [[[],"ffffffff"]],"animation": [[[],"4bbf04cf"]],"opacity": [[[],"0.2"]]},"Button-FocusIndicator":{"background-color": [[["[RADIO"],"ffffffff"],[["[CHECK"],"ffffffff"],[["[TOGGLE"],"ffffffff"],[["[PUSH"],"ffffffff"],[[],"4004dc1c"]],"border": [[["[RADIO"],"2abfdf6d"],[["[CHECK"],"2abfdf6d"],[["[TOGGLE"],"2abfdf6d"],[["[PUSH"],"2abfdf6d"],[["[BORDER"],"dc65e06a"],[[],"36a"]],"padding": [[["[RADIO"],"120460b1"],[["[CHECK"],"120460b1"],[["[TOGGLE"],"1203f000"],[["[PUSH"],"1203f000"],[[],"1203f000"]],"margin": [[["[RADIO"],"1203f000"],[["[CHECK"],"1203f000"],[["[TOGGLE"],"120460b2"],[["[PUSH"],"120460b2"]],"opacity": [[["[RADIO"],"1.0"],[["[CHECK"],"1.0"],[["[TOGGLE"],"1.0"],[["[PUSH"],"1.0"]]},"Sash-Handle":{"background-image": [[[],"ffffffff"]]},"CTabFolder-DropDownButton-Icon":{"background-image": [[[":hover"],"3d543571"],[[],"d2e3902"]]},"DateTime-Calendar-PreviousMonthButton":{"background-image": [[[":hover"],"2607b23b"],[[],"6e49954c"]],"cursor": [[[],"5c13d641"]]},"Spinner-DownButton-Icon":{"background-image": [[[":hover"],"9ee04c5a"],[[],"b3abf2ab"]]},"Table-Cell":{"padding": [[[],"1204cf0b"]],"spacing": [[[],"8d"]]},"Text":{"color": [[[":disabled"],"3ffeb15c"],[[],"3fed1e38"]],"background-color": [[[],"40047970"]],"font": [[[],"dee31769"]],"border": [[["[BORDER"],"dc65e06a"],[[],"36a"]],"border-radius": [[["[BORDER"],"120460b2"]],"background-image": [[[],"ffffffff"]],"padding": [[[],"120462f3"]]},"MenuItem":{"color": [[[":hover"],"3fed9ae8"],[[":disabled"],"3ffeb15c"],[[],"3fe41900"]],"background-color": [[[":hover"],"400034dc"],[[],"ffffffff"]],"background-image": [[[],"ffffffff"]],"opacity": [[[],"1.0"]]},"ProgressBar-Indicator":{"background-color": [[[":error"],"3ffd1540"],[[":paused"],"40024a4c"],[[],"3fe4aeec"]],"background-image": [[[],"ffffffff"]],"border": [[[],"36a"]],"opacity": [[[],"1.0"]]},"ExpandItem":{"border": [[[],"dfa628db"]],"border-radius": []},"CCombo-Field":{"padding": [[[],"120462f3"]]},"Shell-MaxButton":{"margin": [[[":inactive"],"1203fd80"],[[],"1203fd80"]],"background-image": [[[":hover",":inactive",":maximized"],"af6f6914"],[[":inactive",":maximized"],"b215a2e5"],[[":hover",":maximized"],"af6f6914"],[[":hover",":inactive"],"7f9d166a"],[[":maximized"],"b215a2e5"],[[":inactive"],"ec0d88bb"],[[":hover"],"7f9d166a"],[[],"ec0d88bb"]]},"Spinner-UpButton-Icon":{"background-image": [[[":hover"],"d18fce93"],[[],"f7d3d3a4"]]}},true); > delete ts; > qx.io.Alias.getInstance().add( "static", "../org.eclipse.rap.rwt.q07/js/resource/static" ); > qx.io.Alias.getInstance().add( "org.eclipse.swt", "../org.eclipse.rap.rwt.q07/js/resource" ); >\ No newline at end of file >#P org.eclipse.rap.rwt.test >Index: src/org/eclipse/rwt/internal/theme/QxColor_Test.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.test/src/org/eclipse/rwt/internal/theme/QxColor_Test.java,v >retrieving revision 1.7 >diff -u -r1.7 QxColor_Test.java >--- src/org/eclipse/rwt/internal/theme/QxColor_Test.java 8 Oct 2010 13:14:21 -0000 1.7 >+++ src/org/eclipse/rwt/internal/theme/QxColor_Test.java 28 Mar 2011 15:10:19 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2007, 2009 Innoopract Informationssysteme GmbH. >+ * Copyright (c) 2007, 2011 Innoopract Informationssysteme GmbH. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -39,12 +39,30 @@ > } > } > >+ public void testIllegalArguments_OutOfRangeAlpha() { >+ try { >+ QxColor.valueOf( "1, 2, 3, 1.01" ); >+ fail( "Exception expected" ); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testIllegalArguments_NegativeAlpha() { >+ try { >+ QxColor.valueOf( "1, 2, 3, -0.01" ); >+ fail( "Exception expected" ); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ > public void test6HexNotation() { > QxColor color1 = QxColor.valueOf( "#0023ff" ); > assertEquals( 0, color1.red ); > assertEquals( 35, color1.green ); > assertEquals( 255, color1.blue ); >- assertFalse( color1.transparent ); >+ assertEquals( 1f, color1.alpha, 0 ); > QxColor color2 = QxColor.valueOf( "#efeFEF" ); > assertEquals( 239, color2.red ); > assertEquals( 239, color2.green ); >@@ -56,7 +74,7 @@ > assertEquals( 0, color1.red ); > assertEquals( 51, color1.green ); > assertEquals( 255, color1.blue ); >- assertFalse( color1.transparent ); >+ assertEquals( 1f, color1.alpha, 0 ); > QxColor color2 = QxColor.valueOf( "#ccc" ); > assertEquals( 204, color2.red ); > assertEquals( 204, color2.green ); >@@ -69,7 +87,7 @@ > assertEquals( 255, color1.red ); > assertEquals( 0, color1.green ); > assertEquals( 0, color1.blue ); >- assertFalse( color1.transparent ); >+ assertEquals( 1f, color1.alpha, 0 ); > QxColor color2 = QxColor.valueOf( "blue" ); > assertEquals( 0, color2.red ); > assertEquals( 0, color2.green ); >@@ -81,11 +99,19 @@ > assertEquals( 100, color.red ); > assertEquals( 23, color.green ); > assertEquals( 42, color.blue ); >- assertFalse( color.transparent ); >+ assertEquals( 1f, color.alpha, 0 ); >+ } >+ >+ public void testCommaSeparatedValues_WithAlpha() { >+ QxColor color = QxColor.valueOf( "100, 23, 42, 0.5" ); >+ assertEquals( 100, color.red ); >+ assertEquals( 23, color.green ); >+ assertEquals( 42, color.blue ); >+ assertEquals( 0.5, color.alpha, 0 ); > } > > public void testTransparent() { >- assertTrue( QxColor.TRANSPARENT.transparent ); >+ assertTrue( QxColor.TRANSPARENT.isTransparent() ); > } > > public void testShared() { >@@ -100,13 +126,28 @@ > > public void testToString() { > QxColor color = QxColor.valueOf( "100, 23, 42" ); >- assertEquals( "QxColor{ 100, 23, 42 }", color.toString() ); >+ assertEquals( "QxColor{ 100, 23, 42, 1.0 }", color.toString() ); >+ } >+ >+ public void testToString_WithAlpha() { >+ QxColor color = QxColor.valueOf( "100, 23, 42, 0.5" ); >+ assertEquals( "QxColor{ 100, 23, 42, 0.5 }", color.toString() ); > } > > public void testDefaultString() { > QxColor color = QxColor.valueOf( "100, 23, 42" ); > assertEquals( "#64172a", color.toDefaultString() ); > } >+ >+ public void testDefaultString_Transparent() { >+ QxColor color = QxColor.valueOf( "100, 23, 42, 0" ); >+ assertEquals( "transparent", color.toDefaultString() ); >+ } >+ >+ public void testDefaultString_WithAlpha() { >+ QxColor color = QxColor.valueOf( "100, 23, 42, 0.5" ); >+ assertEquals( "rgba(100,23,42,0.5)", color.toDefaultString() ); >+ } > > public void testWithTurkishLocale() { > Locale originalLocale = Locale.getDefault(); >Index: src/org/eclipse/rwt/internal/theme/QxShadow_Test.java >=================================================================== >RCS file: src/org/eclipse/rwt/internal/theme/QxShadow_Test.java >diff -N src/org/eclipse/rwt/internal/theme/QxShadow_Test.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/rwt/internal/theme/QxShadow_Test.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,113 @@ >+/******************************************************************************* >+ * Copyright (c) 2011 EclipseSource and others. All rights reserved. >+ * This program and the accompanying materials are made available under the >+ * terms of the Eclipse Public License v1.0 which accompanies this distribution, >+ * and is available at http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * EclipseSource - initial API and implementation >+ ******************************************************************************/ >+package org.eclipse.rwt.internal.theme; >+ >+import junit.framework.TestCase; >+ >+ >+public class QxShadow_Test extends TestCase { >+ >+ public void testIllegalArguments_Inset() { >+ try { >+ QxShadow.create( true, 10, 10, 0, 0, QxColor.BLACK ); >+ fail( "Exception expected" ); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testIllegalArguments_NegativeBlur() { >+ try { >+ QxShadow.create( false, 10, 10, -10, 0, QxColor.BLACK ); >+ fail( "Exception expected" ); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testIllegalArguments_SpreadNotZero() { >+ try { >+ QxShadow.create( false, 10, 10, 0, 10, QxColor.BLACK ); >+ fail( "Exception expected" ); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testIllegalArguments_NullColor() { >+ try { >+ QxShadow.create( false, 10, 10, 0, 0, null ); >+ fail( "Exception expected" ); >+ } catch( NullPointerException e ) { >+ // expected >+ } >+ } >+ >+ public void testCreate_WithoutOpacity() { >+ QxShadow shadow = QxShadow.create( false, 10, 10, 0, 0, QxColor.BLACK ); >+ assertNotNull( shadow ); >+ assertFalse( shadow.inset ); >+ assertEquals( 10, shadow.offsetX ); >+ assertEquals( 10, shadow.offsetY ); >+ assertEquals( 0, shadow.blur ); >+ assertEquals( 0, shadow.spread ); >+ assertEquals( QxColor.BLACK.toDefaultString(), shadow.color ); >+ assertEquals( 1f, shadow.opacity, 0 ); >+ } >+ >+ public void testCreate_WithOpacity() { >+ QxColor color = QxColor.valueOf( "0, 0, 0, 0.5" ); >+ QxShadow shadow = QxShadow.create( false, 10, 10, 0, 0, color ); >+ assertNotNull( shadow ); >+ assertFalse( shadow.inset ); >+ assertEquals( 10, shadow.offsetX ); >+ assertEquals( 10, shadow.offsetY ); >+ assertEquals( 0, shadow.blur ); >+ assertEquals( 0, shadow.spread ); >+ assertEquals( QxColor.BLACK.toDefaultString(), shadow.color ); >+ assertEquals( 0.5, shadow.opacity, 0 ); >+ } >+ >+ public void testNoneShadow() { >+ QxShadow shadow = QxShadow.NONE; >+ assertFalse( shadow.inset ); >+ assertEquals( 0, shadow.offsetX ); >+ assertEquals( 0, shadow.offsetY ); >+ assertEquals( 0, shadow.blur ); >+ assertEquals( 0, shadow.spread ); >+ assertNull( shadow.color ); >+ assertEquals( 0, shadow.opacity, 0 ); >+ } >+ >+ public void testToString() { >+ QxShadow shadow = QxShadow.create( false, 10, 10, 0, 0, QxColor.BLACK ); >+ String expected = "QxShadow{ false, 10, 10, 0, 0, #000000, 1.0 }"; >+ assertEquals( expected, shadow.toString() ); >+ } >+ >+ public void testToDefaultString() { >+ QxColor color = QxColor.valueOf( "0, 0, 0, 0.5" ); >+ QxShadow shadow = QxShadow.create( false, 10, 10, 0, 0, color ); >+ String expected = "10px 10px 0px 0px rgba( 0, 0, 0, 0.5 )"; >+ assertEquals( expected, shadow.toDefaultString() ); >+ } >+ >+ public void testToDefaultString_NoneShadow() { >+ QxShadow shadow = QxShadow.NONE; >+ String expected = "none"; >+ assertEquals( expected, shadow.toDefaultString() ); >+ } >+ >+ public void testEquals() { >+ QxShadow shadow1 = QxShadow.create( false, 10, 10, 0, 0, QxColor.BLACK ); >+ QxShadow shadow2 = QxShadow.create( false, 10, 10, 0, 0, QxColor.BLACK ); >+ assertTrue( shadow1.equals( shadow2 ) ); >+ } >+} >Index: src/org/eclipse/rwt/internal/theme/ThemeStoreWriter_Test.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.test/src/org/eclipse/rwt/internal/theme/ThemeStoreWriter_Test.java,v >retrieving revision 1.5 >diff -u -r1.5 ThemeStoreWriter_Test.java >--- src/org/eclipse/rwt/internal/theme/ThemeStoreWriter_Test.java 19 Nov 2010 17:11:04 -0000 1.5 >+++ src/org/eclipse/rwt/internal/theme/ThemeStoreWriter_Test.java 28 Mar 2011 15:10:19 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2009, 2010 EclipseSource and others. All rights reserved. >+ * Copyright (c) 2009, 2011 EclipseSource and others. All rights reserved. > * This program and the accompanying materials are made available under the > * terms of the Eclipse Public License v1.0 which accompanies this distribution, > * and is available at http://www.eclipse.org/legal/epl-v10.html >@@ -45,7 +45,8 @@ > expected = "\"cd56ce7d\": [ \"cd56ce7d\", 50, 100 ]"; > assertTrue( output.indexOf( expected ) != -1 ); > // conditional colors >- expected = "\"color\": [ [ [ \"[BORDER\" ], \"ff\" ], [ [], \"0\" ] ]"; >+ expected = "\"color\": [ [ [ \"[BORDER\" ], " >+ + "\"400339c0\" ], [ [], \"3fe41900\" ] ]"; > assertTrue( output.indexOf( expected ) != -1 ); > // conditional background-images > expected = "\"background-image\": " >@@ -72,7 +73,7 @@ > + "\"slideIn\": [ 2000, \"easeIn\" ],\n" > + "\"slideOut\": [ 2000, \"easeOut\" ]\n" > + "}\n" >- + "}\n"; >+ + "},\n"; > assertTrue( output.indexOf( expected ) != -1 ); > expected = "\"Menu\": {\n" > + "\"animation\": [ [ [], \"2e5f3d63\" ] ]\n" >@@ -146,6 +147,30 @@ > assertTrue( output.indexOf( expected ) != -1 ); > } > >+ public void testWriteShadow() throws Exception { >+ ThemeCssElement element = new ThemeCssElement( "Shell" ); >+ element.addProperty( "box-shadow" ); >+ IThemeCssElement[] elements = new IThemeCssElement[] { element }; >+ ThemeStoreWriter storeWriter = new ThemeStoreWriter( elements ); >+ String themeId = "myTheme"; >+ String cssCode >+ = "Shell { box-shadow: 10px 10px 3px 0 rgba( 0, 0, 0, 0.5 ); }\n"; >+ ResourceLoader loader >+ = ThemeTestUtil.createResourceLoader( Fixture.class ); >+ ThemeTestUtil.registerCustomTheme( themeId, cssCode, loader ); >+ Theme theme = ThemeManager.getInstance().getTheme( themeId ); >+ storeWriter.addTheme( theme, true ); >+ String output = storeWriter.createJs(); >+ String expected = "\"shadows\": {\n" >+ + "\"2aedfabd\": [ false, 10, 10, 3, 0, \"#000000\", 0.5 ]\n" >+ + "}\n"; >+ assertTrue( output.indexOf( expected ) != -1 ); >+ expected = "\"Shell\": {\n" >+ + "\"box-shadow\": [ [ [], \"2aedfabd\" ] ]\n" >+ + "}"; >+ assertTrue( output.indexOf( expected ) != -1 ); >+ } >+ > protected void setUp() throws Exception { > Fixture.setUp(); > Fixture.fakeNewRequest(); >Index: src/org/eclipse/rwt/internal/theme/css/PropertyResolver_Test.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.test/src/org/eclipse/rwt/internal/theme/css/PropertyResolver_Test.java,v >retrieving revision 1.20 >diff -u -r1.20 PropertyResolver_Test.java >--- src/org/eclipse/rwt/internal/theme/css/PropertyResolver_Test.java 3 Dec 2010 07:55:50 -0000 1.20 >+++ src/org/eclipse/rwt/internal/theme/css/PropertyResolver_Test.java 28 Mar 2011 15:10:20 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2008, 2010 Innoopract Informationssysteme GmbH. >+ * Copyright (c) 2008, 2011 Innoopract Informationssysteme GmbH. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -77,6 +77,78 @@ > } > } > >+ public void testColorWithAlpha() throws Exception { >+ String input = "rgba( 1, 2, 3, 0.25 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.red ); >+ assertEquals( 2, result.green ); >+ assertEquals( 3, result.blue ); >+ assertEquals( 0.25, result.alpha, 0 ); >+ } >+ >+ public void testColorWithAlpha_Percents() throws Exception { >+ String input = "rgba( 0%, 50%, 100%, 0.25 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 0, result.red ); >+ assertEquals( 127, result.green ); >+ assertEquals( 255, result.blue ); >+ assertEquals( 0.25, result.alpha, 0 ); >+ } >+ >+ public void testColorWithAlpha_NoTransparency() throws Exception { >+ String input = "rgba( 0, 0, 0, 1 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertSame( QxColor.BLACK, result ); >+ } >+ >+ public void testColorWithAlpha_NormalizeNegativeAlpha() throws Exception { >+ String input = "rgba( 1, 2, 3, -0.1 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.red ); >+ assertEquals( 2, result.green ); >+ assertEquals( 3, result.blue ); >+ assertEquals( 0f, result.alpha, 0 ); >+ } >+ >+ public void testColorWithAlpha_NormalizePositiveAlpha() throws Exception { >+ String input = "rgba( 1, 2, 3, 1.1 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.red ); >+ assertEquals( 2, result.green ); >+ assertEquals( 3, result.blue ); >+ assertEquals( 1f, result.alpha, 0 ); >+ } >+ >+ public void testColorWithAlpha_NormalizeColorValue() throws Exception { >+ String input = "rgba( -10, 127, 300, 0.25 )"; >+ QxColor result >+ = PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 0, result.red ); >+ assertEquals( 127, result.green ); >+ assertEquals( 255, result.blue ); >+ assertEquals( 0.25, result.alpha, 0 ); >+ } >+ >+ public void testColorWithAlpha_MixedValues() throws Exception { >+ String input = "rgba( 0%, 50, 100, 0.25 )"; >+ try { >+ PropertyResolver.readColorWithAlpha( parseProperty( input ) ); >+ fail(); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ > public void testDimension() throws Exception { > QxDimension zero = PropertyResolver.readDimension( parseProperty( "0px" ) ); > assertNotNull( zero ); >@@ -652,6 +724,119 @@ > } > } > >+ public void testShadow_XYOffsetOnlyNotation() throws Exception { >+ String input = "1px 2px"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 0, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#000000", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_OffsetXYBlurNotation() throws Exception { >+ String input = "1px 2px 3px"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 3, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#000000", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_XYOffsetBlurSpreadNotation() throws Exception { >+ String input = "1px 2px 0 0"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 0, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#000000", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_FullNotation_NamedColor() throws Exception { >+ String input = "1px 2px 0px 0 red"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 0, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#ff0000", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_FullNotation_HexColor() throws Exception { >+ String input = "1px 2px 0px 0 #FF0000"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 0, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#ff0000", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_FullNotation_RgbColor() throws Exception { >+ String input = "1px 2px 3px 0 rgb( 1, 2, 3 )"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 3, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#010203", result.color ); >+ assertEquals( 1f, result.opacity, 0 ); >+ } >+ >+ public void testShadow_FullNotation_RgbaColor() throws Exception { >+ String input = "1px 2px 0px 0 rgba( 1, 2, 3, 0.25 )"; >+ QxShadow result = PropertyResolver.readShadow( parseProperty( input ) ); >+ assertNotNull( result ); >+ assertEquals( 1, result.offsetX ); >+ assertEquals( 2, result.offsetY ); >+ assertEquals( 0, result.blur ); >+ assertEquals( 0, result.spread ); >+ assertEquals( "#010203", result.color ); >+ assertEquals( 0.25, result.opacity, 0 ); >+ } >+ >+ public void testShadow_WithoutOffsetY() throws Exception { >+ try { >+ PropertyResolver.readShadow( parseProperty( "1px" ) ); >+ fail(); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testShadow_MissingRgbaParameters() throws Exception { >+ String input = "1px 2px 0px 0 rgba( 1, 2, 0.25 )"; >+ try { >+ PropertyResolver.readShadow( parseProperty( input ) ); >+ fail(); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ >+ public void testShadow_NonZeroSpread() throws Exception { >+ String input = "1px 2px 3px 3px rgba( 1, 2, 3, 0.25 )"; >+ try { >+ PropertyResolver.readShadow( parseProperty( input ) ); >+ fail(); >+ } catch( IllegalArgumentException e ) { >+ // expected >+ } >+ } >+ > public void testIsColorProperty() { > assertFalse( PropertyResolver.isColorProperty( "border" ) ); > assertTrue( PropertyResolver.isColorProperty( "color" ) ); >@@ -685,6 +870,10 @@ > assertTrue( PropertyResolver.isAnimationProperty( "animation" ) ); > } > >+ public void testIsShadowProperty() { >+ assertTrue( PropertyResolver.isShadowProperty( "box-shadow" ) ); >+ } >+ > public void testResolveProperty() throws Exception { > LexicalUnit unit = parseProperty( "white" ); > QxType value = PropertyResolver.resolveProperty( "color", unit, null ); >#P org.eclipse.rap.rwt.themes.test >Index: src/org/eclipse/rap/rwt/themes/test/business/Shell.test.css >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.themes.test/src/org/eclipse/rap/rwt/themes/test/business/Shell.test.css,v >retrieving revision 1.4 >diff -u -r1.4 Shell.test.css >--- src/org/eclipse/rap/rwt/themes/test/business/Shell.test.css 27 Sep 2010 12:24:01 -0000 1.4 >+++ src/org/eclipse/rap/rwt/themes/test/business/Shell.test.css 28 Mar 2011 15:10:20 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >-* Copyright (c) 2010 EclipseSource and others. All rights reserved. This >+* Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. This > * program and the accompanying materials are made available under the terms of > * the Eclipse Public License v1.0 which accompanies this distribution, and is > * available at http://www.eclipse.org/legal/epl-v10.html >@@ -30,6 +30,7 @@ > > Shell { > background-color: white; >+ box-shadow: none; > } > > Shell-DisplayOverlay { >@@ -44,10 +45,12 @@ > border: 2px solid #005092; > border-radius: 5px 5px 0px 0px; > padding: 5px; >+ box-shadow: 5px 5px 3px rgba( 0, 0, 0, 0.5 ); > } > > Shell[BORDER]:inactive, Shell[TITLE]:inactive { > border: 2px solid #4b4b4b; >+ box-shadow: none; > } > > Shell-CloseButton { >Index: src/org/eclipse/rap/rwt/themes/test/fancy/Shell.test.css >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.themes.test/src/org/eclipse/rap/rwt/themes/test/fancy/Shell.test.css,v >retrieving revision 1.3 >diff -u -r1.3 Shell.test.css >--- src/org/eclipse/rap/rwt/themes/test/fancy/Shell.test.css 27 Sep 2010 12:24:01 -0000 1.3 >+++ src/org/eclipse/rap/rwt/themes/test/fancy/Shell.test.css 28 Mar 2011 15:10:20 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >-* Copyright (c) 2010 EclipseSource and others. All rights reserved. This >+* Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. This > * program and the accompanying materials are made available under the terms of > * the Eclipse Public License v1.0 which accompanies this distribution, and is > * available at http://www.eclipse.org/legal/epl-v10.html >@@ -30,6 +30,7 @@ > > Shell { > background-color: white; >+ box-shadow: none; > } > > Shell-DisplayOverlay { >@@ -44,11 +45,13 @@ > border: 2px solid #99c92c; > border-radius: 6px; > padding: 5px; >+ box-shadow: 5px 5px 3px rgba( 0, 0, 0, 0.5 ); > } > > Shell[BORDER]:inactive, Shell[TITLE]:inactive { > background-color: white; > border: 2px solid #4b4b4b; >+ box-shadow: none; > } > > Shell-CloseButton { >Index: src/org/eclipse/rap/rwt/themes/test/rwtdefault/Shell.test.css >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.rap/runtime.rwt.test/org.eclipse.rap.rwt.themes.test/src/org/eclipse/rap/rwt/themes/test/rwtdefault/Shell.test.css,v >retrieving revision 1.3 >diff -u -r1.3 Shell.test.css >--- src/org/eclipse/rap/rwt/themes/test/rwtdefault/Shell.test.css 3 Mar 2011 08:35:31 -0000 1.3 >+++ src/org/eclipse/rap/rwt/themes/test/rwtdefault/Shell.test.css 28 Mar 2011 15:10:20 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >-* Copyright (c) 2010 EclipseSource and others. All rights reserved. This >+* Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. This > * program and the accompanying materials are made available under the terms of > * the Eclipse Public License v1.0 which accompanies this distribution, and is > * available at http://www.eclipse.org/legal/epl-v10.html >@@ -15,6 +15,7 @@ > padding: 0px; > background-image: none; > opacity: 1; >+ box-shadow: none; > } > > Shell[TITLE], Shell[BORDER] { >@@ -22,10 +23,12 @@ > border: 2px solid #005092; > border-radius: 5px 5px 0px 0px; > padding: 5px; >+ box-shadow: 5px 5px 3px rgba( 0, 0, 0, 0.5 ); > } > > Shell[BORDER]:inactive, Shell[TITLE]:inactive { > border: 2px solid #4b4b4b; >+ box-shadow: none; > } > > Shell:maximized, Shell:maximized:inactive {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 324436
:
189536
|
189673
|
189674
| 192013