author | Alexander Surkov <surkov.alexander@gmail.com> |
Mon, 27 Feb 2012 23:43:39 +0900 | |
changeset 87843 | d9640938c8263eaa2cb42e21cf902ca34b4e3af4 |
parent 87842 | f91b74bfcb1fb8ef99bba7f11535c23364896b01 |
child 87844 | 75deec1f1a7bcd502b5679c15bd3b9cde6872b07 |
push id | 22160 |
push user | mbrubeck@mozilla.com |
push date | Tue, 28 Feb 2012 17:21:33 +0000 |
treeherder | mozilla-central@dde4e0089a18 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | tbsaunde |
bugs | 728907 |
milestone | 13.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/accessible/src/base/StyleInfo.cpp +++ b/accessible/src/base/StyleInfo.cpp @@ -105,8 +105,21 @@ void StyleInfo::Margin(css::Side aSide, nsAString& aValue) { aValue.Truncate(); nscoord coordVal = mElement->GetPrimaryFrame()->GetUsedMargin().Side(aSide); aValue.AppendFloat(nsPresContext::AppUnitsToFloatCSSPixels(coordVal)); aValue.AppendLiteral("px"); } + +void +StyleInfo::Format(const nscolor& aValue, nsString& aFormattedValue) +{ + // Combine the string like rgb(R, G, B) from nscolor. + aFormattedValue.AppendLiteral("rgb("); + aFormattedValue.AppendInt(NS_GET_R(aValue)); + aFormattedValue.AppendLiteral(", "); + aFormattedValue.AppendInt(NS_GET_G(aValue)); + aFormattedValue.AppendLiteral(", "); + aFormattedValue.AppendInt(NS_GET_B(aValue)); + aFormattedValue.Append(')'); +}
--- a/accessible/src/base/StyleInfo.h +++ b/accessible/src/base/StyleInfo.h @@ -55,16 +55,18 @@ public: void Display(nsAString& aValue); void TextAlign(nsAString& aValue); void TextIndent(nsAString& aValue); void MarginLeft(nsAString& aValue) { Margin(css::eSideLeft, aValue); } void MarginRight(nsAString& aValue) { Margin(css::eSideRight, aValue); } void MarginTop(nsAString& aValue) { Margin(css::eSideTop, aValue); } void MarginBottom(nsAString& aValue) { Margin(css::eSideBottom, aValue); } + static void Format(const nscolor& aValue, nsString& aFormattedValue); + private: StyleInfo() MOZ_DELETE; StyleInfo(const StyleInfo&) MOZ_DELETE; StyleInfo& operator = (const StyleInfo&) MOZ_DELETE; void Margin(css::Side aSide, nsAString& aValue); dom::Element* mElement;
--- a/accessible/src/base/nsTextAttrs.cpp +++ b/accessible/src/base/nsTextAttrs.cpp @@ -36,22 +36,26 @@ * * ***** END LICENSE BLOCK ***** */ #include "nsTextAttrs.h" #include "nsAccUtils.h" #include "nsCoreUtils.h" #include "nsHyperTextAccessibleWrap.h" +#include "StyleInfo.h" #include "gfxFont.h" #include "gfxUserFontSet.h" #include "nsFontMetrics.h" #include "nsLayoutUtils.h" +using namespace mozilla; +using namespace mozilla::a11y; + //////////////////////////////////////////////////////////////////////////////// // Constants and structures /** * Item of the gCSSTextAttrsMap map. */ struct nsCSSTextAttrMapItem { @@ -65,17 +69,16 @@ struct nsCSSTextAttrMapItem * The map of CSS properties to text attributes. */ const char* const kAnyValue = nsnull; const char* const kCopyValue = nsnull; static nsCSSTextAttrMapItem gCSSTextAttrsMap[] = { // CSS name CSS value Attribute name Attribute value - { "color", kAnyValue, &nsGkAtoms::color, kCopyValue }, { "font-family", kAnyValue, &nsGkAtoms::font_family, kCopyValue }, { "font-style", kAnyValue, &nsGkAtoms::font_style, kCopyValue }, { "text-decoration", "line-through", &nsGkAtoms::textLineThroughStyle, "solid" }, { "text-decoration", "underline", &nsGkAtoms::textUnderlineStyle, "solid" }, { "vertical-align", kAnyValue, &nsGkAtoms::textPosition, kCopyValue } }; //////////////////////////////////////////////////////////////////////////////// @@ -149,44 +152,44 @@ nsTextAttrsMgr::GetAttributes(nsIPersist } nsTArray<nsITextAttr*> textAttrArray(10); // "language" text attribute nsLangTextAttr langTextAttr(mHyperTextAcc, hyperTextElm, offsetNode); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&langTextAttr)); - // "color" text attribute - nsCSSTextAttr colorTextAttr(0, hyperTextElm, offsetElm); - textAttrArray.AppendElement(static_cast<nsITextAttr*>(&colorTextAttr)); - // "font-family" text attribute - nsCSSTextAttr fontFamilyTextAttr(1, hyperTextElm, offsetElm); + nsCSSTextAttr fontFamilyTextAttr(0, hyperTextElm, offsetElm); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&fontFamilyTextAttr)); // "font-style" text attribute - nsCSSTextAttr fontStyleTextAttr(2, hyperTextElm, offsetElm); + nsCSSTextAttr fontStyleTextAttr(1, hyperTextElm, offsetElm); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&fontStyleTextAttr)); // "text-line-through-style" text attribute - nsCSSTextAttr lineThroughTextAttr(3, hyperTextElm, offsetElm); + nsCSSTextAttr lineThroughTextAttr(2, hyperTextElm, offsetElm); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&lineThroughTextAttr)); // "text-underline-style" text attribute - nsCSSTextAttr underlineTextAttr(4, hyperTextElm, offsetElm); + nsCSSTextAttr underlineTextAttr(3, hyperTextElm, offsetElm); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&underlineTextAttr)); // "text-position" text attribute - nsCSSTextAttr posTextAttr(5, hyperTextElm, offsetElm); + nsCSSTextAttr posTextAttr(4, hyperTextElm, offsetElm); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&posTextAttr)); // "background-color" text attribute nsBGColorTextAttr bgColorTextAttr(rootFrame, frame); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&bgColorTextAttr)); + // "color" text attribute + ColorTextAttr colorTextAttr(rootFrame, frame); + textAttrArray.AppendElement(static_cast<nsITextAttr*>(&colorTextAttr)); + // "font-size" text attribute nsFontSizeTextAttr fontSizeTextAttr(rootFrame, frame); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&fontSizeTextAttr)); // "font-weight" text attribute nsFontWeightTextAttr fontWeightTextAttr(rootFrame, frame); textAttrArray.AppendElement(static_cast<nsITextAttr*>(&fontWeightTextAttr)); @@ -358,17 +361,17 @@ nsCSSTextAttr::Format(const nsAutoString if (attrValue != kCopyValue) AppendASCIItoUTF16(attrValue, aFormattedValue); else aFormattedValue = aValue; } //////////////////////////////////////////////////////////////////////////////// -// nsBackgroundTextAttr +// nsBGColorTextAttr //////////////////////////////////////////////////////////////////////////////// nsBGColorTextAttr::nsBGColorTextAttr(nsIFrame *aRootFrame, nsIFrame *aFrame) : nsTextAttr<nscolor>(aFrame == nsnull), mRootFrame(aRootFrame) { mIsRootDefined = GetColor(mRootFrame, &mRootNativeValue); if (aFrame) mIsDefined = GetColor(aFrame, &mNativeValue); @@ -382,26 +385,18 @@ nsBGColorTextAttr::GetValueFor(nsIConten return false; return GetColor(frame, aValue); } void nsBGColorTextAttr::Format(const nscolor& aValue, nsAString& aFormattedValue) { - // Combine the string like rgb(R, G, B) from nscolor. nsAutoString value; - value.AppendLiteral("rgb("); - value.AppendInt(NS_GET_R(aValue)); - value.AppendLiteral(", "); - value.AppendInt(NS_GET_G(aValue)); - value.AppendLiteral(", "); - value.AppendInt(NS_GET_B(aValue)); - value.Append(')'); - + StyleInfo::Format(aValue, value); aFormattedValue = value; } bool nsBGColorTextAttr::GetColor(nsIFrame *aFrame, nscolor *aColor) { const nsStyleBackground *styleBackground = aFrame->GetStyleBackground(); @@ -422,16 +417,53 @@ nsBGColorTextAttr::GetColor(nsIFrame *aF if (parentFrame == mRootFrame) return false; return GetColor(parentFrame, aColor); } //////////////////////////////////////////////////////////////////////////////// +// ColorTextAttr +//////////////////////////////////////////////////////////////////////////////// + +ColorTextAttr::ColorTextAttr(nsIFrame* aRootFrame, nsIFrame* aFrame) : + nsTextAttr<nscolor>(!aFrame) +{ + mRootNativeValue = aRootFrame->GetStyleColor()->mColor; + mIsRootDefined = true; + + if (aFrame) { + mNativeValue = aFrame->GetStyleColor()->mColor; + mIsDefined = true; + } +} + +bool +ColorTextAttr::GetValueFor(nsIContent* aContent, nscolor* aValue) +{ + nsIFrame* frame = aContent->GetPrimaryFrame(); + if (frame) { + *aValue = frame->GetStyleColor()->mColor; + return true; + } + + return false; +} + +void +ColorTextAttr::Format(const nscolor& aValue, nsAString& aFormattedValue) +{ + nsAutoString value; + StyleInfo::Format(aValue, value); + aFormattedValue = value; +} + + +//////////////////////////////////////////////////////////////////////////////// // nsFontSizeTextAttr //////////////////////////////////////////////////////////////////////////////// nsFontSizeTextAttr::nsFontSizeTextAttr(nsIFrame *aRootFrame, nsIFrame *aFrame) : nsTextAttr<nscoord>(aFrame == nsnull) { mDC = aRootFrame->PresContext()->DeviceContext();
--- a/accessible/src/base/nsTextAttrs.h +++ b/accessible/src/base/nsTextAttrs.h @@ -303,16 +303,35 @@ protected: private: bool GetColor(nsIFrame *aFrame, nscolor *aColor); nsIFrame *mRootFrame; }; /** + * Class is used for the work with 'color' text attribute in nsTextAttrsMgr + * class. + */ +class ColorTextAttr : public nsTextAttr<nscolor> +{ +public: + ColorTextAttr(nsIFrame* aRootFrame, nsIFrame* aFrame); + + // nsITextAttr + virtual nsIAtom* GetName() const { return nsGkAtoms::color; } + +protected: + // nsTextAttr + virtual bool GetValueFor(nsIContent* aContent, nscolor* aValue); + virtual void Format(const nscolor& aValue, nsAString& aFormattedValue); +}; + + +/** * Class is used for the work with "font-size" text attribute in nsTextAttrsMgr * class. */ class nsFontSizeTextAttr : public nsTextAttr<nscoord> { public: nsFontSizeTextAttr(nsIFrame *aRootFrame, nsIFrame *aFrame);