Hello Nicolas,

Thanks for your patch. Stephane (who wrote that code): will you integrate it? Thanks,

Vincent.

Nicolas Hüppelshäuser wrote:
Hi!
I found that the css.engine.value.RectManager (Id: RectManager.java,v 1.1 of batik 1.5beta4) doesn't compute the four length values of the rectangle to pixels. Since the conversion the LengthManager does is very useful, I added this feature to the RectManager.

If this piece of code turns out to be useful to batik, please feel free to use it.

Nicolas.


------------------------------------------------------------------------

/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/

package org.apache.batik.css.engine.value;

import org.apache.batik.util.CSSConstants;

import org.apache.batik.css.engine.CSSEngine;
import org.apache.batik.css.engine.CSSStylableElement;
import org.apache.batik.css.engine.StyleMap;

import org.w3c.css.sac.LexicalUnit;

import org.w3c.dom.DOMException;
import org.w3c.dom.css.CSSPrimitiveValue;

/**
* This class provides a manager for the property with support for
* rect values.
*
* <small>Changed the class to resolve length values of the rectangle
* using the {@link
* org.apache.batik.css.engine.value.LengthManager}. <em><a
* href="mailto:[EMAIL PROTECTED]";>Nicolas
* Hueppelshaeuser</a></small>
*
* @author <a href="mailto:[EMAIL PROTECTED]";>Stephane Hillion</a>
* @version $Id: RectManager.java,v 1.1 2002/03/18 10:28:22 hillion Exp $
*/
public abstract class RectManager extends LengthManager {
/**
* Implements {@link ValueManager#createValue(LexicalUnit,CSSEngine)}.
*/
public Value createValue(LexicalUnit lu, CSSEngine engine)
throws DOMException {
switch (lu.getLexicalUnitType()) {
case LexicalUnit.SAC_FUNCTION:
if (!lu.getFunctionName().equalsIgnoreCase("rect")) {
break;
}
case LexicalUnit.SAC_RECT_FUNCTION:
lu = lu.getParameters();
Value top = createRectComponent(lu);
lu = lu.getNextLexicalUnit();
if (lu == null ||
lu.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) {
throw createMalformedRectDOMException();
}
lu = lu.getNextLexicalUnit();
Value right = createRectComponent(lu);
lu = lu.getNextLexicalUnit();
if (lu == null ||
lu.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) {
throw createMalformedRectDOMException();
}
lu = lu.getNextLexicalUnit();
Value bottom = createRectComponent(lu);
lu = lu.getNextLexicalUnit();
if (lu == null ||
lu.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) {
throw createMalformedRectDOMException();
}
lu = lu.getNextLexicalUnit();
Value left = createRectComponent(lu);
return new RectValue(top, right, bottom, left);
}
throw createMalformedRectDOMException();
}

private Value createRectComponent(LexicalUnit lu) throws DOMException {
switch (lu.getLexicalUnitType()) {
case LexicalUnit.SAC_IDENT:
if (lu.getStringValue().equalsIgnoreCase
(CSSConstants.CSS_AUTO_VALUE)) {
return ValueConstants.AUTO_VALUE;
}
break;
case LexicalUnit.SAC_EM:
return new FloatValue(CSSPrimitiveValue.CSS_EMS,
lu.getFloatValue());
case LexicalUnit.SAC_EX:
return new FloatValue(CSSPrimitiveValue.CSS_EXS,
lu.getFloatValue());
case LexicalUnit.SAC_PIXEL:
return new FloatValue(CSSPrimitiveValue.CSS_PX,
lu.getFloatValue());
case LexicalUnit.SAC_CENTIMETER:
return new FloatValue(CSSPrimitiveValue.CSS_CM,
lu.getFloatValue());
case LexicalUnit.SAC_MILLIMETER:
return new FloatValue(CSSPrimitiveValue.CSS_MM,
lu.getFloatValue());
case LexicalUnit.SAC_INCH:
return new FloatValue(CSSPrimitiveValue.CSS_IN,
lu.getFloatValue());
case LexicalUnit.SAC_POINT:
return new FloatValue(CSSPrimitiveValue.CSS_PT,
lu.getFloatValue());
case LexicalUnit.SAC_PICA:
return new FloatValue(CSSPrimitiveValue.CSS_PC,
lu.getFloatValue());
case LexicalUnit.SAC_INTEGER:
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
lu.getIntegerValue());
case LexicalUnit.SAC_REAL:
return new FloatValue(CSSPrimitiveValue.CSS_NUMBER,
lu.getFloatValue());
case LexicalUnit.SAC_PERCENTAGE:
return new FloatValue(CSSPrimitiveValue.CSS_PERCENTAGE,
lu.getFloatValue());
}
throw createMalformedRectDOMException();
}

private DOMException createMalformedRectDOMException() {
Object[] p = new Object[] { getPropertyName() };
String s = Messages.formatMessage("malformed.rect", p);
return new DOMException(DOMException.SYNTAX_ERR, s);
}

/**
* Implements {@link
* ValueManager#computeValue(CSSStylableElement,String,CSSEngine,int,StyleMap,Value)}.
*/
public Value computeValue( CSSStylableElement elt,
String pseudo,
CSSEngine engine,
int idx,
StyleMap sm,
Value value )
{
if ( !(value instanceof RectValue) ) {
return value;
}

Value right = ((RectValue) value).getRight();
Value left = ((RectValue) value).getLeft();
Value top = ((RectValue) value).getTop();
Value bottom = ((RectValue) value).getBottom();

Value computedRight = super.computeValue( elt, pseudo, engine, idx, sm,
right );
Value computedLeft = super.computeValue( elt, pseudo, engine, idx, sm,
left );
Value computedTop = super.computeValue( elt, pseudo, engine, idx, sm,
top );
Value computedBottom = super.computeValue( elt, pseudo, engine, idx, sm, bottom );

return new RectValue( computedTop, computedRight, computedBottom, computedLeft );
}

}



------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to