diff --git a/content/html/style/src/nsCSSDeclaration.cpp b/content/html/style/src/nsCSSDeclaration.cpp
index 8fe5137809b8..1d4cfc12261f 100644
--- a/content/html/style/src/nsCSSDeclaration.cpp
+++ b/content/html/style/src/nsCSSDeclaration.cpp
@@ -389,6 +389,7 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
+ mOpacity.AppendToString(buffer, PROP_OPACITY);
fputs(buffer, out);
}
@@ -781,6 +782,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull == mColor) {
mColor = new nsCSSColor();
}
@@ -796,6 +798,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
+ case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
else {
@@ -1138,6 +1141,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull != mColor) {
switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break;
@@ -1150,6 +1154,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
+ case PROP_OPACITY: aValue = mColor->mOpacity; break;
}
}
else {
diff --git a/content/html/style/src/nsCSSParser.cpp b/content/html/style/src/nsCSSParser.cpp
index 2c23dbcfdac4..d3fa2b38c097 100644
--- a/content/html/style/src/nsCSSParser.cpp
+++ b/content/html/style/src/nsCSSParser.cpp
@@ -1099,6 +1099,7 @@ CSSParserImpl::ParseDeclaration(PRInt32* aErrorCode,
#define VARIANT_CK (VARIANT_COLOR | VARIANT_KEYWORD)
#define VARIANT_C VARIANT_COLOR
#define VARIANT_UK (VARIANT_URL | VARIANT_KEYWORD)
+#define VARIANT_HPN (VARIANT_INHERIT | VARIANT_PERCENT | VARIANT_NUMBER)
// Keyword id tables for variant/enum parsing
static PRInt32 kBackgroundAttachmentKTable[] = {
@@ -1685,6 +1686,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32* aErrorCode,
case PROP_PADDING_RIGHT:
case PROP_PADDING_TOP:
return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_LP, nsnull);
+ case PROP_OPACITY:
+ return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_HPN, nsnull);
case PROP_OVERFLOW:
return ParseEnum(aErrorCode, aDeclaration, aName, kOverflowKTable);
case PROP_POSITION:
diff --git a/content/html/style/src/nsCSSStruct.cpp b/content/html/style/src/nsCSSStruct.cpp
index 8fe5137809b8..1d4cfc12261f 100644
--- a/content/html/style/src/nsCSSStruct.cpp
+++ b/content/html/style/src/nsCSSStruct.cpp
@@ -389,6 +389,7 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
+ mOpacity.AppendToString(buffer, PROP_OPACITY);
fputs(buffer, out);
}
@@ -781,6 +782,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull == mColor) {
mColor = new nsCSSColor();
}
@@ -796,6 +798,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
+ case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
else {
@@ -1138,6 +1141,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull != mColor) {
switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break;
@@ -1150,6 +1154,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
+ case PROP_OPACITY: aValue = mColor->mOpacity; break;
}
}
else {
diff --git a/content/html/style/src/nsCSSStyleRule.cpp b/content/html/style/src/nsCSSStyleRule.cpp
index 584cc8c30a8c..e4c66be6dd82 100644
--- a/content/html/style/src/nsCSSStyleRule.cpp
+++ b/content/html/style/src/nsCSSStyleRule.cpp
@@ -843,6 +843,25 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
color->mBackgroundFlags &= ~NS_STYLE_BG_Y_POSITION_PERCENT;
}
+ // opacity: factor, percent, enum
+ if (ourColor->mOpacity.GetUnit() == eCSSUnit_Percent) {
+ color->mOpacity.SetPercentValue(ourColor->mOpacity.GetPercentValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Number) {
+ color->mOpacity.SetFactorValue(ourColor->mOpacity.GetFloatValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Enumerated) {
+ // Only enum value is inherit
+ nsStyleColor* parentColor = color;
+ nsIStyleContext* parentContext = aContext->GetParent();
+ if (nsnull != parentContext) {
+ parentColor = (nsStyleColor*)parentContext->GetData(eStyleStruct_Color);
+ color->mOpacity = parentColor->mOpacity;
+ NS_RELEASE(parentContext);
+ }
+
+ }
+
// XXX: NYI nsCSSValue mBackFilter;
}
}
diff --git a/content/html/style/src/nsICSSDeclaration.h b/content/html/style/src/nsICSSDeclaration.h
index 827fe2aa9f84..b662854f001d 100644
--- a/content/html/style/src/nsICSSDeclaration.h
+++ b/content/html/style/src/nsICSSDeclaration.h
@@ -230,6 +230,7 @@ struct nsCSSColor : public nsCSSStruct {
nsCSSValue mBackFilter;
nsCSSValue mCursor;
nsCSSValue mCursorImage;
+ nsCSSValue mOpacity;
};
struct nsCSSText : public nsCSSStruct {
diff --git a/layout/html/style/src/nsCSSDeclaration.cpp b/layout/html/style/src/nsCSSDeclaration.cpp
index 8fe5137809b8..1d4cfc12261f 100644
--- a/layout/html/style/src/nsCSSDeclaration.cpp
+++ b/layout/html/style/src/nsCSSDeclaration.cpp
@@ -389,6 +389,7 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
+ mOpacity.AppendToString(buffer, PROP_OPACITY);
fputs(buffer, out);
}
@@ -781,6 +782,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull == mColor) {
mColor = new nsCSSColor();
}
@@ -796,6 +798,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
+ case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
else {
@@ -1138,6 +1141,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull != mColor) {
switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break;
@@ -1150,6 +1154,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
+ case PROP_OPACITY: aValue = mColor->mOpacity; break;
}
}
else {
diff --git a/layout/html/style/src/nsCSSParser.cpp b/layout/html/style/src/nsCSSParser.cpp
index 2c23dbcfdac4..d3fa2b38c097 100644
--- a/layout/html/style/src/nsCSSParser.cpp
+++ b/layout/html/style/src/nsCSSParser.cpp
@@ -1099,6 +1099,7 @@ CSSParserImpl::ParseDeclaration(PRInt32* aErrorCode,
#define VARIANT_CK (VARIANT_COLOR | VARIANT_KEYWORD)
#define VARIANT_C VARIANT_COLOR
#define VARIANT_UK (VARIANT_URL | VARIANT_KEYWORD)
+#define VARIANT_HPN (VARIANT_INHERIT | VARIANT_PERCENT | VARIANT_NUMBER)
// Keyword id tables for variant/enum parsing
static PRInt32 kBackgroundAttachmentKTable[] = {
@@ -1685,6 +1686,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32* aErrorCode,
case PROP_PADDING_RIGHT:
case PROP_PADDING_TOP:
return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_LP, nsnull);
+ case PROP_OPACITY:
+ return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_HPN, nsnull);
case PROP_OVERFLOW:
return ParseEnum(aErrorCode, aDeclaration, aName, kOverflowKTable);
case PROP_POSITION:
diff --git a/layout/html/style/src/nsCSSStyleRule.cpp b/layout/html/style/src/nsCSSStyleRule.cpp
index 584cc8c30a8c..e4c66be6dd82 100644
--- a/layout/html/style/src/nsCSSStyleRule.cpp
+++ b/layout/html/style/src/nsCSSStyleRule.cpp
@@ -843,6 +843,25 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
color->mBackgroundFlags &= ~NS_STYLE_BG_Y_POSITION_PERCENT;
}
+ // opacity: factor, percent, enum
+ if (ourColor->mOpacity.GetUnit() == eCSSUnit_Percent) {
+ color->mOpacity.SetPercentValue(ourColor->mOpacity.GetPercentValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Number) {
+ color->mOpacity.SetFactorValue(ourColor->mOpacity.GetFloatValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Enumerated) {
+ // Only enum value is inherit
+ nsStyleColor* parentColor = color;
+ nsIStyleContext* parentContext = aContext->GetParent();
+ if (nsnull != parentContext) {
+ parentColor = (nsStyleColor*)parentContext->GetData(eStyleStruct_Color);
+ color->mOpacity = parentColor->mOpacity;
+ NS_RELEASE(parentContext);
+ }
+
+ }
+
// XXX: NYI nsCSSValue mBackFilter;
}
}
diff --git a/layout/html/style/src/nsICSSDeclaration.h b/layout/html/style/src/nsICSSDeclaration.h
index 827fe2aa9f84..b662854f001d 100644
--- a/layout/html/style/src/nsICSSDeclaration.h
+++ b/layout/html/style/src/nsICSSDeclaration.h
@@ -230,6 +230,7 @@ struct nsCSSColor : public nsCSSStruct {
nsCSSValue mBackFilter;
nsCSSValue mCursor;
nsCSSValue mCursorImage;
+ nsCSSValue mOpacity;
};
struct nsCSSText : public nsCSSStruct {
diff --git a/layout/style/nsCSSDeclaration.cpp b/layout/style/nsCSSDeclaration.cpp
index 8fe5137809b8..1d4cfc12261f 100644
--- a/layout/style/nsCSSDeclaration.cpp
+++ b/layout/style/nsCSSDeclaration.cpp
@@ -389,6 +389,7 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
+ mOpacity.AppendToString(buffer, PROP_OPACITY);
fputs(buffer, out);
}
@@ -781,6 +782,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull == mColor) {
mColor = new nsCSSColor();
}
@@ -796,6 +798,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
+ case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
else {
@@ -1138,6 +1141,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull != mColor) {
switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break;
@@ -1150,6 +1154,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
+ case PROP_OPACITY: aValue = mColor->mOpacity; break;
}
}
else {
diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp
index 2c23dbcfdac4..d3fa2b38c097 100644
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -1099,6 +1099,7 @@ CSSParserImpl::ParseDeclaration(PRInt32* aErrorCode,
#define VARIANT_CK (VARIANT_COLOR | VARIANT_KEYWORD)
#define VARIANT_C VARIANT_COLOR
#define VARIANT_UK (VARIANT_URL | VARIANT_KEYWORD)
+#define VARIANT_HPN (VARIANT_INHERIT | VARIANT_PERCENT | VARIANT_NUMBER)
// Keyword id tables for variant/enum parsing
static PRInt32 kBackgroundAttachmentKTable[] = {
@@ -1685,6 +1686,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32* aErrorCode,
case PROP_PADDING_RIGHT:
case PROP_PADDING_TOP:
return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_LP, nsnull);
+ case PROP_OPACITY:
+ return ParseVariant(aErrorCode, aDeclaration, aName, VARIANT_HPN, nsnull);
case PROP_OVERFLOW:
return ParseEnum(aErrorCode, aDeclaration, aName, kOverflowKTable);
case PROP_POSITION:
diff --git a/layout/style/nsCSSStruct.cpp b/layout/style/nsCSSStruct.cpp
index 8fe5137809b8..1d4cfc12261f 100644
--- a/layout/style/nsCSSStruct.cpp
+++ b/layout/style/nsCSSStruct.cpp
@@ -389,6 +389,7 @@ void nsCSSColor::List(FILE* out, PRInt32 aIndent) const
mBackFilter.AppendToString(buffer, PROP_BACKGROUND_FILTER);
mCursor.AppendToString(buffer, PROP_CURSOR);
mCursorImage.AppendToString(buffer, PROP_CURSOR_IMAGE);
+ mOpacity.AppendToString(buffer, PROP_OPACITY);
fputs(buffer, out);
}
@@ -781,6 +782,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull == mColor) {
mColor = new nsCSSColor();
}
@@ -796,6 +798,7 @@ nsresult CSSDeclarationImpl::AddValue(PRInt32 aProperty, const nsCSSValue& aValu
case PROP_BACKGROUND_FILTER: mColor->mBackFilter = aValue; break;
case PROP_CURSOR: mColor->mCursor = aValue; break;
case PROP_CURSOR_IMAGE: mColor->mCursorImage = aValue; break;
+ case PROP_OPACITY: mColor->mOpacity = aValue; break;
}
}
else {
@@ -1138,6 +1141,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER:
case PROP_CURSOR:
case PROP_CURSOR_IMAGE:
+ case PROP_OPACITY:
if (nsnull != mColor) {
switch (aProperty) {
case PROP_COLOR: aValue = mColor->mColor; break;
@@ -1150,6 +1154,7 @@ nsresult CSSDeclarationImpl::GetValue(PRInt32 aProperty, nsCSSValue& aValue)
case PROP_BACKGROUND_FILTER: aValue = mColor->mBackFilter; break;
case PROP_CURSOR: aValue = mColor->mCursor; break;
case PROP_CURSOR_IMAGE: aValue = mColor->mCursorImage; break;
+ case PROP_OPACITY: aValue = mColor->mOpacity; break;
}
}
else {
diff --git a/layout/style/nsCSSStyleRule.cpp b/layout/style/nsCSSStyleRule.cpp
index 584cc8c30a8c..e4c66be6dd82 100644
--- a/layout/style/nsCSSStyleRule.cpp
+++ b/layout/style/nsCSSStyleRule.cpp
@@ -843,6 +843,25 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
color->mBackgroundFlags &= ~NS_STYLE_BG_Y_POSITION_PERCENT;
}
+ // opacity: factor, percent, enum
+ if (ourColor->mOpacity.GetUnit() == eCSSUnit_Percent) {
+ color->mOpacity.SetPercentValue(ourColor->mOpacity.GetPercentValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Number) {
+ color->mOpacity.SetFactorValue(ourColor->mOpacity.GetFloatValue());
+ }
+ else if (ourColor->mOpacity.GetUnit() == eCSSUnit_Enumerated) {
+ // Only enum value is inherit
+ nsStyleColor* parentColor = color;
+ nsIStyleContext* parentContext = aContext->GetParent();
+ if (nsnull != parentContext) {
+ parentColor = (nsStyleColor*)parentContext->GetData(eStyleStruct_Color);
+ color->mOpacity = parentColor->mOpacity;
+ NS_RELEASE(parentContext);
+ }
+
+ }
+
// XXX: NYI nsCSSValue mBackFilter;
}
}