add helper methods for dealing with pixels; reduce string usage; code cleanup (r=glazman, sr=tor, a=asa, bug=216045)

This commit is contained in:
brade%comcast.net 2003-09-03 13:54:36 +00:00
parent 4d1f72cf19
commit 8b0ca47657
2 changed files with 56 additions and 35 deletions

View File

@ -63,13 +63,8 @@ void ProcessBValue(const nsAString * aInputString, nsAString & aOutputString,
const char * aDefaultValueString,
const char * aPrependString, const char* aAppendString)
{
if (aInputString) {
if (aInputString->Equals(NS_LITERAL_STRING("-moz-editor-invert-value"))) {
if (aInputString && aInputString->Equals(NS_LITERAL_STRING("-moz-editor-invert-value"))) {
aOutputString.Assign(NS_LITERAL_STRING("normal"));
}
else {
aOutputString.Assign(NS_LITERAL_STRING("bold"));
}
}
else {
aOutputString.Assign(NS_LITERAL_STRING("bold"));
@ -81,10 +76,11 @@ void ProcessDefaultValue(const nsAString * aInputString, nsAString & aOutputStri
const char * aDefaultValueString,
const char * aPrependString, const char* aAppendString)
{
aOutputString.Truncate();
if (aDefaultValueString) {
aOutputString.Assign(NS_ConvertASCIItoUCS2(aDefaultValueString));
}
else
aOutputString.Truncate();
}
static
@ -92,10 +88,11 @@ void ProcessSameValue(const nsAString * aInputString, nsAString & aOutputString,
const char * aDefaultValueString,
const char * aPrependString, const char* aAppendString)
{
aOutputString.Truncate();
if (aInputString) {
aOutputString.Assign(*aInputString);
}
else
aOutputString.Truncate();
}
static
@ -348,6 +345,8 @@ nsHTMLCSSUtils::IsCSSEditableProperty(nsIDOMNode * aNode,
nsCOMPtr<nsIAtom> tagName;
content->GetTag(getter_AddRefs(tagName));
// brade: should the above use nsEditor::GetTag(aNode)?
// brade: shouldn't some of the above go below the next block?
// html inline styles B I TT U STRIKE and COLOR/FACE on FONT
if (nsEditProperty::b == aProperty
@ -375,6 +374,8 @@ nsHTMLCSSUtils::IsCSSEditableProperty(nsIDOMNode * aNode,
|| nsEditProperty::th == tagName
|| nsEditProperty::table == tagName
|| nsEditProperty::hr == tagName
// brade: for the above, why not use nsHTMLEditUtils::SupportsAlignAttr
// brade: but it also checks for tbody, tfoot, thead
// Let's add the following elements here even if ALIGN has not
// the same meaning for them
|| nsEditProperty::legend == tagName
@ -484,6 +485,18 @@ nsHTMLCSSUtils::SetCSSProperty(nsIDOMElement *aElement, nsIAtom * aProperty, con
return result;
}
nsresult
nsHTMLCSSUtils::SetCSSPropertyPixels(nsIDOMElement *aElement,
nsIAtom *aProperty,
PRInt32 aIntValue,
PRBool aSuppressTransaction)
{
nsAutoString s;
s.AppendInt(aIntValue);
return SetCSSProperty(aElement, aProperty, s + NS_LITERAL_STRING("px"),
aSuppressTransaction);
}
// the lowest level above the transaction; removes the value aValue from the list of values
// specified for the CSS property aProperty, or totally remove the declaration if this
// property accepts only one value
@ -504,7 +517,6 @@ nsHTMLCSSUtils::RemoveCSSProperty(nsIDOMElement *aElement, nsIAtom * aProperty,
// The transaction system (if any) has taken ownwership of txn
NS_IF_RELEASE(txn);
return result;
return NS_OK;
}
nsresult
@ -515,7 +527,7 @@ nsHTMLCSSUtils::CreateCSSPropertyTxn(nsIDOMElement *aElement,
PRBool aRemoveProperty)
{
nsresult result = NS_ERROR_NULL_POINTER;
if (nsnull != aElement)
if (aElement)
{
result = TransactionFactory::GetNewTransaction(ChangeCSSInlineStyleTxn::GetCID(), (EditTxn **)aTxn);
if (NS_SUCCEEDED(result)) {
@ -574,7 +586,7 @@ nsHTMLCSSUtils::GetCSSInlinePropertyBase(nsIDOMNode *aNode, nsIAtom *aProperty,
case SPECIFIED_STYLE_TYPE:
if (element) {
nsCOMPtr<nsIDOMCSSStyleDeclaration> cssDecl;
PRUint32 length = 0;
PRUint32 length;
res = GetInlineStyles(element, getter_AddRefs(cssDecl), &length);
if (NS_FAILED(res)) return res;
nsAutoString value, propString;
@ -603,10 +615,9 @@ nsHTMLCSSUtils::GetDefaultViewCSS(nsIDOMNode *aNode, nsIDOMViewCSS **aViewCSS)
res = node->GetOwnerDocument(getter_AddRefs(doc));
if (NS_FAILED(res)) return res;
if (doc) {
nsCOMPtr<nsIDOMDocumentView> documentView;
nsCOMPtr<nsIDOMDocumentView> documentView = do_QueryInterface(doc);
nsCOMPtr<nsIDOMAbstractView> abstractView;
// from the document, get the abtractView
documentView = do_QueryInterface(doc);
res = documentView->GetDefaultView(getter_AddRefs(abstractView));
if (NS_FAILED(res)) return res;
// from the abstractView, get the CSS view
@ -626,9 +637,8 @@ NS_NewHTMLCSSUtils(nsHTMLCSSUtils** aInstancePtrResult)
*aInstancePtrResult = rules;
return NS_OK;
}
else {
*aInstancePtrResult = nsnull;
}
*aInstancePtrResult = nsnull;
return NS_ERROR_OUT_OF_MEMORY;
}
@ -909,6 +919,7 @@ nsHTMLCSSUtils::GenerateCSSDeclarationsFromHTMLStyle(nsIDOMNode * aNode,
}
if (!node) return;
// brade: use nsEditor::GetTag instead??
nsCOMPtr<nsIContent> content = do_QueryInterface(node);
nsCOMPtr<nsIAtom> tagName;
content->GetTag(getter_AddRefs(tagName));
@ -1051,7 +1062,6 @@ nsHTMLCSSUtils::RemoveCSSEquivalentToHTMLStyle(nsIDOMNode * aNode,
for (index = 0; index < count; index++) {
nsAutoString valueString;
cssValueArray.StringAt(index, valueString);
nsCOMPtr<nsIDOMElement> theElement = do_QueryInterface(aNode);
res = RemoveCSSProperty(theElement, (nsIAtom *)cssPropertyArray.ElementAt(index), valueString,
aSuppressTransaction);
if (NS_FAILED(res)) return res;
@ -1091,32 +1101,31 @@ nsHTMLCSSUtils::GetCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
nsAString & aValueString,
PRUint8 aStyleType)
{
aValueString.Truncate();
nsCOMPtr<nsIDOMElement> theElement;
nsresult res = GetElementContainerOrSelf(aNode, getter_AddRefs(theElement));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsIDOMNode> theNode = do_QueryInterface(theElement);
aValueString.Truncate();
if (theElement && IsCSSEditableProperty(theNode, aHTMLProperty, aAttribute)) {
if (theElement && IsCSSEditableProperty(theElement, aHTMLProperty, aAttribute)) {
// Yes, the requested HTML style has a CSS equivalence in this implementation
// Retrieve the default ViewCSS if we are asked for computed styles
nsCOMPtr<nsIDOMViewCSS> viewCSS = nsnull;
if (COMPUTED_STYLE_TYPE == aStyleType) {
res = GetDefaultViewCSS(theNode, getter_AddRefs(viewCSS));
res = GetDefaultViewCSS(theElement, getter_AddRefs(viewCSS));
if (NS_FAILED(res)) return res;
}
nsVoidArray cssPropertyArray;
nsStringArray cssValueArray;
// get the CSS equivalence with last param PR_TRUE indicating we want only the
// "gettable" properties
GenerateCSSDeclarationsFromHTMLStyle(theNode, aHTMLProperty, aAttribute, nsnull,
GenerateCSSDeclarationsFromHTMLStyle(theElement, aHTMLProperty, aAttribute, nsnull,
cssPropertyArray, cssValueArray, PR_TRUE);
PRInt32 count = cssPropertyArray.Count();
PRInt32 index;
for (index = 0; index < count; index++) {
nsAutoString valueString;
// retrieve the specified/computed value of the property
res = GetCSSInlinePropertyBase(theNode, (nsIAtom *)cssPropertyArray.ElementAt(index),
res = GetCSSInlinePropertyBase(theElement, (nsIAtom *)cssPropertyArray.ElementAt(index),
valueString, viewCSS, aStyleType);
if (NS_FAILED(res)) return res;
// append the value to aValueString (possibly with a leading whitespace)
@ -1145,6 +1154,7 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
nsAutoString htmlValueString(valueString);
aIsSet = PR_FALSE;
nsCOMPtr<nsIDOMNode> node = aNode;
NS_NAMED_LITERAL_STRING(boldStr, "bold");
do {
valueString.Assign(htmlValueString);
// get the value of the CSS equivalent styles
@ -1156,7 +1166,7 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
if (valueString.IsEmpty()) return NS_OK;
if (nsEditProperty::b == aHTMLProperty) {
if (valueString.Equals(NS_LITERAL_STRING("bold"))) {
if (valueString.Equals(boldStr)) {
aIsSet = PR_TRUE;
}
else if (valueString.Equals(NS_LITERAL_STRING("normal"))) {
@ -1164,7 +1174,7 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
}
else if (valueString.Equals(NS_LITERAL_STRING("bolder"))) {
aIsSet = PR_TRUE;
valueString.Assign(NS_LITERAL_STRING("bold"));
valueString.Assign(boldStr);
}
else {
PRInt32 weight = 0;
@ -1173,7 +1183,7 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
weight = value.ToInteger(&errorCode, 10);
if (400 < weight) {
aIsSet = PR_TRUE;
valueString.Assign(NS_LITERAL_STRING("bold"));
valueString.Assign(boldStr);
}
else {
aIsSet = PR_FALSE;
@ -1286,12 +1296,7 @@ nsHTMLCSSUtils::IsCSSEquivalentToHTMLInlineStyleSet(nsIDOMNode * aNode,
res = node->GetParentNode(getter_AddRefs(tmp));
if (NS_FAILED(res)) return res;
nsCOMPtr<nsIDOMElement> element = do_QueryInterface(tmp);
if (element) {
node = tmp;
}
else {
node = nsnull;
}
node = element; // set to null if it's not a dom element
}
} while ((nsEditProperty::u == aHTMLProperty || nsEditProperty::strike == aHTMLProperty) &&
!aIsSet && node);
@ -1413,7 +1418,7 @@ nsHTMLCSSUtils::GetElementContainerOrSelf(nsIDOMNode * aNode, nsIDOMElement ** a
{
NS_ENSURE_TRUE(aNode, NS_ERROR_NULL_POINTER);
nsCOMPtr<nsIDOMNode> node=aNode, parentNode=aNode;
nsCOMPtr<nsIDOMNode> node=aNode, parentNode;
PRUint16 type;
nsresult res;
res = node->GetNodeType(&type);
@ -1442,7 +1447,7 @@ nsHTMLCSSUtils::SetCSSProperty(nsIDOMElement * aElement,
const nsAString & aValue)
{
nsCOMPtr<nsIDOMCSSStyleDeclaration> cssDecl;
PRUint32 length = 0;
PRUint32 length;
nsresult res = GetInlineStyles(aElement, getter_AddRefs(cssDecl), &length);
if (NS_FAILED(res)) return res;
@ -1450,12 +1455,23 @@ nsHTMLCSSUtils::SetCSSProperty(nsIDOMElement * aElement,
aValue,
nsString());
}
nsresult
nsHTMLCSSUtils::SetCSSPropertyPixels(nsIDOMElement * aElement,
const nsAString & aProperty,
PRInt32 aIntValue)
{
nsAutoString s;
s.AppendInt(aIntValue);
return SetCSSProperty(aElement, aProperty, s + NS_LITERAL_STRING("px"));
}
nsresult
nsHTMLCSSUtils::RemoveCSSProperty(nsIDOMElement * aElement,
const nsAString & aProperty)
{
nsCOMPtr<nsIDOMCSSStyleDeclaration> cssDecl;
PRUint32 length = 0;
PRUint32 length;
nsresult res = GetInlineStyles(aElement, getter_AddRefs(cssDecl), &length);
if (NS_FAILED(res)) return res;

View File

@ -123,6 +123,8 @@ public:
nsresult SetCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
const nsAString & aValue,
PRBool aSuppressTransaction);
nsresult SetCSSPropertyPixels(nsIDOMElement *aElement, nsIAtom *aProperty,
PRInt32 aIntValue, PRBool aSuppressTxn);
nsresult RemoveCSSProperty(nsIDOMElement * aElement, nsIAtom * aProperty,
const nsAString & aPropertyValue, PRBool aSuppressTransaction);
@ -136,6 +138,9 @@ public:
nsresult SetCSSProperty(nsIDOMElement * aElement,
const nsAString & aProperty,
const nsAString & aValue);
nsresult SetCSSPropertyPixels(nsIDOMElement * aElement,
const nsAString & aProperty,
PRInt32 aIntValue);
nsresult RemoveCSSProperty(nsIDOMElement * aElement,
const nsAString & aProperty);