2001-09-25 01:32:19 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2011-12-22 23:34:45 +00:00
|
|
|
/* vim:set tw=78 expandtab softtabstop=2 ts=2 sw=2: */
|
2001-09-25 01:32:19 +00:00
|
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
2004-04-17 21:52:36 +00:00
|
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
2000-05-04 00:07:33 +00:00
|
|
|
*
|
2004-04-17 21:52:36 +00:00
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
2000-05-04 00:07:33 +00:00
|
|
|
*
|
2001-09-25 01:32:19 +00:00
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
2000-05-04 00:07:33 +00:00
|
|
|
*
|
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
2004-04-17 21:52:36 +00:00
|
|
|
* The Initial Developer of the Original Code is
|
2001-09-25 01:32:19 +00:00
|
|
|
* Netscape Communications Corporation.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
2000-05-04 00:07:33 +00:00
|
|
|
*
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
* Contributor(s):
|
2001-12-20 11:15:32 +00:00
|
|
|
* Daniel Glazman <glazman@netscape.com>
|
2002-03-12 21:16:22 +00:00
|
|
|
* Boris Zbarsky <bzbarsky@mit.edu>
|
|
|
|
* Christopher A. Aillon <christopher@aillon.com>
|
2011-06-22 18:11:47 +00:00
|
|
|
* Mats Palmgren <matspal@gmail.com>
|
2005-09-19 15:47:26 +00:00
|
|
|
* Christian Biesinger <cbiesinger@web.de>
|
2008-06-05 23:06:34 +00:00
|
|
|
* Michael Ventnor <m.ventnor@gmail.com>
|
2009-08-20 21:52:47 +00:00
|
|
|
* Jonathon Jongsma <jonathon.jongsma@collabora.co.uk>, Collabora Ltd.
|
|
|
|
* L. David Baron <dbaron@dbaron.org>, Mozilla Corporation
|
2001-09-25 01:32:19 +00:00
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
2004-04-17 21:52:36 +00:00
|
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
2001-09-25 01:32:19 +00:00
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
2004-04-17 21:52:36 +00:00
|
|
|
* use your version of this file under the terms of the MPL, indicate your
|
2001-09-25 01:32:19 +00:00
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
2004-04-17 21:52:36 +00:00
|
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
2001-09-25 01:32:19 +00:00
|
|
|
*
|
|
|
|
* ***** END LICENSE BLOCK ***** */
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2006-03-25 05:47:31 +00:00
|
|
|
/* DOM object returned from element.getComputedStyle() */
|
|
|
|
|
2011-10-11 05:50:08 +00:00
|
|
|
#include "mozilla/Util.h"
|
|
|
|
|
2002-03-22 20:18:42 +00:00
|
|
|
#include "nsComputedDOMStyle.h"
|
|
|
|
|
|
|
|
#include "nsDOMError.h"
|
2004-04-01 19:44:17 +00:00
|
|
|
#include "nsDOMString.h"
|
2010-08-06 05:32:01 +00:00
|
|
|
#include "nsIDOMCSS2Properties.h"
|
2000-05-04 00:07:33 +00:00
|
|
|
#include "nsIDOMElement.h"
|
2008-09-13 09:42:11 +00:00
|
|
|
#include "nsIDOMCSSPrimitiveValue.h"
|
2003-02-22 00:32:13 +00:00
|
|
|
#include "nsStyleContext.h"
|
2002-03-22 20:18:42 +00:00
|
|
|
#include "nsIScrollableFrame.h"
|
|
|
|
#include "nsContentUtils.h"
|
|
|
|
#include "prprf.h"
|
2000-05-15 01:59:05 +00:00
|
|
|
|
|
|
|
#include "nsCSSProps.h"
|
2001-12-20 11:15:32 +00:00
|
|
|
#include "nsCSSKeywords.h"
|
2002-03-22 20:18:42 +00:00
|
|
|
#include "nsDOMCSSRect.h"
|
2007-01-30 00:06:41 +00:00
|
|
|
#include "nsGkAtoms.h"
|
2004-11-25 02:43:28 +00:00
|
|
|
#include "nsHTMLReflowState.h"
|
2002-04-20 14:30:57 +00:00
|
|
|
#include "nsThemeConstants.h"
|
2007-03-08 18:44:45 +00:00
|
|
|
#include "nsStyleUtil.h"
|
2008-07-17 06:30:25 +00:00
|
|
|
#include "nsStyleStructInlines.h"
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2004-07-31 23:15:21 +00:00
|
|
|
#include "nsPresContext.h"
|
2001-03-11 20:47:06 +00:00
|
|
|
#include "nsIDocument.h"
|
|
|
|
|
2004-01-17 20:04:26 +00:00
|
|
|
#include "nsCSSPseudoElements.h"
|
2004-01-28 00:18:22 +00:00
|
|
|
#include "nsStyleSet.h"
|
2004-03-09 03:57:51 +00:00
|
|
|
#include "imgIRequest.h"
|
2007-05-05 06:09:50 +00:00
|
|
|
#include "nsLayoutUtils.h"
|
|
|
|
#include "nsFrameManager.h"
|
2009-01-29 20:39:18 +00:00
|
|
|
#include "prlog.h"
|
2008-09-13 09:42:11 +00:00
|
|
|
#include "nsCSSKeywords.h"
|
|
|
|
#include "nsStyleCoord.h"
|
|
|
|
#include "nsDisplayList.h"
|
2009-07-13 11:14:57 +00:00
|
|
|
#include "nsDOMCSSDeclaration.h"
|
2010-05-05 18:18:05 +00:00
|
|
|
#include "mozilla/dom/Element.h"
|
2012-02-15 23:29:53 +00:00
|
|
|
#include "nsGenericElement.h"
|
2010-07-03 04:18:56 +00:00
|
|
|
#include "CSSCalc.h"
|
2010-04-30 13:12:06 +00:00
|
|
|
|
2011-10-11 05:50:08 +00:00
|
|
|
using namespace mozilla;
|
2010-04-30 13:12:06 +00:00
|
|
|
using namespace mozilla::dom;
|
2004-01-17 20:04:26 +00:00
|
|
|
|
2002-07-08 07:11:59 +00:00
|
|
|
#if defined(DEBUG_bzbarsky) || defined(DEBUG_caillon)
|
|
|
|
#define DEBUG_ComputedDOMStyle
|
|
|
|
#endif
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
/*
|
|
|
|
* This is the implementation of the readonly CSSStyleDeclaration that is
|
|
|
|
* returned by the getComputedStyle() function.
|
|
|
|
*/
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2002-07-08 07:11:59 +00:00
|
|
|
static nsComputedDOMStyle *sCachedComputedDOMStyle;
|
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
nsresult
|
2009-07-13 11:14:57 +00:00
|
|
|
NS_NewComputedDOMStyle(nsIDOMElement *aElement, const nsAString &aPseudoElt,
|
|
|
|
nsIPresShell *aPresShell,
|
|
|
|
nsComputedDOMStyle **aComputedStyle)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2009-07-13 11:14:57 +00:00
|
|
|
nsRefPtr<nsComputedDOMStyle> computedStyle;
|
2002-07-08 07:11:59 +00:00
|
|
|
if (sCachedComputedDOMStyle) {
|
|
|
|
// There's an unused nsComputedDOMStyle cached, use it.
|
|
|
|
// But before we use it, re-initialize the object.
|
|
|
|
|
|
|
|
// Oh yeah baby, placement new!
|
2009-07-13 11:14:57 +00:00
|
|
|
computedStyle = new (sCachedComputedDOMStyle) nsComputedDOMStyle();
|
2002-07-08 07:11:59 +00:00
|
|
|
|
|
|
|
sCachedComputedDOMStyle = nsnull;
|
|
|
|
} else {
|
|
|
|
// No nsComputedDOMStyle cached, create a new one.
|
|
|
|
|
2009-07-13 11:14:57 +00:00
|
|
|
computedStyle = new nsComputedDOMStyle();
|
|
|
|
NS_ENSURE_TRUE(computedStyle, NS_ERROR_OUT_OF_MEMORY);
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2009-07-13 11:14:57 +00:00
|
|
|
nsresult rv = computedStyle->Init(aElement, aPseudoElt, aPresShell);
|
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2009-07-13 11:14:57 +00:00
|
|
|
*aComputedStyle = nsnull;
|
|
|
|
computedStyle.swap(*aComputedStyle);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2005-01-04 20:17:25 +00:00
|
|
|
static nsIFrame*
|
|
|
|
GetContainingBlockFor(nsIFrame* aFrame) {
|
|
|
|
if (!aFrame) {
|
|
|
|
return nsnull;
|
|
|
|
}
|
2011-05-12 04:04:30 +00:00
|
|
|
return aFrame->GetContainingBlock();
|
2005-01-04 20:17:25 +00:00
|
|
|
}
|
|
|
|
|
2002-03-22 20:18:42 +00:00
|
|
|
nsComputedDOMStyle::nsComputedDOMStyle()
|
2009-09-18 13:09:55 +00:00
|
|
|
: mDocumentWeak(nsnull), mOuterFrame(nsnull),
|
2010-08-13 09:58:04 +00:00
|
|
|
mInnerFrame(nsnull), mPresShell(nsnull),
|
2011-10-17 14:59:28 +00:00
|
|
|
mExposeVisitedStyle(false)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
nsComputedDOMStyle::~nsComputedDOMStyle()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2002-07-08 07:11:59 +00:00
|
|
|
void
|
|
|
|
nsComputedDOMStyle::Shutdown()
|
|
|
|
{
|
|
|
|
// We want to de-allocate without calling the dtor since we
|
|
|
|
// already did that manually in doDestroyComputedDOMStyle(),
|
|
|
|
// so cast our cached object to something that doesn't know
|
|
|
|
// about our dtor.
|
2007-07-08 07:08:04 +00:00
|
|
|
delete reinterpret_cast<char*>(sCachedComputedDOMStyle);
|
2002-07-08 07:11:59 +00:00
|
|
|
sCachedComputedDOMStyle = nsnull;
|
|
|
|
}
|
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2012-02-15 23:29:53 +00:00
|
|
|
// If nsComputedDOMStyle is changed so that any additional fields are
|
|
|
|
// traversed by the cycle collector (for instance, if wrapper cache
|
|
|
|
// handling is changed) then CAN_SKIP must be updated.
|
2009-11-29 08:32:39 +00:00
|
|
|
NS_IMPL_CYCLE_COLLECTION_1(nsComputedDOMStyle, mContent)
|
2008-11-27 17:44:26 +00:00
|
|
|
|
2012-02-15 23:29:53 +00:00
|
|
|
// nsComputedDOMStyle has only one cycle collected field, so if
|
|
|
|
// mContent is going to be skipped, the style isn't part of a garbage
|
|
|
|
// cycle.
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsComputedDOMStyle)
|
|
|
|
return !tmp->mContent || nsGenericElement::CanSkip(tmp->mContent, true);
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END
|
|
|
|
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_BEGIN(nsComputedDOMStyle)
|
|
|
|
return !tmp->mContent || nsGenericElement::CanSkipInCC(tmp->mContent);
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_IN_CC_END
|
|
|
|
|
|
|
|
// CanSkipThis returns false to avoid problems with incomplete unlinking.
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_BEGIN(nsComputedDOMStyle)
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_THIS_END
|
|
|
|
|
2003-07-11 20:44:25 +00:00
|
|
|
// QueryInterface implementation for nsComputedDOMStyle
|
2011-05-04 07:26:41 +00:00
|
|
|
NS_INTERFACE_MAP_BEGIN(nsComputedDOMStyle)
|
2009-07-13 11:14:57 +00:00
|
|
|
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
|
|
|
NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsComputedDOMStyle)
|
2011-05-04 07:26:41 +00:00
|
|
|
NS_INTERFACE_MAP_END_INHERITING(nsDOMCSSDeclaration)
|
2000-05-04 00:07:33 +00:00
|
|
|
|
|
|
|
|
2002-07-08 07:11:59 +00:00
|
|
|
static void doDestroyComputedDOMStyle(nsComputedDOMStyle *aComputedStyle)
|
|
|
|
{
|
|
|
|
if (!sCachedComputedDOMStyle) {
|
|
|
|
// The cache is empty, store aComputedStyle in the cache.
|
|
|
|
|
|
|
|
sCachedComputedDOMStyle = aComputedStyle;
|
|
|
|
sCachedComputedDOMStyle->~nsComputedDOMStyle();
|
2002-09-07 01:48:39 +00:00
|
|
|
} else {
|
2002-07-08 07:11:59 +00:00
|
|
|
// The cache is full, delete aComputedStyle
|
|
|
|
|
|
|
|
delete aComputedStyle;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-11-27 17:44:26 +00:00
|
|
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsComputedDOMStyle)
|
|
|
|
NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_DESTROY(nsComputedDOMStyle,
|
|
|
|
doDestroyComputedDOMStyle(this))
|
2000-05-04 00:07:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
nsComputedDOMStyle::Init(nsIDOMElement *aElement,
|
2002-03-23 22:56:05 +00:00
|
|
|
const nsAString& aPseudoElt,
|
2000-05-15 01:59:05 +00:00
|
|
|
nsIPresShell *aPresShell)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-05-15 01:59:05 +00:00
|
|
|
NS_ENSURE_ARG_POINTER(aElement);
|
|
|
|
NS_ENSURE_ARG_POINTER(aPresShell);
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2005-06-03 01:51:15 +00:00
|
|
|
mDocumentWeak = do_GetWeakReference(aPresShell->GetDocument());
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
mContent = do_QueryInterface(aElement);
|
|
|
|
if (!mContent) {
|
|
|
|
// This should not happen, all our elements support nsIContent!
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2004-01-17 20:04:26 +00:00
|
|
|
if (!DOMStringIsNull(aPseudoElt) && !aPseudoElt.IsEmpty() &&
|
|
|
|
aPseudoElt.First() == PRUnichar(':')) {
|
|
|
|
// deal with two-colon forms of aPseudoElt
|
|
|
|
nsAString::const_iterator start, end;
|
|
|
|
aPseudoElt.BeginReading(start);
|
|
|
|
aPseudoElt.EndReading(end);
|
|
|
|
NS_ASSERTION(start != end, "aPseudoElt is not empty!");
|
|
|
|
++start;
|
2011-09-29 06:19:26 +00:00
|
|
|
bool haveTwoColons = true;
|
2004-01-17 20:04:26 +00:00
|
|
|
if (start == end || *start != PRUnichar(':')) {
|
|
|
|
--start;
|
2011-10-17 14:59:28 +00:00
|
|
|
haveTwoColons = false;
|
2004-01-17 20:04:26 +00:00
|
|
|
}
|
|
|
|
mPseudo = do_GetAtom(Substring(start, end));
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
NS_ENSURE_TRUE(mPseudo, NS_ERROR_OUT_OF_MEMORY);
|
2004-01-17 20:04:26 +00:00
|
|
|
|
|
|
|
// There aren't any non-CSS2 pseudo-elements with a single ':'
|
|
|
|
if (!haveTwoColons &&
|
|
|
|
!nsCSSPseudoElements::IsCSS2PseudoElement(mPseudo)) {
|
|
|
|
// XXXbz I'd really rather we threw an exception or something, but
|
|
|
|
// the DOM spec sucks.
|
|
|
|
mPseudo = nsnull;
|
|
|
|
}
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2004-08-20 20:34:37 +00:00
|
|
|
nsPresContext *presCtx = aPresShell->GetPresContext();
|
2000-05-15 01:59:05 +00:00
|
|
|
NS_ENSURE_TRUE(presCtx, NS_ERROR_FAILURE);
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2004-06-08 01:32:29 +00:00
|
|
|
NS_IMETHODIMP
|
|
|
|
nsComputedDOMStyle::GetPropertyValue(const nsCSSProperty aPropID,
|
|
|
|
nsAString& aValue)
|
|
|
|
{
|
|
|
|
// This is mostly to avoid code duplication with GetPropertyCSSValue(); if
|
|
|
|
// perf ever becomes an issue here (doubtful), we can look into changing
|
|
|
|
// this.
|
|
|
|
return GetPropertyValue(
|
|
|
|
NS_ConvertASCIItoUTF16(nsCSSProps::GetStringValue(aPropID)),
|
|
|
|
aValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsComputedDOMStyle::SetPropertyValue(const nsCSSProperty aPropID,
|
|
|
|
const nsAString& aValue)
|
|
|
|
{
|
|
|
|
return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::GetCssText(nsAString& aCssText)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-05-15 01:59:05 +00:00
|
|
|
aCssText.Truncate();
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::SetCssText(const nsAString& aCssText)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
|
|
|
return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-05-15 01:59:05 +00:00
|
|
|
nsComputedDOMStyle::GetLength(PRUint32* aLength)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2002-10-08 01:53:31 +00:00
|
|
|
NS_PRECONDITION(aLength, "Null aLength! Prepare to die!");
|
|
|
|
|
|
|
|
(void)GetQueryablePropertyMap(aLength);
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2000-05-15 01:59:05 +00:00
|
|
|
nsComputedDOMStyle::GetParentRule(nsIDOMCSSRule** aParentRule)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-05-15 01:59:05 +00:00
|
|
|
*aParentRule = nsnull;
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::GetPropertyValue(const nsAString& aPropertyName,
|
|
|
|
nsAString& aReturn)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-06-14 00:06:36 +00:00
|
|
|
nsCOMPtr<nsIDOMCSSValue> val;
|
|
|
|
|
|
|
|
aReturn.Truncate();
|
|
|
|
|
2009-02-04 21:22:45 +00:00
|
|
|
nsresult rv = GetPropertyCSSValue(aPropertyName, getter_AddRefs(val));
|
2000-06-14 00:06:36 +00:00
|
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
|
|
|
|
if (val) {
|
|
|
|
rv = val->GetCssText(aReturn);
|
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2009-08-10 22:52:29 +00:00
|
|
|
/* static */
|
|
|
|
already_AddRefed<nsStyleContext>
|
2010-04-30 13:12:06 +00:00
|
|
|
nsComputedDOMStyle::GetStyleContextForElement(Element* aElement,
|
2009-08-10 22:52:29 +00:00
|
|
|
nsIAtom* aPseudo,
|
|
|
|
nsIPresShell* aPresShell)
|
|
|
|
{
|
2010-10-07 04:25:44 +00:00
|
|
|
// If the content has a pres shell, we must use it. Otherwise we'd
|
|
|
|
// potentially mix rule trees by using the wrong pres shell's style
|
|
|
|
// set. Using the pres shell from the content also means that any
|
|
|
|
// content that's actually *in* a document will get the style from the
|
|
|
|
// correct document.
|
|
|
|
nsIPresShell *presShell = GetPresShellForContent(aElement);
|
|
|
|
if (!presShell) {
|
|
|
|
presShell = aPresShell;
|
|
|
|
if (!presShell)
|
2009-12-11 07:37:40 +00:00
|
|
|
return nsnull;
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
2010-10-07 04:25:44 +00:00
|
|
|
presShell->FlushPendingNotifications(Flush_Style);
|
2009-12-11 07:37:40 +00:00
|
|
|
|
2010-10-07 04:25:44 +00:00
|
|
|
return GetStyleContextForElementNoFlush(aElement, aPseudo, presShell);
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* static */
|
|
|
|
already_AddRefed<nsStyleContext>
|
2010-04-30 13:12:06 +00:00
|
|
|
nsComputedDOMStyle::GetStyleContextForElementNoFlush(Element* aElement,
|
2009-08-20 21:52:47 +00:00
|
|
|
nsIAtom* aPseudo,
|
|
|
|
nsIPresShell* aPresShell)
|
|
|
|
{
|
2010-04-30 13:12:06 +00:00
|
|
|
NS_ABORT_IF_FALSE(aElement, "NULL element");
|
2010-10-07 04:25:44 +00:00
|
|
|
// If the content has a pres shell, we must use it. Otherwise we'd
|
|
|
|
// potentially mix rule trees by using the wrong pres shell's style
|
|
|
|
// set. Using the pres shell from the content also means that any
|
|
|
|
// content that's actually *in* a document will get the style from the
|
|
|
|
// correct document.
|
|
|
|
nsIPresShell *presShell = GetPresShellForContent(aElement);
|
|
|
|
if (!presShell) {
|
|
|
|
presShell = aPresShell;
|
|
|
|
if (!presShell)
|
2009-08-20 21:52:47 +00:00
|
|
|
return nsnull;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!aPseudo) {
|
2010-04-30 13:12:06 +00:00
|
|
|
nsIFrame* frame = aElement->GetPrimaryFrame();
|
2009-08-10 22:52:29 +00:00
|
|
|
if (frame) {
|
2009-12-01 17:21:00 +00:00
|
|
|
nsStyleContext* result =
|
|
|
|
nsLayoutUtils::GetStyleFrame(frame)->GetStyleContext();
|
2009-08-10 22:52:29 +00:00
|
|
|
// Don't use the style context if it was influenced by
|
|
|
|
// pseudo-elements, since then it's not the primary style
|
|
|
|
// for this element.
|
|
|
|
if (!result->HasPseudoElementData()) {
|
|
|
|
// this function returns an addrefed style context
|
|
|
|
result->AddRef();
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// No frame has been created or we have a pseudo, so resolve the
|
|
|
|
// style ourselves
|
|
|
|
nsRefPtr<nsStyleContext> parentContext;
|
2010-04-30 13:12:06 +00:00
|
|
|
nsIContent* parent = aPseudo ? aElement : aElement->GetParent();
|
2009-08-14 02:09:49 +00:00
|
|
|
// Don't resolve parent context for document fragments.
|
2010-04-30 13:12:06 +00:00
|
|
|
if (parent && parent->IsElement())
|
|
|
|
parentContext = GetStyleContextForElementNoFlush(parent->AsElement(),
|
2010-10-07 04:25:44 +00:00
|
|
|
nsnull, presShell);
|
2009-08-10 22:52:29 +00:00
|
|
|
|
2010-10-07 04:25:44 +00:00
|
|
|
nsPresContext *presContext = presShell->GetPresContext();
|
2009-08-10 22:52:29 +00:00
|
|
|
if (!presContext)
|
|
|
|
return nsnull;
|
|
|
|
|
2010-10-07 04:25:44 +00:00
|
|
|
nsStyleSet *styleSet = presShell->StyleSet();
|
2009-08-10 22:52:29 +00:00
|
|
|
|
|
|
|
if (aPseudo) {
|
2009-12-11 07:37:40 +00:00
|
|
|
nsCSSPseudoElements::Type type = nsCSSPseudoElements::GetPseudoType(aPseudo);
|
|
|
|
if (type >= nsCSSPseudoElements::ePseudo_PseudoElementCount) {
|
|
|
|
return nsnull;
|
|
|
|
}
|
2010-04-30 13:12:06 +00:00
|
|
|
return styleSet->ResolvePseudoElementStyle(aElement, type, parentContext);
|
2009-08-10 22:52:29 +00:00
|
|
|
}
|
|
|
|
|
2010-04-30 13:12:06 +00:00
|
|
|
return styleSet->ResolveStyleFor(aElement, parentContext);
|
2009-08-10 22:52:29 +00:00
|
|
|
}
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2009-08-20 21:52:47 +00:00
|
|
|
/* static */
|
|
|
|
nsIPresShell*
|
|
|
|
nsComputedDOMStyle::GetPresShellForContent(nsIContent* aContent)
|
|
|
|
{
|
|
|
|
nsIDocument* currentDoc = aContent->GetCurrentDoc();
|
|
|
|
if (!currentDoc)
|
|
|
|
return nsnull;
|
|
|
|
|
2010-06-25 13:59:57 +00:00
|
|
|
return currentDoc->GetShell();
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
2010-07-14 20:58:56 +00:00
|
|
|
// nsDOMCSSDeclaration abstract methods which should never be called
|
|
|
|
// on a nsComputedDOMStyle object, but must be defined to avoid
|
|
|
|
// compile errors.
|
2010-07-23 18:00:34 +00:00
|
|
|
css::Declaration*
|
2011-09-29 06:19:26 +00:00
|
|
|
nsComputedDOMStyle::GetCSSDeclaration(bool)
|
2010-07-14 20:58:56 +00:00
|
|
|
{
|
|
|
|
NS_RUNTIMEABORT("called nsComputedDOMStyle::GetCSSDeclaration");
|
2010-07-23 18:00:34 +00:00
|
|
|
return nsnull;
|
2010-07-14 20:58:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
2010-07-23 18:00:47 +00:00
|
|
|
nsComputedDOMStyle::SetCSSDeclaration(css::Declaration*)
|
2010-07-14 20:58:56 +00:00
|
|
|
{
|
2010-07-23 18:00:47 +00:00
|
|
|
NS_RUNTIMEABORT("called nsComputedDOMStyle::SetCSSDeclaration");
|
2010-07-14 20:58:56 +00:00
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDocument*
|
|
|
|
nsComputedDOMStyle::DocToUpdate()
|
|
|
|
{
|
|
|
|
NS_RUNTIMEABORT("called nsComputedDOMStyle::DocToUpdate");
|
|
|
|
return nsnull;
|
|
|
|
}
|
|
|
|
|
2011-04-27 20:53:49 +00:00
|
|
|
void
|
|
|
|
nsComputedDOMStyle::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv)
|
2010-07-14 20:58:56 +00:00
|
|
|
{
|
|
|
|
NS_RUNTIMEABORT("called nsComputedDOMStyle::GetCSSParsingEnvironment");
|
2011-04-27 20:53:49 +00:00
|
|
|
// Just in case NS_RUNTIMEABORT ever stops killing us for some reason
|
|
|
|
aCSSParseEnv.mPrincipal = nsnull;
|
2010-07-14 20:58:56 +00:00
|
|
|
}
|
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::GetPropertyCSSValue(const nsAString& aPropertyName,
|
2000-05-15 01:59:05 +00:00
|
|
|
nsIDOMCSSValue** aReturn)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2009-08-10 22:52:29 +00:00
|
|
|
NS_ASSERTION(!mStyleContextHolder, "bad state");
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
*aReturn = nsnull;
|
|
|
|
|
2005-06-03 01:51:15 +00:00
|
|
|
nsCOMPtr<nsIDocument> document = do_QueryReferent(mDocumentWeak);
|
|
|
|
NS_ENSURE_TRUE(document, NS_ERROR_NOT_AVAILABLE);
|
2011-11-14 03:24:41 +00:00
|
|
|
document->FlushPendingLinkUpdates();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
nsCSSProperty prop = nsCSSProps::LookupProperty(aPropertyName);
|
|
|
|
|
|
|
|
const ComputedStyleMapEntry* propEntry = nsnull;
|
|
|
|
{
|
|
|
|
PRUint32 length = 0;
|
|
|
|
const ComputedStyleMapEntry* propMap = GetQueryablePropertyMap(&length);
|
|
|
|
for (PRUint32 i = 0; i < length; ++i) {
|
|
|
|
if (prop == propMap[i].mProperty) {
|
|
|
|
propEntry = &propMap[i];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!propEntry) {
|
|
|
|
#ifdef DEBUG_ComputedDOMStyle
|
2010-04-27 16:15:01 +00:00
|
|
|
NS_WARNING(PromiseFlatCString(NS_ConvertUTF16toUTF8(aPropertyName) +
|
2009-02-25 00:14:45 +00:00
|
|
|
NS_LITERAL_CSTRING(" is not queryable!")).get());
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// NOTE: For branches, we should flush here for compatibility!
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2005-06-03 01:51:15 +00:00
|
|
|
// Flush _before_ getting the presshell, since that could create a new
|
|
|
|
// presshell. Also note that we want to flush the style on the document
|
|
|
|
// we're computing style in, not on the document mContent is in -- the two
|
|
|
|
// may be different.
|
2009-02-25 00:14:45 +00:00
|
|
|
document->FlushPendingNotifications(
|
|
|
|
propEntry->mNeedsLayoutFlush ? Flush_Layout : Flush_Style);
|
|
|
|
#ifdef DEBUG
|
|
|
|
mFlushedPendingReflows = propEntry->mNeedsLayoutFlush;
|
|
|
|
#endif
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2010-06-25 13:59:57 +00:00
|
|
|
mPresShell = document->GetShell();
|
2007-05-05 05:30:10 +00:00
|
|
|
NS_ENSURE_TRUE(mPresShell && mPresShell->GetPresContext(),
|
|
|
|
NS_ERROR_NOT_AVAILABLE);
|
2004-05-27 22:08:42 +00:00
|
|
|
|
2011-04-12 06:18:44 +00:00
|
|
|
if (!mPseudo) {
|
|
|
|
mOuterFrame = mContent->GetPrimaryFrame();
|
|
|
|
mInnerFrame = mOuterFrame;
|
|
|
|
if (mOuterFrame) {
|
|
|
|
nsIAtom* type = mOuterFrame->GetType();
|
|
|
|
if (type == nsGkAtoms::tableOuterFrame) {
|
|
|
|
// If the frame is an outer table frame then we should get the style
|
|
|
|
// from the inner table frame.
|
2011-08-24 20:54:30 +00:00
|
|
|
mInnerFrame = mOuterFrame->GetFirstPrincipalChild();
|
2011-04-12 06:18:44 +00:00
|
|
|
NS_ASSERTION(mInnerFrame, "Outer table must have an inner");
|
|
|
|
NS_ASSERTION(!mInnerFrame->GetNextSibling(),
|
|
|
|
"Outer table frames should have just one child, "
|
|
|
|
"the inner table");
|
|
|
|
}
|
2007-05-05 05:30:10 +00:00
|
|
|
|
2011-04-12 06:18:44 +00:00
|
|
|
mStyleContextHolder = mInnerFrame->GetStyleContext();
|
|
|
|
NS_ASSERTION(mStyleContextHolder, "Frame without style context?");
|
|
|
|
}
|
2006-12-30 05:17:59 +00:00
|
|
|
}
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2009-08-10 22:52:29 +00:00
|
|
|
if (!mStyleContextHolder || mStyleContextHolder->HasPseudoElementData()) {
|
|
|
|
#ifdef DEBUG
|
|
|
|
if (mStyleContextHolder) {
|
|
|
|
// We want to check that going through this path because of
|
|
|
|
// HasPseudoElementData is rare, because it slows us down a good
|
|
|
|
// bit. So check that we're really inside something associated
|
|
|
|
// with a pseudo-element that contains elements.
|
|
|
|
nsStyleContext *topWithPseudoElementData = mStyleContextHolder;
|
|
|
|
while (topWithPseudoElementData->GetParent()->HasPseudoElementData()) {
|
|
|
|
topWithPseudoElementData = topWithPseudoElementData->GetParent();
|
|
|
|
}
|
|
|
|
NS_ASSERTION(nsCSSPseudoElements::PseudoElementContainsElements(
|
2009-10-29 21:17:56 +00:00
|
|
|
topWithPseudoElementData->GetPseudo()),
|
2009-08-10 22:52:29 +00:00
|
|
|
"we should be in a pseudo-element that is expected to "
|
|
|
|
"contain elements");
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
// Need to resolve a style context
|
|
|
|
mStyleContextHolder =
|
2010-04-30 13:12:06 +00:00
|
|
|
nsComputedDOMStyle::GetStyleContextForElement(mContent->AsElement(),
|
2009-08-10 22:52:29 +00:00
|
|
|
mPseudo,
|
|
|
|
mPresShell);
|
2009-08-10 22:52:29 +00:00
|
|
|
NS_ENSURE_TRUE(mStyleContextHolder, NS_ERROR_OUT_OF_MEMORY);
|
|
|
|
NS_ASSERTION(mPseudo || !mStyleContextHolder->HasPseudoElementData(),
|
|
|
|
"should not have pseudo-element data");
|
|
|
|
}
|
|
|
|
|
2010-04-03 01:58:25 +00:00
|
|
|
// mExposeVisitedStyle is set to true only by testing APIs that
|
|
|
|
// require UniversalXPConnect.
|
|
|
|
NS_ABORT_IF_FALSE(!mExposeVisitedStyle ||
|
2011-12-30 17:35:39 +00:00
|
|
|
nsContentUtils::CallerHasUniversalXPConnect(),
|
2010-04-03 01:58:25 +00:00
|
|
|
"mExposeVisitedStyle set incorrectly");
|
|
|
|
if (mExposeVisitedStyle && mStyleContextHolder->RelevantLinkVisited()) {
|
|
|
|
nsStyleContext *styleIfVisited = mStyleContextHolder->GetStyleIfVisited();
|
|
|
|
if (styleIfVisited) {
|
|
|
|
mStyleContextHolder = styleIfVisited;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
// Call our pointer-to-member-function.
|
2011-03-04 17:28:57 +00:00
|
|
|
*aReturn = (this->*(propEntry->mGetter))();
|
|
|
|
NS_IF_ADDREF(*aReturn); // property getter gives us an object with refcount of 0
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
mOuterFrame = nsnull;
|
|
|
|
mInnerFrame = nsnull;
|
2007-05-05 05:30:10 +00:00
|
|
|
mPresShell = nsnull;
|
2006-12-22 06:10:32 +00:00
|
|
|
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
// Release the current style context for it should be re-resolved
|
2001-03-11 20:47:06 +00:00
|
|
|
// whenever a frame is not available.
|
2002-09-07 01:48:39 +00:00
|
|
|
mStyleContextHolder = nsnull;
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::RemoveProperty(const nsAString& aPropertyName,
|
|
|
|
nsAString& aReturn)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
|
|
|
return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
|
|
|
|
}
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::GetPropertyPriority(const nsAString& aPropertyName,
|
|
|
|
nsAString& aReturn)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-05-15 01:59:05 +00:00
|
|
|
aReturn.Truncate();
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::SetProperty(const nsAString& aPropertyName,
|
|
|
|
const nsAString& aValue,
|
|
|
|
const nsAString& aPriority)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
|
|
|
return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR;
|
|
|
|
}
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2000-05-04 00:07:33 +00:00
|
|
|
NS_IMETHODIMP
|
2002-03-23 22:56:05 +00:00
|
|
|
nsComputedDOMStyle::Item(PRUint32 aIndex, nsAString& aReturn)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2000-05-15 01:59:05 +00:00
|
|
|
aReturn.Truncate();
|
2002-10-08 01:53:31 +00:00
|
|
|
|
|
|
|
PRUint32 length = 0;
|
|
|
|
const ComputedStyleMapEntry* propMap = GetQueryablePropertyMap(&length);
|
2002-09-04 02:15:35 +00:00
|
|
|
if (aIndex < length) {
|
2006-02-03 14:18:39 +00:00
|
|
|
CopyASCIItoUTF16(nsCSSProps::GetStringValue(propMap[aIndex].mProperty),
|
2002-09-07 01:48:39 +00:00
|
|
|
aReturn);
|
2001-05-14 11:23:53 +00:00
|
|
|
}
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
return NS_OK;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-15 01:59:05 +00:00
|
|
|
// Property getters...
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBinding()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2001-03-11 20:47:06 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2000-06-14 00:06:36 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2000-06-14 00:06:36 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (display->mBinding) {
|
2011-05-11 15:28:53 +00:00
|
|
|
val->SetURI(display->mBinding->GetURI());
|
2002-09-07 01:48:39 +00:00
|
|
|
} else {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2000-06-14 00:06:36 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetClear()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mBreakType,
|
|
|
|
nsCSSProps::kClearKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetCssFloat()
|
2001-09-28 07:39:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mFloats,
|
|
|
|
nsCSSProps::kFloatKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-09-28 07:39:41 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBottom()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetOffsetWidthFor(NS_SIDE_BOTTOM);
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStackSizing()
|
2008-06-05 06:46:24 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(GetStyleXUL()->mStretchStack ? eCSSKeyword_stretch_to_fit :
|
|
|
|
eCSSKeyword_ignore);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-06-05 06:46:24 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
void
|
2007-01-25 02:03:02 +00:00
|
|
|
nsComputedDOMStyle::SetToRGBAColor(nsROCSSPrimitiveValue* aValue,
|
|
|
|
nscolor aColor)
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2007-01-25 02:03:02 +00:00
|
|
|
if (NS_GET_A(aColor) == 0) {
|
2009-01-23 01:28:14 +00:00
|
|
|
aValue->SetIdent(eCSSKeyword_transparent);
|
2011-03-04 17:28:57 +00:00
|
|
|
return;
|
2007-01-25 02:03:02 +00:00
|
|
|
}
|
|
|
|
|
2002-03-22 20:18:42 +00:00
|
|
|
nsROCSSPrimitiveValue *red = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *green = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *blue = GetROCSSPrimitiveValue();
|
2007-01-25 02:03:02 +00:00
|
|
|
nsROCSSPrimitiveValue *alpha = GetROCSSPrimitiveValue();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
PRUint8 a = NS_GET_A(aColor);
|
|
|
|
nsDOMCSSRGBColor *rgbColor =
|
|
|
|
new nsDOMCSSRGBColor(red, green, blue, alpha, a < 255);
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
red->SetNumber(NS_GET_R(aColor));
|
|
|
|
green->SetNumber(NS_GET_G(aColor));
|
|
|
|
blue->SetNumber(NS_GET_B(aColor));
|
|
|
|
alpha->SetNumber(nsStyleUtil::ColorComponentToFloat(a));
|
2002-03-22 20:18:42 +00:00
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
aValue->SetColor(rgbColor);
|
2002-03-22 20:18:42 +00:00
|
|
|
}
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColor()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-03-22 20:18:42 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, GetStyleColor()->mColor);
|
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOpacity()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetNumber(GetStyleDisplay()->mOpacity);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnCount()
|
2004-06-17 11:57:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleColumn* column = GetStyleColumn();
|
2004-06-17 11:57:37 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (column->mColumnCount == NS_STYLE_COLUMN_COUNT_AUTO) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
|
|
|
val->SetNumber(column->mColumnCount);
|
2004-06-17 11:57:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-06-17 11:57:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnWidth()
|
2004-06-17 11:57:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
// XXX fix the auto case. When we actually have a column frame, I think
|
|
|
|
// we should return the computed column width.
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleColumn()->mColumnWidth, true);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-06-17 11:57:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnGap()
|
2004-07-18 12:12:46 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleColumn* column = GetStyleColumn();
|
2007-02-20 18:43:16 +00:00
|
|
|
if (column->mColumnGap.GetUnit() == eStyleUnit_Normal) {
|
|
|
|
val->SetAppUnits(GetStyleFont()->mFont.size);
|
|
|
|
} else {
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleColumn()->mColumnGap, true);
|
2004-07-18 12:12:46 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-07-18 12:12:46 +00:00
|
|
|
}
|
|
|
|
|
2011-12-26 05:25:59 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnFill()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleColumn()->mColumnFill,
|
|
|
|
nsCSSProps::kColumnFillKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnRuleWidth()
|
2008-07-19 10:38:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-14 02:38:20 +00:00
|
|
|
val->SetAppUnits(GetStyleColumn()->GetComputedColumnRuleWidth());
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-07-19 10:38:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnRuleStyle()
|
2008-07-19 10:38:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleColumn()->mColumnRuleStyle,
|
|
|
|
nsCSSProps::kBorderStyleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-07-19 10:38:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColumnRuleColor()
|
2008-07-19 10:38:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleColumn* column = GetStyleColumn();
|
|
|
|
nscolor ruleColor;
|
|
|
|
if (column->mColumnRuleColorIsForeground) {
|
|
|
|
ruleColor = GetStyleColor()->mColor;
|
|
|
|
} else {
|
|
|
|
ruleColor = column->mColumnRuleColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
SetToRGBAColor(val, ruleColor);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-07-19 10:38:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetContent()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
|
|
|
const nsStyleContent *content = GetStyleContent();
|
|
|
|
|
|
|
|
if (content->ContentCount() == 0) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (content->ContentCount() == 1 &&
|
|
|
|
content->ContentAt(0).mType == eStyleContentType_AltContent) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(eCSSKeyword__moz_alt_content);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
|
|
|
for (PRUint32 i = 0, i_end = content->ContentCount(); i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
|
|
|
const nsStyleContentData &data = content->ContentAt(i);
|
|
|
|
switch (data.mType) {
|
|
|
|
case eStyleContentType_String:
|
|
|
|
{
|
|
|
|
nsString str;
|
2009-03-06 04:05:00 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSString(
|
|
|
|
nsDependentString(data.mContent.mString), str);
|
2007-07-22 17:58:37 +00:00
|
|
|
val->SetString(str);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case eStyleContentType_Image:
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
|
|
|
if (data.mContent.mImage) {
|
|
|
|
data.mContent.mImage->GetURI(getter_AddRefs(uri));
|
|
|
|
}
|
|
|
|
val->SetURI(uri);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case eStyleContentType_Attr:
|
2010-02-04 20:49:29 +00:00
|
|
|
{
|
|
|
|
nsAutoString str;
|
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(
|
|
|
|
nsDependentString(data.mContent.mString), str);
|
|
|
|
val->SetString(str, nsIDOMCSSPrimitiveValue::CSS_ATTR);
|
|
|
|
}
|
2007-07-22 17:58:37 +00:00
|
|
|
break;
|
|
|
|
case eStyleContentType_Counter:
|
|
|
|
case eStyleContentType_Counters:
|
|
|
|
{
|
|
|
|
/* FIXME: counters should really use an object */
|
|
|
|
nsAutoString str;
|
|
|
|
if (data.mType == eStyleContentType_Counter) {
|
|
|
|
str.AppendLiteral("counter(");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
str.AppendLiteral("counters(");
|
|
|
|
}
|
|
|
|
// WRITE ME
|
|
|
|
nsCSSValue::Array *a = data.mContent.mCounters;
|
|
|
|
|
2010-02-04 20:49:29 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(
|
|
|
|
nsDependentString(a->Item(0).GetStringBufferValue()), str);
|
2007-07-22 17:58:37 +00:00
|
|
|
PRInt32 typeItem = 1;
|
|
|
|
if (data.mType == eStyleContentType_Counters) {
|
|
|
|
typeItem = 2;
|
2009-03-06 04:05:00 +00:00
|
|
|
str.AppendLiteral(", ");
|
|
|
|
nsStyleUtil::AppendEscapedCSSString(
|
|
|
|
nsDependentString(a->Item(1).GetStringBufferValue()), str);
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
2009-10-21 21:57:57 +00:00
|
|
|
NS_ABORT_IF_FALSE(eCSSUnit_None != a->Item(typeItem).GetUnit(),
|
|
|
|
"'none' should be handled as enumerated value");
|
|
|
|
PRInt32 type = a->Item(typeItem).GetIntValue();
|
|
|
|
if (type != NS_STYLE_LIST_STYLE_DECIMAL) {
|
|
|
|
str.AppendLiteral(", ");
|
|
|
|
AppendASCIItoUTF16(
|
|
|
|
nsCSSProps::ValueToKeyword(type, nsCSSProps::kListStyleKTable),
|
|
|
|
str);
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
str.Append(PRUnichar(')'));
|
|
|
|
val->SetString(str, nsIDOMCSSPrimitiveValue::CSS_COUNTER);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case eStyleContentType_OpenQuote:
|
|
|
|
val->SetIdent(eCSSKeyword_open_quote);
|
|
|
|
break;
|
|
|
|
case eStyleContentType_CloseQuote:
|
|
|
|
val->SetIdent(eCSSKeyword_close_quote);
|
|
|
|
break;
|
|
|
|
case eStyleContentType_NoOpenQuote:
|
|
|
|
val->SetIdent(eCSSKeyword_no_open_quote);
|
|
|
|
break;
|
|
|
|
case eStyleContentType_NoCloseQuote:
|
|
|
|
val->SetIdent(eCSSKeyword_no_close_quote);
|
|
|
|
break;
|
|
|
|
case eStyleContentType_AltContent:
|
|
|
|
default:
|
|
|
|
NS_NOTREACHED("unexpected type");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetCounterIncrement()
|
2005-04-01 23:07:00 +00:00
|
|
|
{
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleContent *content = GetStyleContent();
|
2005-04-01 23:07:00 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (content->CounterIncrementCount() == 0) {
|
2005-04-01 23:07:00 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2005-04-01 23:07:00 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
for (PRUint32 i = 0, i_end = content->CounterIncrementCount(); i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue* name = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(name);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue* value = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(value);
|
2006-12-30 05:17:59 +00:00
|
|
|
|
|
|
|
const nsStyleCounterData *data = content->GetCounterIncrementAt(i);
|
2010-02-04 20:49:29 +00:00
|
|
|
nsAutoString escaped;
|
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(data->mCounter, escaped);
|
|
|
|
name->SetString(escaped);
|
2006-12-30 05:17:59 +00:00
|
|
|
value->SetNumber(data->mValue); // XXX This should really be integer
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2008-09-13 09:42:11 +00:00
|
|
|
/* Convert the stored representation into a list of two values and then hand
|
|
|
|
* it back.
|
|
|
|
*/
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTransformOrigin()
|
2008-09-13 09:42:11 +00:00
|
|
|
{
|
|
|
|
/* We need to build up a list of two values. We'll call them
|
|
|
|
* width and height.
|
|
|
|
*/
|
2011-03-04 17:28:57 +00:00
|
|
|
|
|
|
|
/* Store things as a value list */
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(false);
|
2008-09-13 09:42:11 +00:00
|
|
|
|
|
|
|
/* Now, get the values. */
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2011-03-04 17:28:57 +00:00
|
|
|
|
|
|
|
nsROCSSPrimitiveValue* width = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(width, display->mTransformOrigin[0], false,
|
2008-09-13 09:42:11 +00:00
|
|
|
&nsComputedDOMStyle::GetFrameBoundsWidthForTransform);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(width);
|
|
|
|
|
|
|
|
nsROCSSPrimitiveValue* height = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(height, display->mTransformOrigin[1], false,
|
2008-09-13 09:42:11 +00:00
|
|
|
&nsComputedDOMStyle::GetFrameBoundsHeightForTransform);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(height);
|
2008-09-13 09:42:11 +00:00
|
|
|
|
2011-08-03 03:04:23 +00:00
|
|
|
if (display->mTransformOrigin[2].GetUnit() != eStyleUnit_Coord ||
|
|
|
|
display->mTransformOrigin[2].GetCoordValue() != 0) {
|
|
|
|
nsROCSSPrimitiveValue* depth = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(depth, display->mTransformOrigin[2], false,
|
2011-08-03 03:04:23 +00:00
|
|
|
nsnull);
|
|
|
|
valueList->AppendCSSValue(depth);
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2011-08-03 03:04:24 +00:00
|
|
|
/* Convert the stored representation into a list of two values and then hand
|
|
|
|
* it back.
|
|
|
|
*/
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozPerspectiveOrigin()
|
|
|
|
{
|
|
|
|
/* We need to build up a list of two values. We'll call them
|
|
|
|
* width and height.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Store things as a value list */
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(false);
|
2011-08-03 03:04:24 +00:00
|
|
|
|
|
|
|
/* Now, get the values. */
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
|
|
|
nsROCSSPrimitiveValue* width = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(width, display->mPerspectiveOrigin[0], false,
|
2011-08-03 03:04:24 +00:00
|
|
|
&nsComputedDOMStyle::GetFrameBoundsWidthForTransform);
|
|
|
|
valueList->AppendCSSValue(width);
|
|
|
|
|
|
|
|
nsROCSSPrimitiveValue* height = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(height, display->mPerspectiveOrigin[1], false,
|
2011-08-03 03:04:24 +00:00
|
|
|
&nsComputedDOMStyle::GetFrameBoundsHeightForTransform);
|
|
|
|
valueList->AppendCSSValue(height);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
2011-08-03 03:04:22 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozPerspective()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
if (GetStyleDisplay()->mChildPerspective.GetUnit() == eStyleUnit_Coord &&
|
|
|
|
GetStyleDisplay()->mChildPerspective.GetCoordValue() == 0.0) {
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
|
|
|
} else {
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleDisplay()->mChildPerspective, false);
|
2011-08-03 03:04:22 +00:00
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-08-03 03:04:22 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozBackfaceVisibility()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mBackfaceVisibility,
|
|
|
|
nsCSSProps::kBackfaceVisibilityKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-08-27 00:01:06 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTransformStyle()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mTransformStyle,
|
|
|
|
nsCSSProps::kTransformStyleKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2008-09-13 09:42:11 +00:00
|
|
|
/* If the property is "none", hand back "none" wrapped in a value.
|
|
|
|
* Otherwise, compute the aggregate transform matrix and hands it back in a
|
|
|
|
* "matrix" wrapper.
|
|
|
|
*/
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTransform()
|
2008-09-13 09:42:11 +00:00
|
|
|
{
|
|
|
|
/* First, get the display data. We'll need it. */
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2008-09-13 09:42:11 +00:00
|
|
|
/* If the "no transforms" flag is set, then we should construct a
|
|
|
|
* single-element entry and hand it back.
|
|
|
|
*/
|
2010-07-03 04:18:56 +00:00
|
|
|
if (!display->HasTransform()) {
|
2010-06-03 20:11:34 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2008-09-13 09:42:11 +00:00
|
|
|
/* Set it to "none." */
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2008-09-13 09:42:11 +00:00
|
|
|
/* Otherwise, we need to compute the current value of the transform matrix,
|
|
|
|
* store it in a string, and hand it back to the caller.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Use the inner frame for width and height. If we fail, assume zero.
|
|
|
|
* TODO: There is no good way for us to represent the case where there's no
|
|
|
|
* frame, which is problematic. The reason is that when we have percentage
|
|
|
|
* transforms, there are a total of four stored matrix entries that influence
|
|
|
|
* the transform based on the size of the element. However, this poses a
|
|
|
|
* problem, because only two of these values can be explicitly referenced
|
|
|
|
* using the named transforms. Until a real solution is found, we'll just
|
|
|
|
* use this approach.
|
|
|
|
*/
|
|
|
|
nsRect bounds =
|
|
|
|
(mInnerFrame ? nsDisplayTransform::GetFrameBoundsForTransform(mInnerFrame) :
|
|
|
|
nsRect(0, 0, 0, 0));
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool dummy;
|
2011-07-22 22:28:51 +00:00
|
|
|
gfx3DMatrix matrix =
|
2011-07-22 22:28:07 +00:00
|
|
|
nsStyleTransformMatrix::ReadTransforms(display->mSpecifiedTransform,
|
|
|
|
mStyleContextHolder,
|
|
|
|
mStyleContextHolder->PresContext(),
|
|
|
|
dummy,
|
|
|
|
bounds,
|
|
|
|
float(nsDeviceContext::AppUnitsPerCSSPixel()));
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool is3D = !matrix.Is2D();
|
2011-09-08 11:15:00 +00:00
|
|
|
|
2011-09-26 21:53:33 +00:00
|
|
|
nsAutoString resultString(NS_LITERAL_STRING("matrix"));
|
|
|
|
if (is3D) {
|
|
|
|
resultString.Append(NS_LITERAL_STRING("3d"));
|
2011-07-22 22:28:51 +00:00
|
|
|
}
|
|
|
|
|
2011-09-26 21:53:33 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING("("));
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._11);
|
2011-07-22 22:28:07 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._12);
|
2011-07-22 22:28:07 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-09-26 21:53:33 +00:00
|
|
|
if (is3D) {
|
|
|
|
resultString.AppendFloat(matrix._13);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._14);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
}
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._21);
|
2011-07-22 22:28:07 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._22);
|
2011-07-22 22:28:07 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-09-26 21:53:33 +00:00
|
|
|
if (is3D) {
|
|
|
|
resultString.AppendFloat(matrix._23);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._24);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._31);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._32);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._33);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._34);
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
}
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._41);
|
2012-02-10 21:04:59 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-07-22 22:28:51 +00:00
|
|
|
resultString.AppendFloat(matrix._42);
|
2011-09-26 21:53:33 +00:00
|
|
|
if (is3D) {
|
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
|
|
|
resultString.AppendFloat(matrix._43);
|
2012-02-10 21:04:59 +00:00
|
|
|
resultString.Append(NS_LITERAL_STRING(", "));
|
2011-09-26 21:53:33 +00:00
|
|
|
resultString.AppendFloat(matrix._44);
|
|
|
|
}
|
|
|
|
resultString.Append(NS_LITERAL_STRING(")"));
|
2008-09-13 09:42:11 +00:00
|
|
|
|
|
|
|
/* Create a value to hold our result. */
|
2010-06-03 20:11:34 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2008-09-13 09:42:11 +00:00
|
|
|
|
2010-06-03 20:11:34 +00:00
|
|
|
val->SetString(resultString);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetCounterReset()
|
2005-04-01 23:07:00 +00:00
|
|
|
{
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleContent *content = GetStyleContent();
|
2005-04-01 23:07:00 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (content->CounterResetCount() == 0) {
|
2005-04-01 23:07:00 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2005-04-01 23:07:00 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
for (PRUint32 i = 0, i_end = content->CounterResetCount(); i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue* name = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(name);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue* value = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(value);
|
2006-12-30 05:17:59 +00:00
|
|
|
|
|
|
|
const nsStyleCounterData *data = content->GetCounterResetAt(i);
|
2010-02-04 20:49:29 +00:00
|
|
|
nsAutoString escaped;
|
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(data->mCounter, escaped);
|
|
|
|
name->SetString(escaped);
|
2006-12-30 05:17:59 +00:00
|
|
|
value->SetNumber(data->mValue); // XXX This should really be integer
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2005-04-01 23:07:00 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetQuotes()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
|
|
|
const nsStyleQuotes *quotes = GetStyleQuotes();
|
|
|
|
|
|
|
|
if (quotes->QuotesCount() == 0) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
|
|
|
for (PRUint32 i = 0, i_end = quotes->QuotesCount(); i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue* openVal = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(openVal);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-07-22 17:58:37 +00:00
|
|
|
nsROCSSPrimitiveValue* closeVal = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(closeVal);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
|
|
|
nsString s;
|
2009-03-06 04:05:00 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSString(*quotes->OpenQuoteAt(i), s);
|
2007-07-22 17:58:37 +00:00
|
|
|
openVal->SetString(s);
|
2009-03-06 04:05:00 +00:00
|
|
|
s.Truncate();
|
|
|
|
nsStyleUtil::AppendEscapedCSSString(*quotes->CloseQuoteAt(i), s);
|
2007-07-22 17:58:37 +00:00
|
|
|
closeVal->SetString(s);
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontFamily()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleFont* font = GetStyleFont();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsCOMPtr<nsIDocument> doc = do_QueryReferent(mDocumentWeak);
|
|
|
|
NS_ASSERTION(doc, "document is required");
|
2010-06-25 13:59:57 +00:00
|
|
|
nsIPresShell* presShell = doc->GetShell();
|
2006-12-30 05:17:59 +00:00
|
|
|
NS_ASSERTION(presShell, "pres shell is required");
|
|
|
|
nsPresContext *presContext = presShell->GetPresContext();
|
|
|
|
NS_ASSERTION(presContext, "pres context is required");
|
|
|
|
|
|
|
|
const nsString& fontName = font->mFont.name;
|
2010-04-27 16:15:01 +00:00
|
|
|
if (font->mGenericID == kGenericFont_NONE && !font->mFont.systemFont) {
|
2006-12-30 05:17:59 +00:00
|
|
|
const nsFont* defaultFont =
|
2012-01-25 23:52:26 +00:00
|
|
|
presContext->GetDefaultFont(kPresContext_DefaultVariableFont_ID,
|
|
|
|
font->mLanguage);
|
2006-12-30 05:17:59 +00:00
|
|
|
|
|
|
|
PRInt32 lendiff = fontName.Length() - defaultFont->name.Length();
|
|
|
|
if (lendiff > 0) {
|
|
|
|
val->SetString(Substring(fontName, 0, lendiff-1)); // -1 removes comma
|
2001-09-07 02:28:10 +00:00
|
|
|
} else {
|
2001-09-27 18:33:58 +00:00
|
|
|
val->SetString(fontName);
|
2001-09-07 02:28:10 +00:00
|
|
|
}
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
|
|
|
val->SetString(fontName);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontSize()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
// Note: GetStyleFont()->mSize is the 'computed size';
|
|
|
|
// GetStyleFont()->mFont.size is the 'actual size'
|
2007-02-07 07:46:44 +00:00
|
|
|
val->SetAppUnits(GetStyleFont()->mSize);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontSizeAdjust()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleFont *font = GetStyleFont();
|
2002-03-16 17:04:35 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (font->mFont.sizeAdjust) {
|
2002-03-16 17:04:35 +00:00
|
|
|
val->SetNumber(font->mFont.sizeAdjust);
|
2002-09-07 01:48:39 +00:00
|
|
|
} else {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontStretch()
|
2009-01-29 20:39:18 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
2010-11-10 15:49:52 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleFont()->mFont.stretch,
|
|
|
|
nsCSSProps::kFontStretchKTable));
|
2009-01-29 20:39:18 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2009-01-29 20:39:18 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleFont()->mFont.style,
|
|
|
|
nsCSSProps::kFontStyleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontWeight()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleFont* font = GetStyleFont();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2009-11-15 03:16:59 +00:00
|
|
|
PRUint16 weight = font->mFont.weight;
|
|
|
|
if (weight % 100 == 0) {
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetNumber(font->mFont.weight);
|
2009-11-15 03:16:59 +00:00
|
|
|
} else if (weight % 100 > 50) {
|
|
|
|
// FIXME: This doesn't represent the full range of computed values,
|
|
|
|
// but at least it's legal CSS.
|
|
|
|
val->SetIdent(eCSSKeyword_lighter);
|
|
|
|
} else {
|
|
|
|
// FIXME: This doesn't represent the full range of computed values,
|
|
|
|
// but at least it's legal CSS.
|
|
|
|
val->SetIdent(eCSSKeyword_bolder);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFontVariant()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleFont()->mFont.variant,
|
|
|
|
nsCSSProps::kFontVariantKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozFontFeatureSettings()
|
2010-07-13 20:30:42 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleFont* font = GetStyleFont();
|
|
|
|
if (font->mFont.featureSettings.IsEmpty()) {
|
|
|
|
val->SetIdent(eCSSKeyword_normal);
|
|
|
|
} else {
|
|
|
|
nsString str;
|
|
|
|
nsStyleUtil::AppendEscapedCSSString(font->mFont.featureSettings, str);
|
|
|
|
val->SetString(str);
|
|
|
|
}
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2010-07-13 20:30:42 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozFontLanguageOverride()
|
2010-07-13 20:30:42 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleFont* font = GetStyleFont();
|
|
|
|
if (font->mFont.languageOverride.IsEmpty()) {
|
|
|
|
val->SetIdent(eCSSKeyword_normal);
|
|
|
|
} else {
|
|
|
|
nsString str;
|
|
|
|
nsStyleUtil::AppendEscapedCSSString(font->mFont.languageOverride, str);
|
|
|
|
val->SetString(str);
|
|
|
|
}
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2010-07-13 20:30:42 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
2009-02-20 05:29:21 +00:00
|
|
|
nsComputedDOMStyle::GetBackgroundList(PRUint8 nsStyleBackground::Layer::* aMember,
|
|
|
|
PRUint32 nsStyleBackground::* aCount,
|
2011-03-04 17:28:57 +00:00
|
|
|
const PRInt32 aTable[])
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
const nsStyleBackground* bg = GetStyleBackground();
|
2002-03-16 17:04:35 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2002-10-08 10:24:53 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
for (PRUint32 i = 0, i_end = bg->*aCount; i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2009-05-28 18:09:05 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(bg->mLayers[i].*aMember,
|
2009-02-20 05:29:21 +00:00
|
|
|
aTable));
|
|
|
|
}
|
2009-02-19 02:59:47 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-02-19 20:33:09 +00:00
|
|
|
}
|
2009-02-19 17:06:18 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundAttachment()
|
2009-02-19 20:33:09 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
return GetBackgroundList(&nsStyleBackground::Layer::mAttachment,
|
|
|
|
&nsStyleBackground::mAttachmentCount,
|
2011-03-04 17:28:57 +00:00
|
|
|
nsCSSProps::kBackgroundAttachmentKTable);
|
2009-02-20 05:29:21 +00:00
|
|
|
}
|
2009-02-19 21:51:46 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundClip()
|
2009-02-20 05:29:21 +00:00
|
|
|
{
|
|
|
|
return GetBackgroundList(&nsStyleBackground::Layer::mClip,
|
|
|
|
&nsStyleBackground::mClipCount,
|
2011-03-04 17:28:57 +00:00
|
|
|
nsCSSProps::kBackgroundOriginKTable);
|
2002-10-08 10:24:53 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundColor()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2009-06-16 15:00:20 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, GetStyleBackground()->mBackgroundColor);
|
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2010-09-15 15:11:26 +00:00
|
|
|
|
|
|
|
static void
|
2011-05-23 20:36:18 +00:00
|
|
|
SetValueToCalc(const nsStyleCoord::Calc *aCalc, nsROCSSPrimitiveValue *aValue)
|
2010-09-15 15:11:26 +00:00
|
|
|
{
|
|
|
|
nsRefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue();
|
|
|
|
nsAutoString tmp, result;
|
|
|
|
|
|
|
|
result.AppendLiteral("-moz-calc(");
|
|
|
|
|
|
|
|
val->SetAppUnits(aCalc->mLength);
|
|
|
|
val->GetCssText(tmp);
|
|
|
|
result.Append(tmp);
|
|
|
|
|
|
|
|
if (aCalc->mHasPercent) {
|
|
|
|
result.AppendLiteral(" + ");
|
|
|
|
|
|
|
|
val->SetPercent(aCalc->mPercent);
|
|
|
|
val->GetCssText(tmp);
|
|
|
|
result.Append(tmp);
|
|
|
|
}
|
|
|
|
|
|
|
|
result.AppendLiteral(")");
|
|
|
|
|
|
|
|
aValue->SetString(result); // not really SetString
|
|
|
|
}
|
|
|
|
|
2009-08-01 15:53:40 +00:00
|
|
|
static void
|
|
|
|
AppendCSSGradientLength(const nsStyleCoord& aValue,
|
|
|
|
nsROCSSPrimitiveValue* aPrimitive,
|
|
|
|
nsAString& aString)
|
|
|
|
{
|
|
|
|
nsAutoString tokenString;
|
2010-09-15 15:11:26 +00:00
|
|
|
if (aValue.IsCalcUnit())
|
|
|
|
SetValueToCalc(aValue.GetCalcValue(), aPrimitive);
|
|
|
|
else if (aValue.GetUnit() == eStyleUnit_Coord)
|
2009-08-01 15:53:40 +00:00
|
|
|
aPrimitive->SetAppUnits(aValue.GetCoordValue());
|
|
|
|
else
|
|
|
|
aPrimitive->SetPercent(aValue.GetPercentValue());
|
|
|
|
aPrimitive->GetCssText(tokenString);
|
|
|
|
aString.Append(tokenString);
|
|
|
|
}
|
|
|
|
|
2011-10-22 19:41:11 +00:00
|
|
|
static void
|
|
|
|
AppendCSSGradientToBoxPosition(const nsStyleGradient* aGradient,
|
|
|
|
nsAString& aString,
|
|
|
|
bool& aNeedSep)
|
|
|
|
{
|
|
|
|
float xValue = aGradient->mBgPosX.GetPercentValue();
|
|
|
|
float yValue = aGradient->mBgPosY.GetPercentValue();
|
|
|
|
|
|
|
|
if (yValue == 1.0f && xValue == 0.5f) {
|
|
|
|
// omit "to bottom"
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
NS_ASSERTION(yValue != 0.5f || xValue != 0.5f, "invalid box position");
|
|
|
|
|
|
|
|
aString.AppendLiteral("to");
|
|
|
|
|
|
|
|
if (yValue == 0.0f) {
|
|
|
|
aString.AppendLiteral(" top");
|
|
|
|
} else if (yValue == 1.0f) {
|
|
|
|
aString.AppendLiteral(" bottom");
|
|
|
|
} else if (yValue != 0.5f) { // do not write "center" keyword
|
|
|
|
NS_NOTREACHED("invalid box position");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (xValue == 0.0f) {
|
|
|
|
aString.AppendLiteral(" left");
|
|
|
|
} else if (xValue == 1.0f) {
|
|
|
|
aString.AppendLiteral(" right");
|
|
|
|
} else if (xValue != 0.5f) { // do not write "center" keyword
|
|
|
|
NS_NOTREACHED("invalid box position");
|
|
|
|
}
|
|
|
|
|
|
|
|
aNeedSep = true;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
void
|
2009-08-01 15:53:40 +00:00
|
|
|
nsComputedDOMStyle::GetCSSGradientString(const nsStyleGradient* aGradient,
|
|
|
|
nsAString& aString)
|
|
|
|
{
|
2009-11-02 19:36:43 +00:00
|
|
|
if (aGradient->mRepeating) {
|
|
|
|
if (aGradient->mShape == NS_STYLE_GRADIENT_SHAPE_LINEAR)
|
|
|
|
aString.AssignLiteral("-moz-repeating-linear-gradient(");
|
|
|
|
else
|
|
|
|
aString.AssignLiteral("-moz-repeating-radial-gradient(");
|
|
|
|
} else {
|
|
|
|
if (aGradient->mShape == NS_STYLE_GRADIENT_SHAPE_LINEAR)
|
|
|
|
aString.AssignLiteral("-moz-linear-gradient(");
|
|
|
|
else
|
|
|
|
aString.AssignLiteral("-moz-radial-gradient(");
|
|
|
|
}
|
2009-08-01 15:53:40 +00:00
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool needSep = false;
|
2009-11-02 19:36:43 +00:00
|
|
|
nsAutoString tokenString;
|
2009-08-01 15:53:40 +00:00
|
|
|
nsROCSSPrimitiveValue *tmpVal = GetROCSSPrimitiveValue();
|
|
|
|
|
2011-10-22 19:41:11 +00:00
|
|
|
if (aGradient->mToCorner) {
|
|
|
|
AppendCSSGradientToBoxPosition(aGradient, aString, needSep);
|
|
|
|
} else {
|
2012-02-25 05:23:14 +00:00
|
|
|
if (aGradient->mBgPosX.GetUnit() != eStyleUnit_None) {
|
2011-10-22 19:41:11 +00:00
|
|
|
AppendCSSGradientLength(aGradient->mBgPosX, tmpVal, aString);
|
|
|
|
needSep = true;
|
|
|
|
}
|
2012-02-25 05:23:14 +00:00
|
|
|
if (aGradient->mBgPosY.GetUnit() != eStyleUnit_None) {
|
2011-10-22 19:41:11 +00:00
|
|
|
if (needSep) {
|
|
|
|
aString.AppendLiteral(" ");
|
|
|
|
}
|
|
|
|
AppendCSSGradientLength(aGradient->mBgPosY, tmpVal, aString);
|
|
|
|
needSep = true;
|
2009-11-02 19:36:43 +00:00
|
|
|
}
|
|
|
|
}
|
2012-02-25 05:23:14 +00:00
|
|
|
if (aGradient->mAngle.GetUnit() != eStyleUnit_None) {
|
2009-11-02 19:36:43 +00:00
|
|
|
if (needSep) {
|
|
|
|
aString.AppendLiteral(" ");
|
|
|
|
}
|
|
|
|
tmpVal->SetNumber(aGradient->mAngle.GetAngleValue());
|
|
|
|
tmpVal->GetCssText(tokenString);
|
|
|
|
aString.Append(tokenString);
|
2012-02-25 05:23:14 +00:00
|
|
|
switch (aGradient->mAngle.GetUnit()) {
|
2009-11-02 19:36:43 +00:00
|
|
|
case eStyleUnit_Degree: aString.AppendLiteral("deg"); break;
|
|
|
|
case eStyleUnit_Grad: aString.AppendLiteral("grad"); break;
|
|
|
|
case eStyleUnit_Radian: aString.AppendLiteral("rad"); break;
|
2012-02-04 05:01:23 +00:00
|
|
|
case eStyleUnit_Turn: aString.AppendLiteral("turn"); break;
|
2009-11-02 19:36:43 +00:00
|
|
|
default: NS_NOTREACHED("unrecognized angle unit");
|
|
|
|
}
|
2011-10-17 14:59:28 +00:00
|
|
|
needSep = true;
|
2009-08-01 15:53:40 +00:00
|
|
|
}
|
|
|
|
|
2009-11-02 19:36:43 +00:00
|
|
|
if (aGradient->mShape != NS_STYLE_GRADIENT_SHAPE_LINEAR) {
|
|
|
|
if (needSep) {
|
|
|
|
aString.AppendLiteral(", ");
|
|
|
|
}
|
|
|
|
AppendASCIItoUTF16(nsCSSProps::
|
|
|
|
ValueToKeyword(aGradient->mShape,
|
|
|
|
nsCSSProps::kRadialGradientShapeKTable),
|
|
|
|
aString);
|
|
|
|
if (aGradient->mSize != NS_STYLE_GRADIENT_SIZE_FARTHEST_CORNER) {
|
|
|
|
aString.AppendLiteral(" ");
|
|
|
|
AppendASCIItoUTF16(nsCSSProps::
|
|
|
|
ValueToKeyword(aGradient->mSize,
|
|
|
|
nsCSSProps::kRadialGradientSizeKTable),
|
|
|
|
aString);
|
|
|
|
}
|
2011-10-17 14:59:28 +00:00
|
|
|
needSep = true;
|
2009-08-01 15:53:40 +00:00
|
|
|
}
|
|
|
|
|
2009-11-02 19:36:43 +00:00
|
|
|
|
2009-08-01 15:53:40 +00:00
|
|
|
// color stops
|
|
|
|
for (PRUint32 i = 0; i < aGradient->mStops.Length(); ++i) {
|
2009-11-02 19:36:43 +00:00
|
|
|
if (needSep) {
|
|
|
|
aString.AppendLiteral(", ");
|
|
|
|
}
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(tmpVal, aGradient->mStops[i].mColor);
|
2009-08-01 15:53:40 +00:00
|
|
|
tmpVal->GetCssText(tokenString);
|
|
|
|
aString.Append(tokenString);
|
2009-11-02 19:36:43 +00:00
|
|
|
|
2012-02-25 05:23:14 +00:00
|
|
|
if (aGradient->mStops[i].mLocation.GetUnit() != eStyleUnit_None) {
|
2009-11-02 19:36:43 +00:00
|
|
|
aString.AppendLiteral(" ");
|
|
|
|
AppendCSSGradientLength(aGradient->mStops[i].mLocation, tmpVal, aString);
|
|
|
|
}
|
2011-10-17 14:59:28 +00:00
|
|
|
needSep = true;
|
2009-08-01 15:53:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
delete tmpVal;
|
|
|
|
aString.AppendLiteral(")");
|
|
|
|
}
|
|
|
|
|
2009-08-21 20:39:25 +00:00
|
|
|
// -moz-image-rect(<uri>, <top>, <right>, <bottom>, <left>)
|
2011-03-04 17:28:57 +00:00
|
|
|
void
|
2009-08-21 20:39:25 +00:00
|
|
|
nsComputedDOMStyle::GetImageRectString(nsIURI* aURI,
|
|
|
|
const nsStyleSides& aCropRect,
|
|
|
|
nsString& aString)
|
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(true);
|
2009-08-21 20:39:25 +00:00
|
|
|
|
|
|
|
// <uri>
|
|
|
|
nsROCSSPrimitiveValue *valURI = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(valURI);
|
2009-08-21 20:39:25 +00:00
|
|
|
valURI->SetURI(aURI);
|
|
|
|
|
|
|
|
// <top>, <right>, <bottom>, <left>
|
|
|
|
NS_FOR_CSS_SIDES(side) {
|
|
|
|
nsROCSSPrimitiveValue *valSide = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(valSide);
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(valSide, aCropRect.Get(side), false);
|
2009-08-21 20:39:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
nsAutoString argumentString;
|
|
|
|
valueList->GetCssText(argumentString);
|
|
|
|
delete valueList;
|
|
|
|
|
|
|
|
aString = NS_LITERAL_STRING("-moz-image-rect(") +
|
|
|
|
argumentString +
|
|
|
|
NS_LITERAL_STRING(")");
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
void
|
2009-08-21 20:39:25 +00:00
|
|
|
nsComputedDOMStyle::SetValueToStyleImage(const nsStyleImage& aStyleImage,
|
|
|
|
nsROCSSPrimitiveValue* aValue)
|
|
|
|
{
|
|
|
|
switch (aStyleImage.GetType()) {
|
|
|
|
case eStyleImageType_Image:
|
|
|
|
{
|
|
|
|
imgIRequest *req = aStyleImage.GetImageData();
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
|
|
|
req->GetURI(getter_AddRefs(uri));
|
|
|
|
|
|
|
|
const nsStyleSides* cropRect = aStyleImage.GetCropRect();
|
|
|
|
if (cropRect) {
|
|
|
|
nsAutoString imageRectString;
|
2011-03-04 17:28:57 +00:00
|
|
|
GetImageRectString(uri, *cropRect, imageRectString);
|
2009-08-21 20:39:25 +00:00
|
|
|
aValue->SetString(imageRectString);
|
|
|
|
} else {
|
|
|
|
aValue->SetURI(uri);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case eStyleImageType_Gradient:
|
|
|
|
{
|
|
|
|
nsAutoString gradientString;
|
2011-03-04 17:28:57 +00:00
|
|
|
GetCSSGradientString(aStyleImage.GetGradientData(),
|
|
|
|
gradientString);
|
2009-08-21 20:39:25 +00:00
|
|
|
aValue->SetString(gradientString);
|
|
|
|
break;
|
|
|
|
}
|
2010-08-13 13:33:37 +00:00
|
|
|
case eStyleImageType_Element:
|
|
|
|
{
|
|
|
|
nsAutoString elementId;
|
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(
|
|
|
|
nsDependentString(aStyleImage.GetElementId()), elementId);
|
|
|
|
nsAutoString elementString = NS_LITERAL_STRING("-moz-element(#") +
|
|
|
|
elementId +
|
|
|
|
NS_LITERAL_STRING(")");
|
|
|
|
aValue->SetString(elementString);
|
|
|
|
break;
|
|
|
|
}
|
2009-08-21 20:39:25 +00:00
|
|
|
case eStyleImageType_Null:
|
|
|
|
aValue->SetIdent(eCSSKeyword_none);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
NS_NOTREACHED("unexpected image type");
|
2011-03-04 17:28:57 +00:00
|
|
|
break;
|
2009-08-21 20:39:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundImage()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
const nsStyleBackground* bg = GetStyleBackground();
|
2009-02-19 15:29:28 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-02-19 20:33:09 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
for (PRUint32 i = 0, i_end = bg->mImageCount; i < i_end; ++i) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2009-02-20 05:29:21 +00:00
|
|
|
|
2009-08-21 20:39:25 +00:00
|
|
|
const nsStyleImage& image = bg->mLayers[i].mImage;
|
2011-03-04 17:28:57 +00:00
|
|
|
SetValueToStyleImage(image, val);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundInlinePolicy()
|
2003-01-17 09:33:52 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(
|
|
|
|
GetStyleBackground()->mBackgroundInlinePolicy,
|
|
|
|
nsCSSProps::kBackgroundInlinePolicyKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2003-01-17 09:33:52 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundOrigin()
|
2002-10-08 10:24:53 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
return GetBackgroundList(&nsStyleBackground::Layer::mOrigin,
|
|
|
|
&nsStyleBackground::mOriginCount,
|
2011-03-04 17:28:57 +00:00
|
|
|
nsCSSProps::kBackgroundOriginKTable);
|
2002-10-08 10:24:53 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundPosition()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
const nsStyleBackground* bg = GetStyleBackground();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
for (PRUint32 i = 0, i_end = bg->mPositionCount; i < i_end; ++i) {
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *itemList = GetROCSSValueList(false);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(itemList);
|
2007-07-22 17:58:37 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
nsROCSSPrimitiveValue *valX = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valX);
|
2009-02-19 01:13:25 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
nsROCSSPrimitiveValue *valY = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valY);
|
2009-02-19 15:29:28 +00:00
|
|
|
|
2009-02-20 05:29:21 +00:00
|
|
|
const nsStyleBackground::Position &pos = bg->mLayers[i].mPosition;
|
2009-02-19 20:33:09 +00:00
|
|
|
|
2011-05-23 20:36:18 +00:00
|
|
|
if (!pos.mXPosition.mHasPercent) {
|
|
|
|
NS_ABORT_IF_FALSE(pos.mXPosition.mPercent == 0.0f,
|
|
|
|
"Shouldn't have mPercent!");
|
2010-09-15 15:11:26 +00:00
|
|
|
valX->SetAppUnits(pos.mXPosition.mLength);
|
2011-05-23 20:36:18 +00:00
|
|
|
} else if (pos.mXPosition.mLength == 0) {
|
|
|
|
valX->SetPercent(pos.mXPosition.mPercent);
|
2009-02-20 05:29:21 +00:00
|
|
|
} else {
|
2011-05-23 20:36:18 +00:00
|
|
|
SetValueToCalc(&pos.mXPosition, valX);
|
2009-02-20 05:29:21 +00:00
|
|
|
}
|
|
|
|
|
2011-05-23 20:36:18 +00:00
|
|
|
if (!pos.mYPosition.mHasPercent) {
|
|
|
|
NS_ABORT_IF_FALSE(pos.mYPosition.mPercent == 0.0f,
|
|
|
|
"Shouldn't have mPercent!");
|
2010-09-15 15:11:26 +00:00
|
|
|
valY->SetAppUnits(pos.mYPosition.mLength);
|
2011-05-23 20:36:18 +00:00
|
|
|
} else if (pos.mYPosition.mLength == 0) {
|
|
|
|
valY->SetPercent(pos.mYPosition.mPercent);
|
2009-02-20 05:29:21 +00:00
|
|
|
} else {
|
2011-05-23 20:36:18 +00:00
|
|
|
SetValueToCalc(&pos.mYPosition, valY);
|
2009-02-20 05:29:21 +00:00
|
|
|
}
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBackgroundRepeat()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
2009-02-20 05:29:21 +00:00
|
|
|
return GetBackgroundList(&nsStyleBackground::Layer::mRepeat,
|
|
|
|
&nsStyleBackground::mRepeatCount,
|
2011-03-04 17:28:57 +00:00
|
|
|
nsCSSProps::kBackgroundRepeatKTable);
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozBackgroundSize()
|
2009-05-28 18:09:05 +00:00
|
|
|
{
|
|
|
|
const nsStyleBackground* bg = GetStyleBackground();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-05-28 18:09:05 +00:00
|
|
|
|
|
|
|
for (PRUint32 i = 0, i_end = bg->mSizeCount; i < i_end; ++i) {
|
|
|
|
const nsStyleBackground::Size &size = bg->mLayers[i].mSize;
|
|
|
|
|
|
|
|
switch (size.mWidthType) {
|
|
|
|
case nsStyleBackground::Size::eContain:
|
|
|
|
case nsStyleBackground::Size::eCover: {
|
|
|
|
NS_ABORT_IF_FALSE(size.mWidthType == size.mHeightType,
|
|
|
|
"unsynced types");
|
|
|
|
nsCSSKeyword keyword = size.mWidthType == nsStyleBackground::Size::eContain
|
|
|
|
? eCSSKeyword_contain
|
|
|
|
: eCSSKeyword_cover;
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2009-05-28 18:09:05 +00:00
|
|
|
val->SetIdent(keyword);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default: {
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *itemList = GetROCSSValueList(false);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(itemList);
|
2009-05-28 18:09:05 +00:00
|
|
|
|
|
|
|
nsROCSSPrimitiveValue* valX = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valX);
|
2010-12-16 22:01:00 +00:00
|
|
|
nsROCSSPrimitiveValue* valY = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valY);
|
2009-05-28 18:09:05 +00:00
|
|
|
|
|
|
|
if (size.mWidthType == nsStyleBackground::Size::eAuto) {
|
|
|
|
valX->SetIdent(eCSSKeyword_auto);
|
|
|
|
} else {
|
2010-09-15 15:11:26 +00:00
|
|
|
NS_ABORT_IF_FALSE(size.mWidthType ==
|
|
|
|
nsStyleBackground::Size::eLengthPercentage,
|
2009-05-28 18:09:05 +00:00
|
|
|
"bad mWidthType");
|
2011-05-23 20:36:18 +00:00
|
|
|
if (!size.mWidth.mHasPercent &&
|
2010-09-15 15:11:26 +00:00
|
|
|
// negative values must have come from calc()
|
2011-05-23 20:36:18 +00:00
|
|
|
size.mWidth.mLength >= 0) {
|
|
|
|
NS_ABORT_IF_FALSE(size.mWidth.mPercent == 0.0f,
|
|
|
|
"Shouldn't have mPercent");
|
2010-09-15 15:11:26 +00:00
|
|
|
valX->SetAppUnits(size.mWidth.mLength);
|
2011-05-23 20:36:18 +00:00
|
|
|
} else if (size.mWidth.mLength == 0 &&
|
|
|
|
// negative values must have come from calc()
|
|
|
|
size.mWidth.mPercent >= 0.0f) {
|
|
|
|
valX->SetPercent(size.mWidth.mPercent);
|
2010-09-15 15:11:26 +00:00
|
|
|
} else {
|
2011-05-23 20:36:18 +00:00
|
|
|
SetValueToCalc(&size.mWidth, valX);
|
2010-09-15 15:11:26 +00:00
|
|
|
}
|
2009-05-28 18:09:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (size.mHeightType == nsStyleBackground::Size::eAuto) {
|
|
|
|
valY->SetIdent(eCSSKeyword_auto);
|
|
|
|
} else {
|
2010-09-15 15:11:26 +00:00
|
|
|
NS_ABORT_IF_FALSE(size.mHeightType ==
|
|
|
|
nsStyleBackground::Size::eLengthPercentage,
|
2009-05-28 18:09:05 +00:00
|
|
|
"bad mHeightType");
|
2011-05-23 20:36:18 +00:00
|
|
|
if (!size.mHeight.mHasPercent &&
|
2010-09-15 15:11:26 +00:00
|
|
|
// negative values must have come from calc()
|
2011-05-23 20:36:18 +00:00
|
|
|
size.mHeight.mLength >= 0) {
|
|
|
|
NS_ABORT_IF_FALSE(size.mHeight.mPercent == 0.0f,
|
|
|
|
"Shouldn't have mPercent");
|
2010-09-15 15:11:26 +00:00
|
|
|
valY->SetAppUnits(size.mHeight.mLength);
|
2011-05-23 20:36:18 +00:00
|
|
|
} else if (size.mHeight.mLength == 0 &&
|
|
|
|
// negative values must have come from calc()
|
|
|
|
size.mHeight.mPercent >= 0.0f) {
|
|
|
|
valY->SetPercent(size.mHeight.mPercent);
|
2010-09-15 15:11:26 +00:00
|
|
|
} else {
|
2011-05-23 20:36:18 +00:00
|
|
|
SetValueToCalc(&size.mHeight, valY);
|
2010-09-15 15:11:26 +00:00
|
|
|
}
|
2009-05-28 18:09:05 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-05-28 18:09:05 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPadding()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
// return null per spec.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPaddingTop()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetPaddingWidthFor(NS_SIDE_TOP);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPaddingBottom()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetPaddingWidthFor(NS_SIDE_BOTTOM);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPaddingLeft()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetPaddingWidthFor(NS_SIDE_LEFT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPaddingRight()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetPaddingWidthFor(NS_SIDE_RIGHT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderCollapse()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTableBorder()->mBorderCollapse,
|
|
|
|
nsCSSProps::kBorderCollapseKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderSpacing()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2004-09-10 03:26:58 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue* xSpacing = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(xSpacing);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue* ySpacing = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(ySpacing);
|
2004-09-10 03:26:58 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
const nsStyleTableBorder *border = GetStyleTableBorder();
|
2008-09-13 03:45:37 +00:00
|
|
|
xSpacing->SetAppUnits(border->mBorderSpacingX);
|
|
|
|
ySpacing->SetAppUnits(border->mBorderSpacingY);
|
2006-12-30 05:17:59 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetCaptionSide()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTableBorder()->mCaptionSide,
|
|
|
|
nsCSSProps::kCaptionSideKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetEmptyCells()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTableBorder()->mEmptyCells,
|
|
|
|
nsCSSProps::kEmptyCellsKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTableLayout()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTable()->mLayoutStrategy,
|
|
|
|
nsCSSProps::kTableLayoutKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
// return null per spec.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderStyleFor(NS_SIDE_TOP);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderStyleFor(NS_SIDE_BOTTOM);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
2011-03-04 17:28:57 +00:00
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderLeftStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderStyleFor(NS_SIDE_LEFT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderRightStyle()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderStyleFor(NS_SIDE_RIGHT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomColors()
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorsFor(NS_SIDE_BOTTOM);
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderLeftColors()
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorsFor(NS_SIDE_LEFT);
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderRightColors()
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorsFor(NS_SIDE_RIGHT);
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopColors()
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorsFor(NS_SIDE_TOP);
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomLeftRadius()
|
2002-06-21 06:42:21 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleBorder()->mBorderRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_BOTTOM_LEFT, true);
|
2002-06-21 06:42:21 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomRightRadius()
|
2002-06-21 06:42:21 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleBorder()->mBorderRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_BOTTOM_RIGHT, true);
|
2002-06-21 06:42:21 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopLeftRadius()
|
2002-06-21 06:42:21 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleBorder()->mBorderRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_TOP_LEFT, true);
|
2002-06-21 06:42:21 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopRightRadius()
|
2002-06-21 06:42:21 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleBorder()->mBorderRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_TOP_RIGHT, true);
|
2002-06-21 06:42:21 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderWidth()
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
// return null per spec.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopWidth()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderWidthFor(NS_SIDE_TOP);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomWidth()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderWidthFor(NS_SIDE_BOTTOM);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderLeftWidth()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderWidthFor(NS_SIDE_LEFT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderRightWidth()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderWidthFor(NS_SIDE_RIGHT);
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderTopColor()
|
2001-03-30 02:08:48 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorFor(NS_SIDE_TOP);
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderBottomColor()
|
2001-03-30 02:08:48 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorFor(NS_SIDE_BOTTOM);
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderLeftColor()
|
2001-03-30 02:08:48 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorFor(NS_SIDE_LEFT);
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderRightColor()
|
2001-03-30 02:08:48 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetBorderColorFor(NS_SIDE_RIGHT);
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarginWidth()
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
// return null per spec.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarginTopWidth()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetMarginWidthFor(NS_SIDE_TOP);
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarginBottomWidth()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetMarginWidthFor(NS_SIDE_BOTTOM);
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarginLeftWidth()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetMarginWidthFor(NS_SIDE_LEFT);
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarginRightWidth()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetMarginWidthFor(NS_SIDE_RIGHT);
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarkerOffset()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleContent()->mMarkerOffset, false);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-05-10 13:47:46 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOrient()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mOrient,
|
|
|
|
nsCSSProps::kOrientKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutline()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
// return null per spec.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineWidth()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleOutline* outline = GetStyleOutline();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2009-01-23 01:28:13 +00:00
|
|
|
nscoord width;
|
|
|
|
if (outline->GetOutlineStyle() == NS_STYLE_BORDER_STYLE_NONE) {
|
|
|
|
NS_ASSERTION(outline->GetOutlineWidth(width) && width == 0,
|
|
|
|
"unexpected width");
|
|
|
|
width = 0;
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
2009-01-23 01:28:13 +00:00
|
|
|
#ifdef DEBUG
|
2011-09-29 06:19:26 +00:00
|
|
|
bool res =
|
2009-01-23 01:28:13 +00:00
|
|
|
#endif
|
|
|
|
outline->GetOutlineWidth(width);
|
|
|
|
NS_ASSERTION(res, "percent outline doesn't exist");
|
2006-12-30 05:17:59 +00:00
|
|
|
}
|
2009-01-23 01:28:13 +00:00
|
|
|
val->SetAppUnits(width);
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineStyle()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleOutline()->GetOutlineStyle(),
|
|
|
|
nsCSSProps::kOutlineStyleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineOffset()
|
2004-10-26 12:57:15 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2008-09-13 03:45:37 +00:00
|
|
|
val->SetAppUnits(GetStyleOutline()->mOutlineOffset);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-10-26 12:57:15 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineRadiusBottomLeft()
|
2004-10-14 03:32:28 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleOutline()->mOutlineRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_BOTTOM_LEFT, false);
|
2004-10-14 03:32:28 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineRadiusBottomRight()
|
2004-10-14 03:32:28 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleOutline()->mOutlineRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_BOTTOM_RIGHT, false);
|
2004-10-14 03:32:28 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineRadiusTopLeft()
|
2004-10-14 03:32:28 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleOutline()->mOutlineRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_TOP_LEFT, false);
|
2004-10-14 03:32:28 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineRadiusTopRight()
|
2004-10-14 03:32:28 +00:00
|
|
|
{
|
2008-10-01 05:50:52 +00:00
|
|
|
return GetEllipseRadii(GetStyleOutline()->mOutlineRadius,
|
2011-10-17 14:59:28 +00:00
|
|
|
NS_CORNER_TOP_RIGHT, false);
|
2004-10-14 03:32:28 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOutlineColor()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nscolor color;
|
2007-03-15 16:16:20 +00:00
|
|
|
if (!GetStyleOutline()->GetOutlineColor(color))
|
|
|
|
color = GetStyleColor()->mColor;
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, color);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-11 20:47:06 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
2008-10-01 05:50:52 +00:00
|
|
|
nsComputedDOMStyle::GetEllipseRadii(const nsStyleCorners& aRadius,
|
|
|
|
PRUint8 aFullCorner,
|
2011-09-29 06:19:26 +00:00
|
|
|
bool aIsBorder) // else outline
|
2004-10-14 03:32:28 +00:00
|
|
|
{
|
2010-10-07 04:25:47 +00:00
|
|
|
nsStyleCoord radiusX, radiusY;
|
|
|
|
if (mInnerFrame && aIsBorder) {
|
|
|
|
nscoord radii[8];
|
|
|
|
mInnerFrame->GetBorderRadii(radii);
|
2011-10-17 14:59:28 +00:00
|
|
|
radiusX.SetCoordValue(radii[NS_FULL_TO_HALF_CORNER(aFullCorner, false)]);
|
|
|
|
radiusY.SetCoordValue(radii[NS_FULL_TO_HALF_CORNER(aFullCorner, true)]);
|
2010-10-07 04:25:47 +00:00
|
|
|
} else {
|
2011-10-17 14:59:28 +00:00
|
|
|
radiusX = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, false));
|
|
|
|
radiusY = aRadius.Get(NS_FULL_TO_HALF_CORNER(aFullCorner, true));
|
2010-10-07 04:25:47 +00:00
|
|
|
|
|
|
|
if (mInnerFrame) {
|
|
|
|
// We need to convert to absolute coordinates before doing the
|
|
|
|
// equality check below.
|
|
|
|
nscoord v;
|
|
|
|
|
|
|
|
v = StyleCoordToNSCoord(radiusX,
|
|
|
|
&nsComputedDOMStyle::GetFrameBorderRectWidth,
|
2011-10-17 14:59:28 +00:00
|
|
|
0, true);
|
2010-10-07 04:25:47 +00:00
|
|
|
radiusX.SetCoordValue(v);
|
|
|
|
|
|
|
|
v = StyleCoordToNSCoord(radiusY,
|
|
|
|
&nsComputedDOMStyle::GetFrameBorderRectHeight,
|
2011-10-17 14:59:28 +00:00
|
|
|
0, true);
|
2010-10-07 04:25:47 +00:00
|
|
|
radiusY.SetCoordValue(v);
|
|
|
|
}
|
2010-10-07 04:25:47 +00:00
|
|
|
}
|
|
|
|
|
2008-10-01 05:50:52 +00:00
|
|
|
// for compatibility, return a single value if X and Y are equal
|
|
|
|
if (radiusX == radiusY) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2004-10-14 03:32:28 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, radiusX, true);
|
2004-10-14 03:32:28 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
|
|
|
}
|
2008-10-01 05:50:52 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2008-10-01 05:50:52 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsROCSSPrimitiveValue *valX = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(valX);
|
2008-10-01 05:50:52 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsROCSSPrimitiveValue *valY = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(valY);
|
2008-10-01 05:50:52 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(valX, radiusX, true);
|
|
|
|
SetValueToCoord(valY, radiusY, true);
|
2011-03-04 17:28:57 +00:00
|
|
|
|
|
|
|
return valueList;
|
2004-10-14 03:32:28 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
2008-07-08 00:56:52 +00:00
|
|
|
nsComputedDOMStyle::GetCSSShadowArray(nsCSSShadowArray* aArray,
|
|
|
|
const nscolor& aDefaultColor,
|
2011-09-29 06:19:26 +00:00
|
|
|
bool aIsBoxShadow)
|
2008-07-08 00:56:52 +00:00
|
|
|
{
|
|
|
|
if (!aArray) {
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2008-09-13 03:45:37 +00:00
|
|
|
static nscoord nsCSSShadowItem::* const shadowValuesNoSpread[] = {
|
2008-07-08 00:56:52 +00:00
|
|
|
&nsCSSShadowItem::mXOffset,
|
|
|
|
&nsCSSShadowItem::mYOffset,
|
|
|
|
&nsCSSShadowItem::mRadius
|
|
|
|
};
|
|
|
|
|
2008-09-13 03:45:37 +00:00
|
|
|
static nscoord nsCSSShadowItem::* const shadowValuesWithSpread[] = {
|
2008-07-08 00:56:52 +00:00
|
|
|
&nsCSSShadowItem::mXOffset,
|
|
|
|
&nsCSSShadowItem::mYOffset,
|
|
|
|
&nsCSSShadowItem::mRadius,
|
|
|
|
&nsCSSShadowItem::mSpread
|
|
|
|
};
|
|
|
|
|
2008-09-13 03:45:37 +00:00
|
|
|
nscoord nsCSSShadowItem::* const * shadowValues;
|
2008-07-08 00:56:52 +00:00
|
|
|
PRUint32 shadowValuesLength;
|
2009-02-10 08:45:13 +00:00
|
|
|
if (aIsBoxShadow) {
|
2008-07-08 00:56:52 +00:00
|
|
|
shadowValues = shadowValuesWithSpread;
|
2011-10-11 05:50:08 +00:00
|
|
|
shadowValuesLength = ArrayLength(shadowValuesWithSpread);
|
2008-07-08 00:56:52 +00:00
|
|
|
} else {
|
|
|
|
shadowValues = shadowValuesNoSpread;
|
2011-10-11 05:50:08 +00:00
|
|
|
shadowValuesLength = ArrayLength(shadowValuesNoSpread);
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2008-07-08 00:56:52 +00:00
|
|
|
|
|
|
|
for (nsCSSShadowItem *item = aArray->ShadowAt(0),
|
2009-02-20 05:29:21 +00:00
|
|
|
*item_end = item + aArray->Length();
|
2008-07-08 00:56:52 +00:00
|
|
|
item < item_end; ++item) {
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *itemList = GetROCSSValueList(false);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(itemList);
|
2008-07-08 00:56:52 +00:00
|
|
|
|
|
|
|
// Color is either the specified shadow color or the foreground color
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(val);
|
2008-07-08 00:56:52 +00:00
|
|
|
nscolor shadowColor;
|
|
|
|
if (item->mHasColor) {
|
|
|
|
shadowColor = item->mColor;
|
|
|
|
} else {
|
|
|
|
shadowColor = aDefaultColor;
|
|
|
|
}
|
|
|
|
SetToRGBAColor(val, shadowColor);
|
|
|
|
|
|
|
|
// Set the offsets, blur radius, and spread if available
|
|
|
|
for (PRUint32 i = 0; i < shadowValuesLength; ++i) {
|
|
|
|
val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(val);
|
2008-09-13 03:45:37 +00:00
|
|
|
val->SetAppUnits(item->*(shadowValues[i]));
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
2009-02-10 08:45:13 +00:00
|
|
|
|
|
|
|
if (item->mInset && aIsBoxShadow) {
|
|
|
|
// This is an inset box-shadow
|
|
|
|
val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(val);
|
2009-02-10 08:45:13 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(NS_STYLE_BOX_SHADOW_INSET,
|
|
|
|
nsCSSProps::kBoxShadowTypeKTable));
|
|
|
|
}
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxShadow()
|
2008-07-08 00:56:52 +00:00
|
|
|
{
|
|
|
|
return GetCSSShadowArray(GetStyleBorder()->mBoxShadow,
|
|
|
|
GetStyleColor()->mColor,
|
2011-10-17 14:59:28 +00:00
|
|
|
true);
|
2008-07-08 00:56:52 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetZIndex()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mZIndex, false);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetListStyleImage()
|
2001-03-08 00:55:01 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-03-11 21:03:08 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleList* list = GetStyleList();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2009-12-11 04:02:13 +00:00
|
|
|
if (!list->GetListStyleImage()) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
2009-12-11 04:02:13 +00:00
|
|
|
if (list->GetListStyleImage()) {
|
|
|
|
list->GetListStyleImage()->GetURI(getter_AddRefs(uri));
|
2002-01-24 04:22:59 +00:00
|
|
|
}
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetURI(uri);
|
2001-03-11 21:03:08 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-12 21:16:22 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetListStylePosition()
|
2002-03-12 21:16:22 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleList()->mListStylePosition,
|
|
|
|
nsCSSProps::kListStylePositionKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-12 21:16:22 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetListStyleType()
|
2002-03-12 21:16:22 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleList()->mListStyleType,
|
|
|
|
nsCSSProps::kListStyleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-08 00:55:01 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetImageRegion()
|
2004-01-15 02:25:08 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleList* list = GetStyleList();
|
2004-01-15 02:25:08 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (list->mImageRegion.width <= 0 || list->mImageRegion.height <= 0) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
|
|
|
// create the cssvalues for the sides, stick them in the rect object
|
2011-03-04 17:28:57 +00:00
|
|
|
nsROCSSPrimitiveValue *topVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *rightVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *bottomVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *leftVal = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:56 +00:00
|
|
|
nsDOMCSSRect * domRect = new nsDOMCSSRect(topVal, rightVal,
|
|
|
|
bottomVal, leftVal);
|
|
|
|
topVal->SetAppUnits(list->mImageRegion.y);
|
|
|
|
rightVal->SetAppUnits(list->mImageRegion.width + list->mImageRegion.x);
|
|
|
|
bottomVal->SetAppUnits(list->mImageRegion.height + list->mImageRegion.y);
|
|
|
|
leftVal->SetAppUnits(list->mImageRegion.x);
|
|
|
|
val->SetRect(domRect);
|
2004-01-15 02:25:08 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-01-15 02:25:08 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetLineHeight()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
nscoord lineHeight;
|
2009-05-18 22:13:12 +00:00
|
|
|
if (GetLineHeightCoord(lineHeight)) {
|
|
|
|
val->SetAppUnits(lineHeight);
|
|
|
|
} else {
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleText()->mLineHeight, true,
|
2009-05-18 22:13:12 +00:00
|
|
|
nsnull, nsCSSProps::kLineHeightKTable);
|
|
|
|
}
|
2002-03-16 17:04:35 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetVerticalAlign()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleTextReset()->mVerticalAlign, false,
|
2007-02-20 18:43:16 +00:00
|
|
|
&nsComputedDOMStyle::GetLineHeightCoord,
|
|
|
|
nsCSSProps::kVerticalAlignKTable);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextAlign()
|
2001-05-04 11:30:34 +00:00
|
|
|
{
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mTextAlign,
|
|
|
|
nsCSSProps::kTextAlignKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-05-09 03:29:09 +00:00
|
|
|
}
|
|
|
|
|
2012-01-12 17:52:21 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextAlignLast()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mTextAlignLast,
|
|
|
|
nsCSSProps::kTextAlignLastKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-04-23 05:16:41 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTextBlink()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTextReset()->mTextBlink,
|
|
|
|
nsCSSProps::kTextBlinkKTable));
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextDecoration()
|
2001-05-09 03:29:09 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-05-09 03:29:09 +00:00
|
|
|
|
2011-05-20 05:56:23 +00:00
|
|
|
const nsStyleTextReset* textReset = GetStyleTextReset();
|
|
|
|
|
|
|
|
// If decoration style or color wasn't initial value, the author knew the
|
|
|
|
// text-decoration is a shorthand property in CSS 3.
|
|
|
|
// Return NULL in such cases.
|
|
|
|
if (textReset->GetDecorationStyle() != NS_STYLE_TEXT_DECORATION_STYLE_SOLID) {
|
|
|
|
return nsnull;
|
|
|
|
}
|
|
|
|
|
|
|
|
nscolor color;
|
2011-09-29 06:19:26 +00:00
|
|
|
bool isForegroundColor;
|
2011-05-20 05:56:23 +00:00
|
|
|
textReset->GetDecorationColor(color, isForegroundColor);
|
|
|
|
if (!isForegroundColor) {
|
|
|
|
return nsnull;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Otherwise, the web pages may have been written for CSS 2.1 or earlier,
|
|
|
|
// i.e., text-decoration was assumed as a longhand property. In that case,
|
|
|
|
// we should return computed value same as CSS 2.1 for backward compatibility.
|
|
|
|
|
|
|
|
PRUint8 line = textReset->mTextDecorationLine;
|
2011-04-23 05:16:41 +00:00
|
|
|
// Clear the -moz-anchor-decoration bit and the OVERRIDE_ALL bits -- we
|
|
|
|
// don't want these to appear in the computed style.
|
|
|
|
line &= ~(NS_STYLE_TEXT_DECORATION_LINE_PREF_ANCHORS |
|
|
|
|
NS_STYLE_TEXT_DECORATION_LINE_OVERRIDE_ALL);
|
2011-05-20 05:56:23 +00:00
|
|
|
PRUint8 blink = textReset->mTextBlink;
|
2001-09-28 07:39:41 +00:00
|
|
|
|
2011-04-23 05:16:41 +00:00
|
|
|
if (blink == NS_STYLE_TEXT_BLINK_NONE &&
|
|
|
|
line == NS_STYLE_TEXT_DECORATION_LINE_NONE) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
2011-04-23 05:16:41 +00:00
|
|
|
nsAutoString str;
|
|
|
|
if (line != NS_STYLE_TEXT_DECORATION_LINE_NONE) {
|
|
|
|
nsStyleUtil::AppendBitmaskCSSValue(eCSSProperty_text_decoration_line,
|
|
|
|
line, NS_STYLE_TEXT_DECORATION_LINE_UNDERLINE,
|
|
|
|
NS_STYLE_TEXT_DECORATION_LINE_LINE_THROUGH, str);
|
|
|
|
}
|
|
|
|
if (blink != NS_STYLE_TEXT_BLINK_NONE) {
|
|
|
|
if (!str.IsEmpty()) {
|
|
|
|
str.Append(PRUnichar(' '));
|
|
|
|
}
|
|
|
|
nsStyleUtil::AppendBitmaskCSSValue(eCSSProperty_text_blink, blink,
|
|
|
|
NS_STYLE_TEXT_BLINK_BLINK, NS_STYLE_TEXT_BLINK_BLINK, str);
|
|
|
|
}
|
|
|
|
val->SetString(str);
|
2001-05-09 03:29:09 +00:00
|
|
|
}
|
2001-09-28 07:39:41 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-05-04 11:30:34 +00:00
|
|
|
}
|
|
|
|
|
2011-03-31 12:26:35 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTextDecorationColor()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
nscolor color;
|
2011-09-29 06:19:26 +00:00
|
|
|
bool isForeground;
|
2011-03-31 12:26:35 +00:00
|
|
|
GetStyleTextReset()->GetDecorationColor(color, isForeground);
|
|
|
|
if (isForeground) {
|
|
|
|
color = GetStyleColor()->mColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
SetToRGBAColor(val, color);
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-04-23 05:16:41 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTextDecorationLine()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
PRInt32 intValue = GetStyleTextReset()->mTextDecorationLine;
|
|
|
|
|
|
|
|
if (NS_STYLE_TEXT_DECORATION_LINE_NONE == intValue) {
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
|
|
|
} else {
|
|
|
|
nsAutoString decorationLineString;
|
|
|
|
// Clear the -moz-anchor-decoration bit and the OVERRIDE_ALL bits -- we
|
|
|
|
// don't want these to appear in the computed style.
|
|
|
|
intValue &= ~(NS_STYLE_TEXT_DECORATION_LINE_PREF_ANCHORS |
|
|
|
|
NS_STYLE_TEXT_DECORATION_LINE_OVERRIDE_ALL);
|
|
|
|
nsStyleUtil::AppendBitmaskCSSValue(eCSSProperty_text_decoration_line,
|
|
|
|
intValue, NS_STYLE_TEXT_DECORATION_LINE_UNDERLINE,
|
|
|
|
NS_STYLE_TEXT_DECORATION_LINE_LINE_THROUGH, decorationLineString);
|
|
|
|
val->SetString(decorationLineString);
|
|
|
|
}
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-31 12:26:35 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTextDecorationStyle()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleTextReset()->GetDecorationStyle(),
|
|
|
|
nsCSSProps::kTextDecorationStyleKTable));
|
|
|
|
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextIndent()
|
2002-03-03 19:44:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleText()->mTextIndent, false,
|
2007-02-20 18:43:16 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentWidth);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-03 19:44:41 +00:00
|
|
|
}
|
|
|
|
|
2011-06-22 18:11:47 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextOverflow()
|
|
|
|
{
|
|
|
|
const nsStyleTextReset *style = GetStyleTextReset();
|
2011-10-12 16:20:46 +00:00
|
|
|
nsROCSSPrimitiveValue *first = GetROCSSPrimitiveValue();
|
|
|
|
const nsStyleTextOverflowSide *side = style->mTextOverflow.GetFirstValue();
|
|
|
|
if (side->mType == NS_STYLE_TEXT_OVERFLOW_STRING) {
|
2011-06-22 18:11:47 +00:00
|
|
|
nsString str;
|
2011-10-12 16:20:46 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSString(side->mString, str);
|
|
|
|
first->SetString(str);
|
2011-06-22 18:11:47 +00:00
|
|
|
} else {
|
2011-10-12 16:20:46 +00:00
|
|
|
first->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(side->mType,
|
2011-06-22 18:11:47 +00:00
|
|
|
nsCSSProps::kTextOverflowKTable));
|
|
|
|
}
|
2011-10-12 16:20:46 +00:00
|
|
|
side = style->mTextOverflow.GetSecondValue();
|
|
|
|
if (!side) {
|
|
|
|
return first;
|
2011-08-20 20:41:39 +00:00
|
|
|
}
|
2011-10-12 16:20:46 +00:00
|
|
|
nsROCSSPrimitiveValue *second = GetROCSSPrimitiveValue();
|
|
|
|
if (side->mType == NS_STYLE_TEXT_OVERFLOW_STRING) {
|
2011-08-20 20:41:39 +00:00
|
|
|
nsString str;
|
2011-10-12 16:20:46 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSString(side->mString, str);
|
|
|
|
second->SetString(str);
|
2011-08-20 20:41:39 +00:00
|
|
|
} else {
|
2011-10-12 16:20:46 +00:00
|
|
|
second->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(side->mType,
|
2011-08-20 20:41:39 +00:00
|
|
|
nsCSSProps::kTextOverflowKTable));
|
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2011-10-12 16:20:46 +00:00
|
|
|
valueList->AppendCSSValue(first);
|
|
|
|
valueList->AppendCSSValue(second);
|
2011-08-20 20:41:39 +00:00
|
|
|
return valueList;
|
2011-06-22 18:11:47 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextShadow()
|
2008-06-05 23:06:34 +00:00
|
|
|
{
|
2008-07-08 00:56:52 +00:00
|
|
|
return GetCSSShadowArray(GetStyleText()->mTextShadow,
|
|
|
|
GetStyleColor()->mColor,
|
2011-10-17 14:59:28 +00:00
|
|
|
false);
|
2008-06-05 23:06:34 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextTransform()
|
2002-03-03 19:44:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mTextTransform,
|
|
|
|
nsCSSProps::kTextTransformKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-03 19:44:41 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMozTabSize()
|
2009-09-26 20:23:47 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleText()->mTabSize);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2009-09-26 20:23:47 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetLetterSpacing()
|
2002-03-03 19:44:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleText()->mLetterSpacing, false);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-03 19:44:41 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetWordSpacing()
|
2002-03-03 19:44:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2008-12-28 01:58:14 +00:00
|
|
|
val->SetAppUnits(GetStyleText()->mWordSpacing);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-03 19:44:41 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetWhiteSpace()
|
2002-03-03 19:44:41 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mWhiteSpace,
|
|
|
|
nsCSSProps::kWhitespaceKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-03 19:44:41 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetWindowShadow()
|
2008-10-14 14:44:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUIReset()->mWindowShadow,
|
|
|
|
nsCSSProps::kWindowShadowKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-10-14 14:44:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetWordWrap()
|
2008-07-24 07:16:18 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mWordWrap,
|
|
|
|
nsCSSProps::kWordwrapKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2008-07-24 07:16:18 +00:00
|
|
|
}
|
|
|
|
|
2011-05-04 11:14:50 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetHyphens()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleText()->mHyphens,
|
|
|
|
nsCSSProps::kHyphensKTable));
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-11-24 02:48:23 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextSizeAdjust()
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
switch (GetStyleText()->mTextSizeAdjust) {
|
|
|
|
default:
|
|
|
|
NS_NOTREACHED("unexpected value");
|
|
|
|
// fall through
|
|
|
|
case NS_STYLE_TEXT_SIZE_ADJUST_AUTO:
|
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
|
|
|
break;
|
|
|
|
case NS_STYLE_TEXT_SIZE_ADJUST_NONE:
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPointerEvents()
|
2009-08-27 03:53:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleVisibility()->mPointerEvents,
|
|
|
|
nsCSSProps::kPointerEventsKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2009-08-27 03:53:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetVisibility()
|
2001-08-07 19:05:21 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleVisibility()->mVisible,
|
|
|
|
nsCSSProps::kVisibilityKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-12 21:16:22 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetDirection()
|
2002-03-12 21:16:22 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleVisibility()->mDirection,
|
|
|
|
nsCSSProps::kDirectionKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-12 21:16:22 +00:00
|
|
|
}
|
|
|
|
|
2012-02-23 16:19:00 +00:00
|
|
|
MOZ_STATIC_ASSERT(NS_STYLE_UNICODE_BIDI_NORMAL == 0,
|
|
|
|
"unicode-bidi style constants not as expected");
|
2011-10-18 12:51:57 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetUnicodeBidi()
|
2002-03-12 21:16:22 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-18 12:51:57 +00:00
|
|
|
PRInt32 intValue = GetStyleTextReset()->mUnicodeBidi;
|
|
|
|
|
|
|
|
if (NS_STYLE_UNICODE_BIDI_NORMAL == intValue) {
|
|
|
|
val->SetIdent(eCSSKeyword_normal);
|
|
|
|
} else {
|
|
|
|
nsAutoString unicodeBidiString;
|
|
|
|
nsStyleUtil::AppendBitmaskCSSValue(eCSSProperty_unicode_bidi, intValue,
|
|
|
|
NS_STYLE_UNICODE_BIDI_EMBED,
|
|
|
|
NS_STYLE_UNICODE_BIDI_PLAINTEXT,
|
|
|
|
unicodeBidiString);
|
|
|
|
val->SetString(unicodeBidiString);
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-12 21:16:22 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetCursor()
|
2002-03-12 21:16:22 +00:00
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2002-03-12 21:16:22 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleUserInterface *ui = GetStyleUserInterface();
|
2002-03-12 21:16:22 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
for (nsCursorImage *item = ui->mCursorArray,
|
|
|
|
*item_end = ui->mCursorArray + ui->mCursorArrayLength;
|
|
|
|
item < item_end; ++item) {
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *itemList = GetROCSSValueList(false);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(itemList);
|
2006-12-30 05:17:59 +00:00
|
|
|
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
2010-08-16 16:19:26 +00:00
|
|
|
item->GetImage()->GetURI(getter_AddRefs(uri));
|
2006-12-30 05:17:59 +00:00
|
|
|
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(val);
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetURI(uri);
|
|
|
|
|
|
|
|
if (item->mHaveHotspot) {
|
|
|
|
nsROCSSPrimitiveValue *valX = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valX);
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue *valY = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
itemList->AppendCSSValue(valY);
|
2005-07-01 04:29:42 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
valX->SetNumber(item->mHotspotX);
|
|
|
|
valY->SetNumber(item->mHotspotY);
|
2004-12-30 21:56:11 +00:00
|
|
|
}
|
2006-12-30 05:17:59 +00:00
|
|
|
}
|
2004-12-30 21:56:11 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(ui->mCursor,
|
|
|
|
nsCSSProps::kCursorKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2001-08-07 19:05:21 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAppearance()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mAppearance,
|
|
|
|
nsCSSProps::kAppearanceKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxAlign()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleXUL()->mBoxAlign,
|
|
|
|
nsCSSProps::kBoxAlignKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxDirection()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleXUL()->mBoxDirection,
|
|
|
|
nsCSSProps::kBoxDirectionKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxFlex()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetNumber(GetStyleXUL()->mBoxFlex);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxOrdinalGroup()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2006-12-30 05:17:59 +00:00
|
|
|
val->SetNumber(GetStyleXUL()->mBoxOrdinal);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxOrient()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleXUL()->mBoxOrient,
|
|
|
|
nsCSSProps::kBoxOrientKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxPack()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleXUL()->mBoxPack,
|
|
|
|
nsCSSProps::kBoxPackKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBoxSizing()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStylePosition()->mBoxSizing,
|
|
|
|
nsCSSProps::kBoxSizingKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
/* Border image properties */
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
2011-12-22 23:34:45 +00:00
|
|
|
nsComputedDOMStyle::DoGetBorderImageSource()
|
2008-07-17 06:30:25 +00:00
|
|
|
{
|
|
|
|
const nsStyleBorder* border = GetStyleBorder();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
imgIRequest* imgSrc = border->GetBorderImage();
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
if (imgSrc) {
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
|
|
|
imgSrc->GetURI(getter_AddRefs(uri));
|
|
|
|
val->SetURI(uri);
|
|
|
|
} else {
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2008-07-17 06:30:25 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
return val;
|
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderImageSlice()
|
|
|
|
{
|
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(false);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
const nsStyleBorder* border = GetStyleBorder();
|
|
|
|
// Four slice numbers.
|
|
|
|
NS_FOR_CSS_SIDES (side) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(val);
|
|
|
|
SetValueToCoord(val, border->mBorderImageSlice.Get(side), nsnull, nsnull);
|
2008-07-17 06:30:25 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
// Fill keyword.
|
|
|
|
if (NS_STYLE_BORDER_IMAGE_SLICE_FILL == border->mBorderImageFill) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(val);
|
|
|
|
val->SetIdent(eCSSKeyword_fill);
|
|
|
|
}
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderImageWidth()
|
|
|
|
{
|
|
|
|
const nsStyleBorder* border = GetStyleBorder();
|
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(false);
|
|
|
|
NS_FOR_CSS_SIDES (side) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(val);
|
|
|
|
SetValueToCoord(val, border->mBorderImageWidth.Get(side),
|
|
|
|
nsnull, nsnull);
|
2008-07-17 06:30:25 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
return valueList;
|
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderImageOutset()
|
|
|
|
{
|
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-12-22 23:34:45 +00:00
|
|
|
const nsStyleBorder* border = GetStyleBorder();
|
|
|
|
// four slice numbers
|
|
|
|
NS_FOR_CSS_SIDES (side) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(val);
|
|
|
|
SetValueToCoord(val, border->mBorderImageOutset.Get(side),
|
|
|
|
nsnull, nsnull);
|
|
|
|
}
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetBorderImageRepeat()
|
|
|
|
{
|
|
|
|
nsDOMCSSValueList* valueList = GetROCSSValueList(false);
|
|
|
|
|
|
|
|
const nsStyleBorder* border = GetStyleBorder();
|
|
|
|
|
|
|
|
// horizontal repeat
|
|
|
|
nsROCSSPrimitiveValue* valX = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(valX);
|
|
|
|
valX->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(border->mBorderImageRepeatH,
|
|
|
|
nsCSSProps::kBorderImageRepeatKTable));
|
|
|
|
|
|
|
|
// vertical repeat
|
|
|
|
nsROCSSPrimitiveValue* valY = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(valY);
|
|
|
|
valY->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(border->mBorderImageRepeatV,
|
|
|
|
nsCSSProps::kBorderImageRepeatKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2008-07-17 06:30:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFloatEdge()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleBorder()->mFloatEdge,
|
|
|
|
nsCSSProps::kFloatEdgeKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetForceBrokenImageIcon()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleUIReset()->mForceBrokenImageIcon);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetIMEMode()
|
2007-05-16 15:51:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUIReset()->mIMEMode,
|
|
|
|
nsCSSProps::kIMEModeKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-05-16 15:51:37 +00:00
|
|
|
}
|
2002-04-20 14:30:57 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetUserFocus()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUserInterface()->mUserFocus,
|
|
|
|
nsCSSProps::kUserFocusKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetUserInput()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUserInterface()->mUserInput,
|
|
|
|
nsCSSProps::kUserInputKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetUserModify()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUserInterface()->mUserModify,
|
|
|
|
nsCSSProps::kUserModifyKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetUserSelect()
|
2002-04-20 14:30:57 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleUIReset()->mUserSelect,
|
|
|
|
nsCSSProps::kUserSelectKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-04-20 14:30:57 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetDisplay()
|
2000-05-15 01:59:05 +00:00
|
|
|
{
|
2001-03-11 20:47:06 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mDisplay,
|
|
|
|
nsCSSProps::kDisplayKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPosition()
|
2002-01-11 00:15:55 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mPosition,
|
|
|
|
nsCSSProps::kPositionKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-01-11 00:15:55 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetClip()
|
2002-01-11 00:15:55 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2002-01-11 00:15:55 +00:00
|
|
|
|
2008-12-29 15:07:38 +00:00
|
|
|
if (display->mClipFlags == NS_STYLE_CLIP_AUTO) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
|
|
|
// create the cssvalues for the sides, stick them in the rect object
|
2011-03-04 17:28:57 +00:00
|
|
|
nsROCSSPrimitiveValue *topVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *rightVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *bottomVal = GetROCSSPrimitiveValue();
|
|
|
|
nsROCSSPrimitiveValue *leftVal = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:56 +00:00
|
|
|
nsDOMCSSRect * domRect = new nsDOMCSSRect(topVal, rightVal,
|
|
|
|
bottomVal, leftVal);
|
|
|
|
if (display->mClipFlags & NS_STYLE_CLIP_TOP_AUTO) {
|
|
|
|
topVal->SetIdent(eCSSKeyword_auto);
|
|
|
|
} else {
|
|
|
|
topVal->SetAppUnits(display->mClip.y);
|
|
|
|
}
|
2006-12-30 05:17:59 +00:00
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
if (display->mClipFlags & NS_STYLE_CLIP_RIGHT_AUTO) {
|
|
|
|
rightVal->SetIdent(eCSSKeyword_auto);
|
2006-12-30 05:17:59 +00:00
|
|
|
} else {
|
2011-03-04 17:28:56 +00:00
|
|
|
rightVal->SetAppUnits(display->mClip.width + display->mClip.x);
|
2002-01-11 00:15:55 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
if (display->mClipFlags & NS_STYLE_CLIP_BOTTOM_AUTO) {
|
|
|
|
bottomVal->SetIdent(eCSSKeyword_auto);
|
|
|
|
} else {
|
|
|
|
bottomVal->SetAppUnits(display->mClip.height + display->mClip.y);
|
|
|
|
}
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2011-03-04 17:28:56 +00:00
|
|
|
if (display->mClipFlags & NS_STYLE_CLIP_LEFT_AUTO) {
|
|
|
|
leftVal->SetIdent(eCSSKeyword_auto);
|
|
|
|
} else {
|
|
|
|
leftVal->SetAppUnits(display->mClip.x);
|
|
|
|
}
|
|
|
|
val->SetRect(domRect);
|
2002-01-11 00:15:55 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-01-11 00:15:55 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOverflow()
|
2002-02-16 13:16:10 +00:00
|
|
|
{
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2002-02-16 13:16:10 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (display->mOverflowX != display->mOverflowY) {
|
2006-12-12 21:16:23 +00:00
|
|
|
// No value to return. We can't express this combination of
|
|
|
|
// values as a shorthand.
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2006-12-12 21:16:23 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2006-12-12 21:16:23 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(display->mOverflowX,
|
|
|
|
nsCSSProps::kOverflowKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-09-05 00:04:04 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOverflowX()
|
2004-09-05 00:04:04 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mOverflowX,
|
|
|
|
nsCSSProps::kOverflowSubKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2004-09-05 00:04:04 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetOverflowY()
|
2004-09-05 00:04:04 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mOverflowY,
|
|
|
|
nsCSSProps::kOverflowSubKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-02-16 13:16:10 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetResize()
|
2010-03-19 11:49:33 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(GetStyleDisplay()->mResize,
|
|
|
|
nsCSSProps::kResizeKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2010-03-19 11:49:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPageBreakAfter()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleDisplay *display = GetStyleDisplay();
|
|
|
|
|
|
|
|
if (display->mBreakAfter) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_always);
|
2007-07-22 17:58:37 +00:00
|
|
|
} else {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetPageBreakBefore()
|
2007-07-22 17:58:37 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleDisplay *display = GetStyleDisplay();
|
|
|
|
|
|
|
|
if (display->mBreakBefore) {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_always);
|
2007-07-22 17:58:37 +00:00
|
|
|
} else {
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_auto);
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-22 17:58:37 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetHeight()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2002-09-26 03:46:50 +00:00
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool calcHeight = false;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
if (mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
calcHeight = true;
|
2000-05-04 00:07:33 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay* displayData = GetStyleDisplay();
|
2006-12-30 05:17:59 +00:00
|
|
|
if (displayData->mDisplay == NS_STYLE_DISPLAY_INLINE &&
|
2008-01-29 21:53:09 +00:00
|
|
|
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced))) {
|
2011-10-17 14:59:28 +00:00
|
|
|
calcHeight = false;
|
2002-09-26 03:46:50 +00:00
|
|
|
}
|
|
|
|
}
|
2001-12-06 21:15:54 +00:00
|
|
|
|
|
|
|
if (calcHeight) {
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
val->SetAppUnits(mInnerFrame->GetContentRect().height);
|
2001-11-10 17:29:04 +00:00
|
|
|
} else {
|
2007-04-23 07:04:33 +00:00
|
|
|
const nsStylePosition *positionData = GetStylePosition();
|
|
|
|
|
|
|
|
nscoord minHeight =
|
|
|
|
StyleCoordToNSCoord(positionData->mMinHeight,
|
2011-10-17 14:59:28 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentHeight, 0, true);
|
2007-04-23 07:04:33 +00:00
|
|
|
|
|
|
|
nscoord maxHeight =
|
|
|
|
StyleCoordToNSCoord(positionData->mMaxHeight,
|
|
|
|
&nsComputedDOMStyle::GetCBContentHeight,
|
2011-10-17 14:59:28 +00:00
|
|
|
nscoord_MAX, true);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, positionData->mHeight, true, nsnull, nsnull,
|
2007-04-23 07:04:33 +00:00
|
|
|
minHeight, maxHeight);
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetWidth()
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool calcWidth = false;
|
2002-03-16 17:04:35 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
if (mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
calcWidth = true;
|
2002-10-16 03:38:52 +00:00
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay *displayData = GetStyleDisplay();
|
2006-12-30 05:17:59 +00:00
|
|
|
if (displayData->mDisplay == NS_STYLE_DISPLAY_INLINE &&
|
2008-01-29 21:53:09 +00:00
|
|
|
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced))) {
|
2011-10-17 14:59:28 +00:00
|
|
|
calcWidth = false;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (calcWidth) {
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2007-02-20 18:43:16 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
val->SetAppUnits(mInnerFrame->GetContentRect().width);
|
2002-03-16 17:04:35 +00:00
|
|
|
} else {
|
2007-04-23 07:04:33 +00:00
|
|
|
const nsStylePosition *positionData = GetStylePosition();
|
|
|
|
|
|
|
|
nscoord minWidth =
|
|
|
|
StyleCoordToNSCoord(positionData->mMinWidth,
|
2011-10-17 14:59:28 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentWidth, 0, true);
|
2007-04-23 07:04:33 +00:00
|
|
|
|
|
|
|
nscoord maxWidth =
|
|
|
|
StyleCoordToNSCoord(positionData->mMaxWidth,
|
|
|
|
&nsComputedDOMStyle::GetCBContentWidth,
|
2011-10-17 14:59:28 +00:00
|
|
|
nscoord_MAX, true);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, positionData->mWidth, true, nsnull,
|
2007-05-03 23:11:00 +00:00
|
|
|
nsCSSProps::kWidthKTable, minWidth, maxWidth);
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMaxHeight()
|
2002-02-18 22:54:15 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mMaxHeight, true,
|
2007-04-23 07:04:33 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentHeight);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-02-18 22:54:15 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMaxWidth()
|
2002-02-18 22:54:15 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mMaxWidth, true,
|
2007-05-03 23:11:00 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentWidth,
|
|
|
|
nsCSSProps::kWidthKTable);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-02-18 22:54:15 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMinHeight()
|
2002-02-18 22:54:15 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mMinHeight, true,
|
2007-02-20 18:43:16 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentHeight);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-02-18 22:54:15 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMinWidth()
|
2002-02-18 22:54:15 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mMinWidth, true,
|
2007-05-03 23:11:00 +00:00
|
|
|
&nsComputedDOMStyle::GetCBContentWidth,
|
|
|
|
nsCSSProps::kWidthKTable);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-02-18 22:54:15 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetLeft()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetOffsetWidthFor(NS_SIDE_LEFT);
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetRight()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetOffsetWidthFor(NS_SIDE_RIGHT);
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTop()
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetOffsetWidthFor(NS_SIDE_TOP);
|
2000-05-04 00:07:33 +00:00
|
|
|
}
|
|
|
|
|
2001-03-03 00:44:19 +00:00
|
|
|
nsROCSSPrimitiveValue*
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
nsComputedDOMStyle::GetROCSSPrimitiveValue()
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2010-08-13 09:58:04 +00:00
|
|
|
nsROCSSPrimitiveValue *primitiveValue = new nsROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2002-09-07 01:48:39 +00:00
|
|
|
NS_ASSERTION(primitiveValue != 0, "ran out of memory");
|
2001-03-03 00:44:19 +00:00
|
|
|
|
|
|
|
return primitiveValue;
|
|
|
|
}
|
|
|
|
|
2002-07-08 07:11:59 +00:00
|
|
|
nsDOMCSSValueList*
|
2011-09-29 06:19:26 +00:00
|
|
|
nsComputedDOMStyle::GetROCSSValueList(bool aCommaDelimited)
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
|
|
|
nsDOMCSSValueList *valueList = new nsDOMCSSValueList(aCommaDelimited,
|
2011-10-17 14:59:28 +00:00
|
|
|
true);
|
2002-07-08 07:11:59 +00:00
|
|
|
NS_ASSERTION(valueList != 0, "ran out of memory");
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetOffsetWidthFor(mozilla::css::Side aSide)
|
2000-05-04 00:07:33 +00:00
|
|
|
{
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
2000-05-17 06:26:23 +00:00
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2010-08-25 10:17:55 +00:00
|
|
|
PRUint8 position = display->mPosition;
|
|
|
|
if (!mOuterFrame) {
|
|
|
|
// GetRelativeOffset and GetAbsoluteOffset don't handle elements
|
|
|
|
// without frames in any sensible way. GetStaticOffset, however,
|
|
|
|
// is perfect for that case.
|
|
|
|
position = NS_STYLE_POSITION_STATIC;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (position) {
|
2006-12-30 05:17:59 +00:00
|
|
|
case NS_STYLE_POSITION_STATIC:
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetStaticOffset(aSide);
|
2006-12-30 05:17:59 +00:00
|
|
|
case NS_STYLE_POSITION_RELATIVE:
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetRelativeOffset(aSide);
|
2006-12-30 05:17:59 +00:00
|
|
|
case NS_STYLE_POSITION_ABSOLUTE:
|
|
|
|
case NS_STYLE_POSITION_FIXED:
|
2011-03-04 17:28:57 +00:00
|
|
|
return GetAbsoluteOffset(aSide);
|
2006-12-30 05:17:59 +00:00
|
|
|
default:
|
|
|
|
NS_ERROR("Invalid position");
|
2011-03-04 17:28:57 +00:00
|
|
|
return nsnull;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetAbsoluteOffset(mozilla::css::Side aSide)
|
2001-11-10 17:29:04 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
nsIFrame* container = GetContainingBlockFor(mOuterFrame);
|
2001-11-10 17:29:04 +00:00
|
|
|
if (container) {
|
2008-01-29 21:53:09 +00:00
|
|
|
nsMargin margin = mOuterFrame->GetUsedMargin();
|
2006-12-15 23:39:43 +00:00
|
|
|
nsMargin border = container->GetUsedBorder();
|
2004-01-09 19:21:20 +00:00
|
|
|
nsMargin scrollbarSizes(0, 0, 0, 0);
|
2008-01-29 21:53:09 +00:00
|
|
|
nsRect rect = mOuterFrame->GetRect();
|
2003-08-06 03:07:12 +00:00
|
|
|
nsRect containerRect = container->GetRect();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2006-12-26 17:47:52 +00:00
|
|
|
if (container->GetType() == nsGkAtoms::viewportFrame) {
|
2001-11-10 17:29:04 +00:00
|
|
|
// For absolutely positioned frames scrollbars are taken into
|
|
|
|
// account by virtue of getting a containing block that does
|
|
|
|
// _not_ include the scrollbars. For fixed positioned frames,
|
|
|
|
// the containing block is the viewport, which _does_ include
|
|
|
|
// scrollbars. We have to do some extra work.
|
|
|
|
// the first child in the default frame list is what we want
|
2011-08-24 20:54:30 +00:00
|
|
|
nsIFrame* scrollingChild = container->GetFirstPrincipalChild();
|
2009-01-12 19:20:59 +00:00
|
|
|
nsIScrollableFrame *scrollFrame = do_QueryFrame(scrollingChild);
|
2001-11-10 17:29:04 +00:00
|
|
|
if (scrollFrame) {
|
2004-01-09 19:21:20 +00:00
|
|
|
scrollbarSizes = scrollFrame->GetActualScrollbarSizes();
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2001-11-10 17:29:04 +00:00
|
|
|
nscoord offset = 0;
|
|
|
|
switch (aSide) {
|
|
|
|
case NS_SIDE_TOP:
|
2006-12-15 23:39:43 +00:00
|
|
|
offset = rect.y - margin.top - border.top - scrollbarSizes.top;
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2001-11-10 17:29:04 +00:00
|
|
|
break;
|
|
|
|
case NS_SIDE_RIGHT:
|
|
|
|
offset = containerRect.width - rect.width -
|
2006-12-15 23:39:43 +00:00
|
|
|
rect.x - margin.right - border.right - scrollbarSizes.right;
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2001-11-10 17:29:04 +00:00
|
|
|
break;
|
|
|
|
case NS_SIDE_BOTTOM:
|
|
|
|
offset = containerRect.height - rect.height -
|
2006-12-15 23:39:43 +00:00
|
|
|
rect.y - margin.bottom - border.bottom - scrollbarSizes.bottom;
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2001-11-10 17:29:04 +00:00
|
|
|
break;
|
|
|
|
case NS_SIDE_LEFT:
|
2006-12-15 23:39:43 +00:00
|
|
|
offset = rect.x - margin.left - border.left - scrollbarSizes.left;
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2001-11-10 17:29:04 +00:00
|
|
|
break;
|
|
|
|
default:
|
2005-03-27 11:36:08 +00:00
|
|
|
NS_ERROR("Invalid side");
|
2001-11-10 17:29:04 +00:00
|
|
|
break;
|
|
|
|
}
|
2007-02-07 07:46:44 +00:00
|
|
|
val->SetAppUnits(offset);
|
2001-11-10 17:29:04 +00:00
|
|
|
} else {
|
|
|
|
// XXX no frame. This property makes no sense
|
2007-02-07 07:46:44 +00:00
|
|
|
val->SetAppUnits(0);
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2012-02-23 16:19:00 +00:00
|
|
|
MOZ_STATIC_ASSERT(NS_SIDE_TOP == 0 && NS_SIDE_RIGHT == 1 &&
|
|
|
|
NS_SIDE_BOTTOM == 2 && NS_SIDE_LEFT == 3,
|
|
|
|
"box side constants not as expected for NS_OPPOSITE_SIDE");
|
2010-04-27 16:15:02 +00:00
|
|
|
#define NS_OPPOSITE_SIDE(s_) mozilla::css::Side(((s_) + 2) & 3)
|
2004-11-30 05:31:37 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetRelativeOffset(mozilla::css::Side aSide)
|
2001-11-10 17:29:04 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStylePosition* positionData = GetStylePosition();
|
2006-12-30 05:17:59 +00:00
|
|
|
PRInt32 sign = 1;
|
2008-03-06 00:05:26 +00:00
|
|
|
nsStyleCoord coord = positionData->mOffset.Get(aSide);
|
2007-08-16 23:19:25 +00:00
|
|
|
|
|
|
|
NS_ASSERTION(coord.GetUnit() == eStyleUnit_Coord ||
|
|
|
|
coord.GetUnit() == eStyleUnit_Percent ||
|
2010-08-25 10:17:56 +00:00
|
|
|
coord.GetUnit() == eStyleUnit_Auto ||
|
|
|
|
coord.IsCalcUnit(),
|
2007-08-16 23:19:25 +00:00
|
|
|
"Unexpected unit");
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-08-16 23:19:25 +00:00
|
|
|
if (coord.GetUnit() == eStyleUnit_Auto) {
|
2008-03-06 00:05:26 +00:00
|
|
|
coord = positionData->mOffset.Get(NS_OPPOSITE_SIDE(aSide));
|
2006-12-30 05:17:59 +00:00
|
|
|
sign = -1;
|
|
|
|
}
|
2007-08-16 23:19:25 +00:00
|
|
|
PercentageBaseGetter baseGetter;
|
|
|
|
if (aSide == NS_SIDE_LEFT || aSide == NS_SIDE_RIGHT) {
|
|
|
|
baseGetter = &nsComputedDOMStyle::GetCBContentWidth;
|
|
|
|
} else {
|
|
|
|
baseGetter = &nsComputedDOMStyle::GetCBContentHeight;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
val->SetAppUnits(sign * StyleCoordToNSCoord(coord, baseGetter, 0, false));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetStaticOffset(mozilla::css::Side aSide)
|
2001-11-10 17:29:04 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePosition()->mOffset.Get(aSide), false);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
2000-05-15 01:59:05 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetPaddingWidthFor(mozilla::css::Side aSide)
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2002-10-16 03:38:52 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStylePadding()->mPadding.Get(aSide), true);
|
2006-12-15 23:39:43 +00:00
|
|
|
} else {
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-04-19 03:07:22 +00:00
|
|
|
val->SetAppUnits(mInnerFrame->GetUsedPadding().Side(aSide));
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-11-10 17:29:04 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2007-02-20 18:43:16 +00:00
|
|
|
nsComputedDOMStyle::GetLineHeightCoord(nscoord& aCoord)
|
2002-03-16 17:04:35 +00:00
|
|
|
{
|
2009-05-18 22:13:12 +00:00
|
|
|
AssertFlushedPendingReflows();
|
|
|
|
|
|
|
|
nscoord blockHeight = NS_AUTOHEIGHT;
|
|
|
|
if (GetStyleText()->mLineHeight.GetUnit() == eStyleUnit_Enumerated) {
|
|
|
|
if (!mInnerFrame)
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2009-05-18 22:13:12 +00:00
|
|
|
|
2011-05-12 04:04:30 +00:00
|
|
|
if (nsLayoutUtils::IsNonWrapperBlock(mInnerFrame)) {
|
2009-05-18 22:13:12 +00:00
|
|
|
blockHeight = mInnerFrame->GetContentRect().height;
|
|
|
|
} else {
|
|
|
|
GetCBContentHeight(blockHeight);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-11-24 02:48:23 +00:00
|
|
|
// lie about font size inflation since we lie about font size (since
|
|
|
|
// the inflation only applies to text)
|
2009-05-18 22:13:12 +00:00
|
|
|
aCoord = nsHTMLReflowState::CalcLineHeight(mStyleContextHolder,
|
2011-11-24 02:48:23 +00:00
|
|
|
blockHeight, 1.0f);
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-05-05 05:30:10 +00:00
|
|
|
// CalcLineHeight uses font->mFont.size, but we want to use
|
|
|
|
// font->mSize as the font size. Adjust for that. Also adjust for
|
|
|
|
// the text zoom, if any.
|
|
|
|
const nsStyleFont* font = GetStyleFont();
|
|
|
|
aCoord = NSToCoordRound((float(aCoord) *
|
|
|
|
(float(font->mSize) / float(font->mFont.size))) /
|
|
|
|
mPresShell->GetPresContext()->TextZoom());
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2002-03-16 17:04:35 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetBorderColorsFor(mozilla::css::Side aSide)
|
2002-07-08 07:11:59 +00:00
|
|
|
{
|
2006-12-22 06:10:32 +00:00
|
|
|
const nsStyleBorder *border = GetStyleBorder();
|
2002-07-08 07:11:59 +00:00
|
|
|
|
2006-12-30 05:17:59 +00:00
|
|
|
if (border->mBorderColors) {
|
2004-11-30 05:31:37 +00:00
|
|
|
nsBorderColors* borderColors = border->mBorderColors[aSide];
|
2002-07-08 07:11:59 +00:00
|
|
|
if (borderColors) {
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2002-07-08 07:11:59 +00:00
|
|
|
|
|
|
|
do {
|
|
|
|
nsROCSSPrimitiveValue *primitive = GetROCSSPrimitiveValue();
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(primitive, borderColors->mColor);
|
2002-07-08 07:11:59 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(primitive);
|
2002-07-08 07:11:59 +00:00
|
|
|
borderColors = borderColors->mNext;
|
|
|
|
} while (borderColors);
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2002-07-08 07:11:59 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetBorderWidthFor(mozilla::css::Side aSide)
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2007-01-28 17:20:01 +00:00
|
|
|
nscoord width;
|
2008-01-29 21:53:09 +00:00
|
|
|
if (mInnerFrame) {
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2011-04-19 03:07:22 +00:00
|
|
|
width = mInnerFrame->GetUsedBorder().Side(aSide);
|
2007-01-28 17:20:01 +00:00
|
|
|
} else {
|
2008-07-17 06:30:25 +00:00
|
|
|
width = GetStyleBorder()->GetActualBorderWidth(aSide);
|
2007-01-28 17:20:01 +00:00
|
|
|
}
|
2007-02-07 07:46:44 +00:00
|
|
|
val->SetAppUnits(width);
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-30 02:08:48 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetBorderColorFor(mozilla::css::Side aSide)
|
2001-03-30 02:08:48 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-03-30 02:08:48 +00:00
|
|
|
|
2010-04-27 16:15:01 +00:00
|
|
|
nscolor color;
|
2011-09-29 06:19:26 +00:00
|
|
|
bool foreground;
|
2008-09-12 15:35:53 +00:00
|
|
|
GetStyleBorder()->GetBorderColor(aSide, color, foreground);
|
|
|
|
if (foreground) {
|
|
|
|
color = GetStyleColor()->mColor;
|
|
|
|
}
|
2002-09-07 01:48:39 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, color);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-11 21:03:08 +00:00
|
|
|
}
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetMarginWidthFor(mozilla::css::Side aSide)
|
2001-03-11 20:47:06 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2001-03-11 20:47:06 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleMargin()->mMargin.Get(aSide), false);
|
2006-12-15 23:39:43 +00:00
|
|
|
} else {
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2007-02-20 18:43:16 +00:00
|
|
|
|
Bug 659828 - Part 1: Apply table margins to the outer table frame instead of the inner table frame (also fixes bug 87277); r=dbaron
Outer table frames act as CSS2.1 table wrapper boxes. We used to lay them out
without taking their margins into the account, which meant that their width was
always equal to the available width. This breaks horizontal positioning of
absolutely positioned kids of a table frame.
The main purpose of this patch is to apply the margins of tables to their outer
frame, instead of the inner frame. This means that the inner table frame will
always have a zero margin, which means that a lot of the stuff which used to
rely on the fact that table margins are applied to the inner frame need to
change.
In particular, in order to get the computed margins of a table, we used to query
the inner table frame, and this patch corrects that. Also, when shrink wrapping
tables, we used to not take the margins of the inner table frame into account,
which is fixed by this patch too. nsBlockReflowState::
ComputeReplacedBlockOffsetsForFloats also needed to be changed to read the
margin values from the outer frame too.
Also, as part of this patch, we start to respect the CSS2.1 margin model for
captions on all sides. This means that in particular, the top/bottom margins on
the top-outside and bottom-outside captions will not be collapsed with the
top/bottom margins of the table, and that the margins of the caption element
contribute to the width and height of the outer table frame. The
427129-table-caption reftest has been modified to match this new behavior.
Another side effect of this bug is fixing bug 87277, and the reftests for that
bug are marked as passing in this patch.
2011-05-31 23:02:56 +00:00
|
|
|
// For tables, GetUsedMargin always returns an empty margin, so we
|
|
|
|
// should read the margin from the outer table frame instead.
|
|
|
|
val->SetAppUnits(mOuterFrame->GetUsedMargin().Side(aSide));
|
|
|
|
NS_ASSERTION(mOuterFrame == mInnerFrame ||
|
|
|
|
mInnerFrame->GetUsedMargin() == nsMargin(0, 0, 0, 0),
|
|
|
|
"Inner tables must have zero margins");
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
Landing the XPCDOM_20010329_BRANCH branch, changes mostly done by jband@netscape.com and jst@netscape.com, also some changes done by shaver@mozilla.org, peterv@netscape.com and markh@activestate.com. r= and sr= by vidur@netscape.com, jband@netscape.com, jst@netscpae.com, danm@netscape.com, hyatt@netscape.com, shaver@mozilla.org, dbradley@netscape.com, rpotts@netscape.com.
2001-05-08 16:46:42 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::GetBorderStyleFor(mozilla::css::Side aSide)
|
2001-03-03 00:44:19 +00:00
|
|
|
{
|
2002-09-07 01:48:39 +00:00
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleBorder()->GetBorderStyle(aSide),
|
|
|
|
nsCSSProps::kBorderStyleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2001-03-03 00:44:19 +00:00
|
|
|
}
|
2002-10-08 01:53:31 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
void
|
|
|
|
nsComputedDOMStyle::SetValueToCoord(nsROCSSPrimitiveValue* aValue,
|
2007-04-23 07:04:33 +00:00
|
|
|
const nsStyleCoord& aCoord,
|
2011-09-29 06:19:26 +00:00
|
|
|
bool aClampNegativeCalc,
|
2007-02-20 18:43:16 +00:00
|
|
|
PercentageBaseGetter aPercentageBaseGetter,
|
|
|
|
const PRInt32 aTable[],
|
2007-04-23 07:04:33 +00:00
|
|
|
nscoord aMinAppUnits,
|
|
|
|
nscoord aMaxAppUnits)
|
2007-02-20 18:43:16 +00:00
|
|
|
{
|
|
|
|
NS_PRECONDITION(aValue, "Must have a value to work with");
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
switch (aCoord.GetUnit()) {
|
|
|
|
case eStyleUnit_Normal:
|
2009-01-23 01:28:14 +00:00
|
|
|
aValue->SetIdent(eCSSKeyword_normal);
|
2007-02-20 18:43:16 +00:00
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Auto:
|
2009-01-23 01:28:14 +00:00
|
|
|
aValue->SetIdent(eCSSKeyword_auto);
|
2007-02-20 18:43:16 +00:00
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Percent:
|
|
|
|
{
|
|
|
|
nscoord percentageBase;
|
|
|
|
if (aPercentageBaseGetter &&
|
|
|
|
(this->*aPercentageBaseGetter)(percentageBase)) {
|
2010-07-03 04:18:56 +00:00
|
|
|
nscoord val = NSCoordSaturatingMultiply(percentageBase,
|
|
|
|
aCoord.GetPercentValue());
|
2009-09-16 15:01:36 +00:00
|
|
|
aValue->SetAppUnits(NS_MAX(aMinAppUnits, NS_MIN(val, aMaxAppUnits)));
|
2007-02-20 18:43:16 +00:00
|
|
|
} else {
|
|
|
|
aValue->SetPercent(aCoord.GetPercentValue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Factor:
|
|
|
|
aValue->SetNumber(aCoord.GetFactorValue());
|
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Coord:
|
|
|
|
{
|
|
|
|
nscoord val = aCoord.GetCoordValue();
|
2009-09-16 15:01:36 +00:00
|
|
|
aValue->SetAppUnits(NS_MAX(aMinAppUnits, NS_MIN(val, aMaxAppUnits)));
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Integer:
|
|
|
|
aValue->SetNumber(aCoord.GetIntValue());
|
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
case eStyleUnit_Enumerated:
|
|
|
|
NS_ASSERTION(aTable, "Must have table to handle this case");
|
2009-01-23 01:28:14 +00:00
|
|
|
aValue->SetIdent(nsCSSProps::ValueToKeywordEnum(aCoord.GetIntValue(),
|
|
|
|
aTable));
|
2007-02-20 18:43:16 +00:00
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-05-11 06:01:31 +00:00
|
|
|
case eStyleUnit_None:
|
2009-01-23 01:28:14 +00:00
|
|
|
aValue->SetIdent(eCSSKeyword_none);
|
2007-02-20 18:43:16 +00:00
|
|
|
break;
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2010-09-11 16:27:13 +00:00
|
|
|
case eStyleUnit_Calc:
|
|
|
|
nscoord percentageBase;
|
|
|
|
if (!aCoord.CalcHasPercent()) {
|
|
|
|
nscoord val = nsRuleNode::ComputeCoordPercentCalc(aCoord, 0);
|
|
|
|
if (aClampNegativeCalc && val < 0) {
|
|
|
|
NS_ABORT_IF_FALSE(aCoord.IsCalcUnit(),
|
|
|
|
"parser should have rejected value");
|
|
|
|
val = 0;
|
|
|
|
}
|
|
|
|
aValue->SetAppUnits(NS_MAX(aMinAppUnits, NS_MIN(val, aMaxAppUnits)));
|
|
|
|
} else if (aPercentageBaseGetter &&
|
|
|
|
(this->*aPercentageBaseGetter)(percentageBase)) {
|
|
|
|
nscoord val =
|
|
|
|
nsRuleNode::ComputeCoordPercentCalc(aCoord, percentageBase);
|
|
|
|
if (aClampNegativeCalc && val < 0) {
|
|
|
|
NS_ABORT_IF_FALSE(aCoord.IsCalcUnit(),
|
|
|
|
"parser should have rejected value");
|
|
|
|
val = 0;
|
2010-07-03 04:18:56 +00:00
|
|
|
}
|
2010-09-11 16:27:13 +00:00
|
|
|
aValue->SetAppUnits(NS_MAX(aMinAppUnits, NS_MIN(val, aMaxAppUnits)));
|
2010-07-03 04:18:56 +00:00
|
|
|
} else {
|
2010-09-11 16:27:13 +00:00
|
|
|
nsStyleCoord::Calc *calc = aCoord.GetCalcValue();
|
2010-09-15 15:11:26 +00:00
|
|
|
SetValueToCalc(calc, aValue);
|
2010-07-03 04:18:56 +00:00
|
|
|
}
|
2007-02-20 18:43:16 +00:00
|
|
|
break;
|
2010-09-11 16:27:13 +00:00
|
|
|
default:
|
|
|
|
NS_ERROR("Can't handle this unit");
|
|
|
|
break;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
nscoord
|
2007-04-23 07:04:33 +00:00
|
|
|
nsComputedDOMStyle::StyleCoordToNSCoord(const nsStyleCoord& aCoord,
|
|
|
|
PercentageBaseGetter aPercentageBaseGetter,
|
2010-09-09 15:21:46 +00:00
|
|
|
nscoord aDefaultValue,
|
2011-09-29 06:19:26 +00:00
|
|
|
bool aClampNegativeCalc)
|
2007-02-20 18:43:16 +00:00
|
|
|
{
|
|
|
|
NS_PRECONDITION(aPercentageBaseGetter, "Must have a percentage base getter");
|
2010-07-03 04:18:56 +00:00
|
|
|
if (aCoord.GetUnit() == eStyleUnit_Coord) {
|
|
|
|
return aCoord.GetCoordValue();
|
|
|
|
}
|
|
|
|
if (aCoord.GetUnit() == eStyleUnit_Percent || aCoord.IsCalcUnit()) {
|
|
|
|
nscoord percentageBase;
|
|
|
|
if ((this->*aPercentageBaseGetter)(percentageBase)) {
|
2010-09-09 15:21:46 +00:00
|
|
|
nscoord result =
|
|
|
|
nsRuleNode::ComputeCoordPercentCalc(aCoord, percentageBase);
|
|
|
|
if (aClampNegativeCalc && result < 0) {
|
|
|
|
NS_ABORT_IF_FALSE(aCoord.IsCalcUnit(),
|
|
|
|
"parser should have rejected value");
|
|
|
|
result = 0;
|
|
|
|
}
|
|
|
|
return result;
|
2010-07-03 04:18:56 +00:00
|
|
|
}
|
|
|
|
// Fall through to returning aDefaultValue if we have no percentage base.
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
2010-04-27 16:15:01 +00:00
|
|
|
|
2007-04-23 07:04:33 +00:00
|
|
|
return aDefaultValue;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2007-02-20 18:43:16 +00:00
|
|
|
nsComputedDOMStyle::GetCBContentWidth(nscoord& aWidth)
|
|
|
|
{
|
2008-01-29 21:53:09 +00:00
|
|
|
if (!mOuterFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
nsIFrame* container = GetContainingBlockFor(mOuterFrame);
|
2007-02-20 18:43:16 +00:00
|
|
|
if (!container) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2007-02-20 18:43:16 +00:00
|
|
|
|
|
|
|
aWidth = container->GetContentRect().width;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2007-02-20 18:43:16 +00:00
|
|
|
nsComputedDOMStyle::GetCBContentHeight(nscoord& aHeight)
|
|
|
|
{
|
2008-01-29 21:53:09 +00:00
|
|
|
if (!mOuterFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
nsIFrame* container = GetContainingBlockFor(mOuterFrame);
|
2007-02-20 18:43:16 +00:00
|
|
|
if (!container) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2007-02-20 18:43:16 +00:00
|
|
|
|
|
|
|
aHeight = container->GetContentRect().height;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2007-02-20 18:43:16 +00:00
|
|
|
nsComputedDOMStyle::GetFrameBorderRectWidth(nscoord& aWidth)
|
|
|
|
{
|
2008-01-29 21:53:09 +00:00
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2007-02-20 18:43:16 +00:00
|
|
|
|
2008-01-29 21:53:09 +00:00
|
|
|
aWidth = mInnerFrame->GetSize().width;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2007-02-20 18:43:16 +00:00
|
|
|
}
|
2002-10-08 01:53:31 +00:00
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2010-10-07 04:25:47 +00:00
|
|
|
nsComputedDOMStyle::GetFrameBorderRectHeight(nscoord& aHeight)
|
|
|
|
{
|
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2010-10-07 04:25:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
AssertFlushedPendingReflows();
|
|
|
|
|
|
|
|
aHeight = mInnerFrame->GetSize().height;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2010-10-07 04:25:47 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2008-09-13 09:42:11 +00:00
|
|
|
nsComputedDOMStyle::GetFrameBoundsWidthForTransform(nscoord& aWidth)
|
|
|
|
{
|
|
|
|
// We need a frame to work with.
|
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2008-09-13 09:42:11 +00:00
|
|
|
|
|
|
|
aWidth = nsDisplayTransform::GetFrameBoundsForTransform(mInnerFrame).width;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2011-09-29 06:19:26 +00:00
|
|
|
bool
|
2008-09-13 09:42:11 +00:00
|
|
|
nsComputedDOMStyle::GetFrameBoundsHeightForTransform(nscoord& aHeight)
|
|
|
|
{
|
|
|
|
// We need a frame to work with.
|
|
|
|
if (!mInnerFrame) {
|
2011-10-17 14:59:28 +00:00
|
|
|
return false;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2009-02-25 00:14:45 +00:00
|
|
|
AssertFlushedPendingReflows();
|
2008-09-13 09:42:11 +00:00
|
|
|
|
|
|
|
aHeight = nsDisplayTransform::GetFrameBoundsForTransform(mInnerFrame).height;
|
2011-10-17 14:59:28 +00:00
|
|
|
return true;
|
2008-09-13 09:42:11 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
2011-09-29 06:19:26 +00:00
|
|
|
nsComputedDOMStyle::GetSVGPaintFor(bool aFill)
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVG* svg = GetStyleSVG();
|
|
|
|
const nsStyleSVGPaint* paint = nsnull;
|
|
|
|
|
|
|
|
if (aFill)
|
|
|
|
paint = &svg->mFill;
|
|
|
|
else
|
|
|
|
paint = &svg->mStroke;
|
|
|
|
|
|
|
|
nsAutoString paintString;
|
|
|
|
|
|
|
|
switch (paint->mType) {
|
2011-03-04 17:28:57 +00:00
|
|
|
case eStyleSVGPaintType_None:
|
|
|
|
{
|
|
|
|
val->SetIdent(eCSSKeyword_none);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case eStyleSVGPaintType_Color:
|
|
|
|
{
|
|
|
|
SetToRGBAColor(val, paint->mPaint.mColor);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case eStyleSVGPaintType_Server:
|
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(false);
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(val);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsROCSSPrimitiveValue* fallback = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(fallback);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
val->SetURI(paint->mPaint.mPaintServer);
|
|
|
|
SetToRGBAColor(fallback, paint->mFallbackColor);
|
|
|
|
return valueList;
|
|
|
|
}
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFill()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
return GetSVGPaintFor(true);
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStroke()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
2011-10-17 14:59:28 +00:00
|
|
|
return GetSVGPaintFor(false);
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarkerEnd()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVG* svg = GetStyleSVG();
|
|
|
|
|
|
|
|
if (svg->mMarkerEnd)
|
|
|
|
val->SetURI(svg->mMarkerEnd);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarkerMid()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVG* svg = GetStyleSVG();
|
|
|
|
|
|
|
|
if (svg->mMarkerMid)
|
|
|
|
val->SetURI(svg->mMarkerMid);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMarkerStart()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVG* svg = GetStyleSVG();
|
|
|
|
|
|
|
|
if (svg->mMarkerStart)
|
|
|
|
val->SetURI(svg->mMarkerStart);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeDasharray()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
const nsStyleSVG* svg = GetStyleSVG();
|
|
|
|
|
|
|
|
if (!svg->mStrokeDasharrayLength || !svg->mStrokeDasharray) {
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
|
|
|
for (PRUint32 i = 0; i < svg->mStrokeDasharrayLength; i++) {
|
|
|
|
nsROCSSPrimitiveValue* dash = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(dash);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(dash, svg->mStrokeDasharray[i], true);
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeDashoffset()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleSVG()->mStrokeDashoffset, false);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeWidth()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
2011-10-17 14:59:28 +00:00
|
|
|
SetValueToCoord(val, GetStyleSVG()->mStrokeWidth, true);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFillOpacity()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleSVG()->mFillOpacity);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFloodOpacity()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleSVGReset()->mFloodOpacity);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStopOpacity()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleSVGReset()->mStopOpacity);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeMiterlimit()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleSVG()->mStrokeMiterlimit);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeOpacity()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
|
|
|
val->SetNumber(GetStyleSVG()->mStrokeOpacity);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetClipRule()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(
|
|
|
|
GetStyleSVG()->mClipRule, nsCSSProps::kFillRuleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFillRule()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(nsCSSProps::ValueToKeywordEnum(
|
|
|
|
GetStyleSVG()->mFillRule, nsCSSProps::kFillRuleKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeLinecap()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mStrokeLinecap,
|
|
|
|
nsCSSProps::kStrokeLinecapKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStrokeLinejoin()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mStrokeLinejoin,
|
|
|
|
nsCSSProps::kStrokeLinejoinKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextAnchor()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mTextAnchor,
|
|
|
|
nsCSSProps::kTextAnchorKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColorInterpolation()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mColorInterpolation,
|
|
|
|
nsCSSProps::kColorInterpolationKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetColorInterpolationFilters()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mColorInterpolationFilters,
|
|
|
|
nsCSSProps::kColorInterpolationKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetDominantBaseline()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVGReset()->mDominantBaseline,
|
|
|
|
nsCSSProps::kDominantBaselineKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetImageRendering()
|
2009-03-21 15:36:38 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mImageRendering,
|
|
|
|
nsCSSProps::kImageRenderingKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2009-03-21 15:36:38 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetShapeRendering()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mShapeRendering,
|
|
|
|
nsCSSProps::kShapeRenderingKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTextRendering()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2009-10-21 21:57:57 +00:00
|
|
|
val->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(GetStyleSVG()->mTextRendering,
|
|
|
|
nsCSSProps::kTextRenderingKTable));
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFloodColor()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, GetStyleSVGReset()->mFloodColor);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetLightingColor()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, GetStyleSVGReset()->mLightingColor);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-26 06:57:42 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetStopColor()
|
2007-07-26 06:57:42 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
SetToRGBAColor(val, GetStyleSVGReset()->mStopColor);
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetClipPath()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVGReset* svg = GetStyleSVGReset();
|
|
|
|
|
|
|
|
if (svg->mClipPath)
|
|
|
|
val->SetURI(svg->mClipPath);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetFilter()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVGReset* svg = GetStyleSVGReset();
|
|
|
|
|
|
|
|
if (svg->mFilter)
|
|
|
|
val->SetURI(svg->mFilter);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetMask()
|
2007-07-21 14:20:25 +00:00
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* val = GetROCSSPrimitiveValue();
|
|
|
|
|
|
|
|
const nsStyleSVGReset* svg = GetStyleSVGReset();
|
|
|
|
|
|
|
|
if (svg->mMask)
|
|
|
|
val->SetURI(svg->mMask);
|
|
|
|
else
|
2009-01-23 01:28:14 +00:00
|
|
|
val->SetIdent(eCSSKeyword_none);
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return val;
|
2007-07-21 14:20:25 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTransitionDelay()
|
2009-08-20 21:52:47 +00:00
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-08-20 21:52:47 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mTransitionDelayCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsTransition *transition = &display->mTransitions[i];
|
|
|
|
nsROCSSPrimitiveValue* delay = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(delay);
|
2009-08-20 21:52:47 +00:00
|
|
|
delay->SetTime((float)transition->GetDelay() / (float)PR_MSEC_PER_SEC);
|
|
|
|
} while (++i < display->mTransitionDelayCount);
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTransitionDuration()
|
2009-08-20 21:52:47 +00:00
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-08-20 21:52:47 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mTransitionDurationCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsTransition *transition = &display->mTransitions[i];
|
|
|
|
nsROCSSPrimitiveValue* duration = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(duration);
|
2009-08-20 21:52:47 +00:00
|
|
|
|
|
|
|
duration->SetTime((float)transition->GetDuration() / (float)PR_MSEC_PER_SEC);
|
|
|
|
} while (++i < display->mTransitionDurationCount);
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTransitionProperty()
|
2009-08-20 21:52:47 +00:00
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-08-20 21:52:47 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mTransitionPropertyCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsTransition *transition = &display->mTransitions[i];
|
|
|
|
nsROCSSPrimitiveValue* property = GetROCSSPrimitiveValue();
|
2011-03-04 17:28:57 +00:00
|
|
|
valueList->AppendCSSValue(property);
|
2009-08-20 21:52:47 +00:00
|
|
|
nsCSSProperty cssprop = transition->GetProperty();
|
|
|
|
if (cssprop == eCSSPropertyExtra_all_properties)
|
|
|
|
property->SetIdent(eCSSKeyword_all);
|
|
|
|
else if (cssprop == eCSSPropertyExtra_no_properties)
|
|
|
|
property->SetIdent(eCSSKeyword_none);
|
|
|
|
else if (cssprop == eCSSProperty_UNKNOWN)
|
|
|
|
{
|
2010-02-04 20:49:29 +00:00
|
|
|
nsAutoString escaped;
|
2010-03-08 15:45:00 +00:00
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(
|
|
|
|
nsDependentAtomString(transition->GetUnknownProperty()), escaped);
|
2010-02-04 20:49:29 +00:00
|
|
|
property->SetString(escaped); // really want SetIdent
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
property->SetString(nsCSSProps::GetStringValue(cssprop));
|
|
|
|
} while (++i < display->mTransitionPropertyCount);
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
|
|
|
|
2011-04-12 06:18:42 +00:00
|
|
|
void
|
|
|
|
nsComputedDOMStyle::AppendTimingFunction(nsDOMCSSValueList *aValueList,
|
|
|
|
const nsTimingFunction& aTimingFunction)
|
|
|
|
{
|
|
|
|
nsROCSSPrimitiveValue* timingFunction = GetROCSSPrimitiveValue();
|
|
|
|
aValueList->AppendCSSValue(timingFunction);
|
|
|
|
|
2011-07-06 18:25:19 +00:00
|
|
|
nsAutoString tmp;
|
|
|
|
|
2011-04-12 06:18:42 +00:00
|
|
|
if (aTimingFunction.mType == nsTimingFunction::Function) {
|
|
|
|
// set the value from the cubic-bezier control points
|
|
|
|
// (We could try to regenerate the keywords if we want.)
|
2011-07-06 18:25:19 +00:00
|
|
|
tmp.AppendLiteral("cubic-bezier(");
|
|
|
|
tmp.AppendFloat(aTimingFunction.mFunc.mX1);
|
|
|
|
tmp.AppendLiteral(", ");
|
|
|
|
tmp.AppendFloat(aTimingFunction.mFunc.mY1);
|
|
|
|
tmp.AppendLiteral(", ");
|
|
|
|
tmp.AppendFloat(aTimingFunction.mFunc.mX2);
|
|
|
|
tmp.AppendLiteral(", ");
|
|
|
|
tmp.AppendFloat(aTimingFunction.mFunc.mY2);
|
|
|
|
tmp.AppendLiteral(")");
|
2011-04-12 06:18:42 +00:00
|
|
|
} else {
|
|
|
|
tmp.AppendLiteral("steps(");
|
|
|
|
tmp.AppendInt(aTimingFunction.mSteps);
|
|
|
|
if (aTimingFunction.mType == nsTimingFunction::StepStart) {
|
|
|
|
tmp.AppendLiteral(", start)");
|
|
|
|
} else {
|
|
|
|
tmp.AppendLiteral(", end)");
|
|
|
|
}
|
|
|
|
}
|
2011-07-06 18:25:19 +00:00
|
|
|
timingFunction->SetString(tmp);
|
2011-04-12 06:18:42 +00:00
|
|
|
}
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetTransitionTimingFunction()
|
2009-08-20 21:52:47 +00:00
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2009-08-20 21:52:47 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mTransitionTimingFunctionCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
2011-04-12 06:18:42 +00:00
|
|
|
AppendTimingFunction(valueList,
|
|
|
|
display->mTransitions[i].GetTimingFunction());
|
2009-08-20 21:52:47 +00:00
|
|
|
} while (++i < display->mTransitionTimingFunctionCount);
|
|
|
|
|
2011-03-04 17:28:57 +00:00
|
|
|
return valueList;
|
2009-08-20 21:52:47 +00:00
|
|
|
}
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2011-04-12 06:18:42 +00:00
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationName()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationNameCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* property = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(property);
|
|
|
|
|
|
|
|
const nsString& name = animation->GetName();
|
|
|
|
if (name.IsEmpty()) {
|
|
|
|
property->SetIdent(eCSSKeyword_none);
|
|
|
|
} else {
|
|
|
|
nsAutoString escaped;
|
|
|
|
nsStyleUtil::AppendEscapedCSSIdent(animation->GetName(), escaped);
|
|
|
|
property->SetString(escaped); // really want SetIdent
|
|
|
|
}
|
|
|
|
} while (++i < display->mAnimationNameCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationDelay()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationDelayCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* delay = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(delay);
|
|
|
|
delay->SetTime((float)animation->GetDelay() / (float)PR_MSEC_PER_SEC);
|
|
|
|
} while (++i < display->mAnimationDelayCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationDuration()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationDurationCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* duration = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(duration);
|
|
|
|
|
|
|
|
duration->SetTime((float)animation->GetDuration() / (float)PR_MSEC_PER_SEC);
|
|
|
|
} while (++i < display->mAnimationDurationCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationTimingFunction()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationTimingFunctionCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
AppendTimingFunction(valueList,
|
|
|
|
display->mAnimations[i].GetTimingFunction());
|
|
|
|
} while (++i < display->mAnimationTimingFunctionCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationDirection()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationDirectionCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* direction = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(direction);
|
|
|
|
direction->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(animation->GetDirection(),
|
|
|
|
nsCSSProps::kAnimationDirectionKTable));
|
|
|
|
} while (++i < display->mAnimationDirectionCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationFillMode()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationFillModeCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* fillMode = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(fillMode);
|
|
|
|
fillMode->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(animation->GetFillMode(),
|
|
|
|
nsCSSProps::kAnimationFillModeKTable));
|
|
|
|
} while (++i < display->mAnimationFillModeCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationIterationCount()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationIterationCountCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* iterationCount = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(iterationCount);
|
|
|
|
|
|
|
|
float f = animation->GetIterationCount();
|
2011-04-12 08:12:12 +00:00
|
|
|
/* Need a nasty hack here to work around an optimizer bug in gcc
|
|
|
|
4.2 on Mac, which somehow gets confused when directly comparing
|
|
|
|
a float to the return value of NS_IEEEPositiveInfinity when
|
|
|
|
building 32-bit builds. */
|
|
|
|
#ifdef XP_MACOSX
|
|
|
|
volatile
|
|
|
|
#endif
|
|
|
|
float inf = NS_IEEEPositiveInfinity();
|
|
|
|
if (f == inf) {
|
2011-04-12 06:18:42 +00:00
|
|
|
iterationCount->SetIdent(eCSSKeyword_infinite);
|
|
|
|
} else {
|
|
|
|
iterationCount->SetNumber(f);
|
|
|
|
}
|
|
|
|
} while (++i < display->mAnimationIterationCountCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsIDOMCSSValue*
|
|
|
|
nsComputedDOMStyle::DoGetAnimationPlayState()
|
|
|
|
{
|
|
|
|
const nsStyleDisplay* display = GetStyleDisplay();
|
|
|
|
|
2011-10-17 14:59:28 +00:00
|
|
|
nsDOMCSSValueList *valueList = GetROCSSValueList(true);
|
2011-04-12 06:18:42 +00:00
|
|
|
|
|
|
|
NS_ABORT_IF_FALSE(display->mAnimationPlayStateCount > 0,
|
|
|
|
"first item must be explicit");
|
|
|
|
PRUint32 i = 0;
|
|
|
|
do {
|
|
|
|
const nsAnimation *animation = &display->mAnimations[i];
|
|
|
|
nsROCSSPrimitiveValue* playState = GetROCSSPrimitiveValue();
|
|
|
|
valueList->AppendCSSValue(playState);
|
|
|
|
playState->SetIdent(
|
|
|
|
nsCSSProps::ValueToKeywordEnum(animation->GetPlayState(),
|
|
|
|
nsCSSProps::kAnimationPlayStateKTable));
|
|
|
|
} while (++i < display->mAnimationPlayStateCount);
|
|
|
|
|
|
|
|
return valueList;
|
|
|
|
}
|
|
|
|
|
2007-02-20 18:43:16 +00:00
|
|
|
#define COMPUTED_STYLE_MAP_ENTRY(_prop, _method) \
|
2011-10-17 14:59:28 +00:00
|
|
|
{ eCSSProperty_##_prop, &nsComputedDOMStyle::DoGet##_method, false }
|
2009-02-25 00:14:45 +00:00
|
|
|
#define COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_prop, _method) \
|
2011-10-17 14:59:28 +00:00
|
|
|
{ eCSSProperty_##_prop, &nsComputedDOMStyle::DoGet##_method, true }
|
2002-10-08 01:53:31 +00:00
|
|
|
|
|
|
|
const nsComputedDOMStyle::ComputedStyleMapEntry*
|
|
|
|
nsComputedDOMStyle::GetQueryablePropertyMap(PRUint32* aLength)
|
|
|
|
{
|
|
|
|
/* ******************************************************************* *\
|
|
|
|
* Properties below are listed in alphabetical order. *
|
|
|
|
* Please keep them that way. *
|
|
|
|
* *
|
|
|
|
* Properties commented out with // are not yet implemented *
|
|
|
|
* Properties commented out with //// are shorthands and not queryable *
|
|
|
|
\* ******************************************************************* */
|
2010-10-18 02:36:24 +00:00
|
|
|
static const ComputedStyleMapEntry map[] = {
|
2011-05-16 23:20:08 +00:00
|
|
|
/* ***************************** *\
|
|
|
|
* Implementations of CSS styles *
|
|
|
|
\* ***************************** */
|
2002-10-08 01:53:31 +00:00
|
|
|
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(background, Background),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_attachment, BackgroundAttachment),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_clip, BackgroundClip),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_color, BackgroundColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_image, BackgroundImage),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_origin, BackgroundOrigin),
|
2007-07-22 17:58:37 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_position, BackgroundPosition),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_repeat, BackgroundRepeat),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(background_size, MozBackgroundSize),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border, Border),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_bottom, BorderBottom),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_bottom_color, BorderBottomColor),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_left_radius, BorderBottomLeftRadius),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_right_radius,BorderBottomRightRadius),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_bottom_style, BorderBottomStyle),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_bottom_width, BorderBottomWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_collapse, BorderCollapse),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_color, BorderColor),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_left, BorderLeft),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_left_color, BorderLeftColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_left_style, BorderLeftStyle),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_left_width, BorderLeftWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_right, BorderRight),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_right_color, BorderRightColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_right_style, BorderRightStyle),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_right_width, BorderRightWidth),
|
2004-09-10 03:26:58 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_spacing, BorderSpacing),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_style, BorderStyle),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_top, BorderTop),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_top_color, BorderTopColor),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_left_radius, BorderTopLeftRadius),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_right_radius, BorderTopRightRadius),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_top_style, BorderTopStyle),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(border_top_width, BorderTopWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_width, BorderWidth),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(bottom, Bottom),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_shadow, BoxShadow),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(caption_side, CaptionSide),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(clear, Clear),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(clip, Clip),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(color, Color),
|
2007-07-22 17:58:37 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(content, Content),
|
2005-04-01 23:07:00 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(counter_increment, CounterIncrement),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(counter_reset, CounterReset),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(cursor, Cursor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(direction, Direction),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(display, Display),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(empty_cells, EmptyCells),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(float, CssFloat),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(font, Font),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_family, FontFamily),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_size, FontSize),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_size_adjust, FontSizeAdjust),
|
2009-01-29 20:39:18 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_stretch, FontStretch),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_style, FontStyle),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_variant, FontVariant),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_weight, FontWeight),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(height, Height),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(ime_mode, IMEMode),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(left, Left),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(letter_spacing, LetterSpacing),
|
2009-05-18 22:13:12 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(line_height, LineHeight),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(list_style, ListStyle),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(list_style_image, ListStyleImage),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(list_style_position, ListStylePosition),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(list_style_type, ListStyleType),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(margin, Margin),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(margin_bottom, MarginBottomWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(margin_left, MarginLeftWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(margin_right, MarginRightWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(margin_top, MarginTopWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(marker_offset, MarkerOffset),
|
|
|
|
// COMPUTED_STYLE_MAP_ENTRY(marks, Marks),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(max_height, MaxHeight),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(max_width, MaxWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(min_height, MinHeight),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(min_width, MinWidth),
|
2006-08-08 16:41:03 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(opacity, Opacity),
|
2002-10-08 01:53:31 +00:00
|
|
|
// COMPUTED_STYLE_MAP_ENTRY(orphans, Orphans),
|
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(outline, Outline),
|
2005-03-27 11:36:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(outline_color, OutlineColor),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(outline_offset, OutlineOffset),
|
2005-03-27 11:36:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(outline_style, OutlineStyle),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(outline_width, OutlineWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(overflow, Overflow),
|
2004-09-05 00:04:04 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(overflow_x, OverflowX),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(overflow_y, OverflowY),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(padding, Padding),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(padding_bottom, PaddingBottom),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(padding_left, PaddingLeft),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(padding_right, PaddingRight),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(padding_top, PaddingTop),
|
2002-10-08 01:53:31 +00:00
|
|
|
// COMPUTED_STYLE_MAP_ENTRY(page, Page),
|
2007-07-22 17:58:37 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(page_break_after, PageBreakAfter),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(page_break_before, PageBreakBefore),
|
2002-10-08 01:53:31 +00:00
|
|
|
// COMPUTED_STYLE_MAP_ENTRY(page_break_inside, PageBreakInside),
|
2009-08-27 03:53:35 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(pointer_events, PointerEvents),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(position, Position),
|
2007-07-22 17:58:37 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(quotes, Quotes),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(resize, Resize),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(right, Right),
|
2002-10-08 01:53:31 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(size, Size),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(table_layout, TableLayout),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_align, TextAlign),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_decoration, TextDecoration),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(text_indent, TextIndent),
|
2011-06-22 18:11:47 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_overflow, TextOverflow),
|
2008-06-05 23:06:34 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_shadow, TextShadow),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_transform, TextTransform),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(top, Top),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(unicode_bidi, UnicodeBidi),
|
2009-05-18 22:13:12 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(vertical_align, VerticalAlign),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(visibility, Visibility),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(white_space, WhiteSpace),
|
|
|
|
// COMPUTED_STYLE_MAP_ENTRY(widows, Widows),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(width, Width),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(word_spacing, WordSpacing),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(word_wrap, WordWrap),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(z_index, ZIndex),
|
|
|
|
|
|
|
|
/* ******************************* *\
|
|
|
|
* Implementations of -moz- styles *
|
|
|
|
\* ******************************* */
|
|
|
|
|
2011-04-12 06:18:42 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_delay, AnimationDelay),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_direction, AnimationDirection),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_duration, AnimationDuration),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_fill_mode, AnimationFillMode),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_iteration_count, AnimationIterationCount),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_name, AnimationName),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_play_state, AnimationPlayState),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(animation_timing_function, AnimationTimingFunction),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(appearance, Appearance),
|
2011-08-03 03:04:22 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(backface_visibility, MozBackfaceVisibility),
|
2003-01-17 09:33:52 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_background_inline_policy, BackgroundInlinePolicy),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(binding, Binding),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_bottom_colors, BorderBottomColors),
|
2011-12-22 23:34:45 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(border_image, BorderImage),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_image_outset, BorderImageOutset),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_image_repeat, BorderImageRepeat),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_image_slice, BorderImageSlice),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_image_source, BorderImageSource),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_image_width, BorderImageWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_left_colors, BorderLeftColors),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_right_colors, BorderRightColors),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(border_top_colors, BorderTopColors),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_align, BoxAlign),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_direction, BoxDirection),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_flex, BoxFlex),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_ordinal_group, BoxOrdinalGroup),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_orient, BoxOrient),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_pack, BoxPack),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(box_sizing, BoxSizing),
|
2004-06-17 11:57:37 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_count, ColumnCount),
|
2011-12-26 05:25:59 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_fill, ColumnFill),
|
2004-07-18 12:12:46 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_gap, ColumnGap),
|
2008-07-19 10:38:25 +00:00
|
|
|
//// COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule, ColumnRule),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_color, ColumnRuleColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_style, ColumnRuleStyle),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_rule_width, ColumnRuleWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_column_width, ColumnWidth),
|
2002-10-08 01:53:31 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(float_edge, FloatEdge),
|
2010-07-13 20:30:42 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_feature_settings, MozFontFeatureSettings),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(font_language_override, MozFontLanguageOverride),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(force_broken_image_icon, ForceBrokenImageIcon),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(hyphens, Hyphens),
|
2004-01-15 02:25:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(image_region, ImageRegion),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(orient, Orient),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomLeft, OutlineRadiusBottomLeft),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_bottomRight,OutlineRadiusBottomRight),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_topLeft, OutlineRadiusTopLeft),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_outline_radius_topRight, OutlineRadiusTopRight),
|
2011-08-03 03:04:22 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(perspective, MozPerspective),
|
2011-08-03 03:04:24 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(perspective_origin, MozPerspectiveOrigin),
|
2008-06-05 06:46:24 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stack_sizing, StackSizing),
|
2009-09-26 20:23:47 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_tab_size, MozTabSize),
|
2012-01-12 17:52:21 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_align_last, TextAlignLast),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_blink, MozTextBlink),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_decoration_color, MozTextDecorationColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_decoration_line, MozTextDecorationLine),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_decoration_style, MozTextDecorationStyle),
|
2011-11-24 02:48:23 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_size_adjust, TextSizeAdjust),
|
2009-02-25 00:14:45 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform, MozTransform),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY_LAYOUT(_moz_transform_origin, MozTransformOrigin),
|
2011-08-27 00:01:06 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(transform_style, MozTransformStyle),
|
2009-08-20 21:52:47 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(transition_delay, TransitionDelay),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(transition_duration, TransitionDuration),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(transition_property, TransitionProperty),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(transition_timing_function, TransitionTimingFunction),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(user_focus, UserFocus),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(user_input, UserInput),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(user_modify, UserModify),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(user_select, UserSelect),
|
2008-10-14 14:44:25 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(_moz_window_shadow, WindowShadow),
|
2011-05-16 23:20:08 +00:00
|
|
|
|
|
|
|
/* ***************************** *\
|
|
|
|
* Implementations of SVG styles *
|
|
|
|
\* ***************************** */
|
|
|
|
|
2007-07-21 14:20:25 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(clip_path, ClipPath),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(clip_rule, ClipRule),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(color_interpolation, ColorInterpolation),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(color_interpolation_filters, ColorInterpolationFilters),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(dominant_baseline, DominantBaseline),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(fill, Fill),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(fill_opacity, FillOpacity),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(fill_rule, FillRule),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(filter, Filter),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(flood_color, FloodColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(flood_opacity, FloodOpacity),
|
2009-03-21 15:36:38 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(image_rendering, ImageRendering),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(lighting_color, LightingColor),
|
2007-07-21 14:20:25 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(marker_end, MarkerEnd),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(marker_mid, MarkerMid),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(marker_start, MarkerStart),
|
2011-05-19 22:15:28 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(mask, Mask),
|
2007-07-21 14:20:25 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(shape_rendering, ShapeRendering),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stop_color, StopColor),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stop_opacity, StopOpacity),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke, Stroke),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_dasharray, StrokeDasharray),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_dashoffset, StrokeDashoffset),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_linecap, StrokeLinecap),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_linejoin, StrokeLinejoin),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_miterlimit, StrokeMiterlimit),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_opacity, StrokeOpacity),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(stroke_width, StrokeWidth),
|
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_anchor, TextAnchor),
|
2011-05-16 23:20:08 +00:00
|
|
|
COMPUTED_STYLE_MAP_ENTRY(text_rendering, TextRendering)
|
2007-07-21 14:20:25 +00:00
|
|
|
|
2002-10-08 01:53:31 +00:00
|
|
|
};
|
|
|
|
|
2011-10-11 05:50:08 +00:00
|
|
|
*aLength = ArrayLength(map);
|
2002-10-08 01:53:31 +00:00
|
|
|
|
|
|
|
return map;
|
|
|
|
}
|
|
|
|
|