forked from mirrors/gecko-dev
		
	 680815cd6e
			
		
	
	
		680815cd6e
		
	
	
	
	
		
			
			This patch was generated automatically by the "modeline.py" script, available here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py For every file that is modified in this patch, the changes are as follows: (1) The patch changes the file to use the exact C++ mode lines from the Mozilla coding style guide, available here: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line (2) The patch deletes any blank lines between the mode line & the MPL boilerplate comment. (3) If the file previously had the mode lines and MPL boilerplate in a single contiguous C++ comment, then the patch splits them into separate C++ comments, to match the boilerplate in the coding style. MozReview-Commit-ID: EuRsDue63tK --HG-- extra : rebase_source : 3356d4b80ff6213935192e87cdbc9103fec6084c
		
			
				
	
	
		
			94 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #include "nsRuleData.h"
 | |
| 
 | |
| #include "nsAttrValueInlines.h"
 | |
| #include "nsCSSParser.h"
 | |
| #include "mozilla/Poison.h"
 | |
| #include <stdint.h>
 | |
| 
 | |
| using namespace mozilla;
 | |
| 
 | |
| inline size_t
 | |
| nsRuleData::GetPoisonOffset()
 | |
| {
 | |
|   // Fill in mValueOffsets such that mValueStorage + mValueOffsets[i]
 | |
|   // will yield the frame poison value for all uninitialized value
 | |
|   // offsets.
 | |
|   static_assert(sizeof(uintptr_t) == sizeof(size_t),
 | |
|                 "expect uintptr_t and size_t to be the same size");
 | |
|   static_assert(uintptr_t(-1) > uintptr_t(0),
 | |
|                 "expect uintptr_t to be unsigned");
 | |
|   static_assert(size_t(-1) > size_t(0), "expect size_t to be unsigned");
 | |
|   uintptr_t framePoisonValue = mozPoisonValue();
 | |
|   return size_t(framePoisonValue - uintptr_t(mValueStorage)) /
 | |
|          sizeof(nsCSSValue);
 | |
| }
 | |
| 
 | |
| nsRuleData::nsRuleData(uint32_t aSIDs,
 | |
|                        nsCSSValue* aValueStorage,
 | |
|                        nsPresContext* aContext,
 | |
|                        GeckoStyleContext* aStyleContext)
 | |
|   : GenericSpecifiedValues(StyleBackendType::Gecko, aContext, aSIDs)
 | |
|   , mStyleContext(aStyleContext)
 | |
|   , mValueStorage(aValueStorage)
 | |
| {
 | |
| #ifndef MOZ_VALGRIND
 | |
|   size_t framePoisonOffset = GetPoisonOffset();
 | |
|   for (size_t i = 0; i < nsStyleStructID_Length; ++i) {
 | |
|     mValueOffsets[i] = framePoisonOffset;
 | |
|   }
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void
 | |
| nsRuleData::SetFontFamily(const nsString& aValue)
 | |
| {
 | |
|   nsCSSValue* family = ValueForFontFamily();
 | |
|   nsCSSParser parser;
 | |
|   parser.ParseFontFamilyListString(aValue, nullptr, 0, *family);
 | |
| }
 | |
| 
 | |
| void
 | |
| nsRuleData::SetTextDecorationColorOverride()
 | |
| {
 | |
|   nsCSSValue* decoration = ValueForTextDecorationLine();
 | |
|   int32_t newValue = NS_STYLE_TEXT_DECORATION_LINE_OVERRIDE_ALL;
 | |
|   if (decoration->GetUnit() == eCSSUnit_Enumerated) {
 | |
|     newValue |= decoration->GetIntValue();
 | |
|   }
 | |
|   decoration->SetIntValue(newValue, eCSSUnit_Enumerated);
 | |
| }
 | |
| 
 | |
| void
 | |
| nsRuleData::SetBackgroundImage(nsAttrValue& aValue)
 | |
| {
 | |
|   nsCSSValue* backImage = ValueForBackgroundImage();
 | |
|   // If the value is an image, or it is a URL and we attempted a load,
 | |
|   // put it in the style tree.
 | |
|   if (aValue.Type() == nsAttrValue::eURL) {
 | |
|     aValue.LoadImage(mPresContext->Document());
 | |
|   }
 | |
|   if (aValue.Type() == nsAttrValue::eImage) {
 | |
|     nsCSSValueList* list = backImage->SetListValue();
 | |
|     list->mValue.SetImageValue(aValue.GetImageValue());
 | |
|   }
 | |
| }
 | |
| 
 | |
| #ifdef DEBUG
 | |
| nsRuleData::~nsRuleData()
 | |
| {
 | |
| #ifndef MOZ_VALGRIND
 | |
|   // assert nothing in mSIDs has poison value
 | |
|   size_t framePoisonOffset = GetPoisonOffset();
 | |
|   for (size_t i = 0; i < nsStyleStructID_Length; ++i) {
 | |
|     MOZ_ASSERT(!(mSIDs & (1 << i)) || mValueOffsets[i] != framePoisonOffset,
 | |
|                "value in SIDs was left with poison offset");
 | |
|   }
 | |
| #endif
 | |
| }
 | |
| #endif
 |