void FontFace::DisconnectFromRule() { MOZ_ASSERT(HasRule()); // Make a copy of the descriptors. mDescriptors = new CSSFontFaceDescriptors; mRule->GetDescriptors(*mDescriptors); mRule = nullptr; mInFontFaceSet = false; }
void FontFace::GetDesc(nsCSSFontDesc aDescID, nsCSSValue& aResult) const { if (HasRule()) { MOZ_ASSERT(mRule); MOZ_ASSERT(!mDescriptors); mRule->GetDesc(aDescID, aResult); } else { aResult = mDescriptors->Get(aDescID); } }
void FontFace::SetDescriptor(nsCSSFontDesc aFontDesc, const nsAString& aValue, ErrorResult& aRv) { NS_ASSERTION(!HasRule(), "we don't handle rule backed FontFace objects yet"); if (HasRule()) { return; } nsCSSValue parsedValue; if (!ParseDescriptor(aFontDesc, aValue, parsedValue)) { aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR); return; } mDescriptors->Get(aFontDesc) = parsedValue; // XXX Setting descriptors doesn't actually have any effect on FontFace // objects that have started loading or have already been loaded. }
bool FontFace::SetDescriptors(const nsAString& aFamily, const FontFaceDescriptors& aDescriptors) { MOZ_ASSERT(!HasRule()); MOZ_ASSERT(!mDescriptors); mDescriptors = new CSSFontFaceDescriptors; // Parse all of the mDescriptors in aInitializer, which are the values // we got from the JS constructor. if (!ParseDescriptor(eCSSFontDesc_Family, aFamily, mDescriptors->mFamily) || *mDescriptors->mFamily.GetStringBufferValue() == 0 || !ParseDescriptor(eCSSFontDesc_Style, aDescriptors.mStyle, mDescriptors->mStyle) || !ParseDescriptor(eCSSFontDesc_Weight, aDescriptors.mWeight, mDescriptors->mWeight) || !ParseDescriptor(eCSSFontDesc_Stretch, aDescriptors.mStretch, mDescriptors->mStretch) || !ParseDescriptor(eCSSFontDesc_UnicodeRange, aDescriptors.mUnicodeRange, mDescriptors->mUnicodeRange) || !ParseDescriptor(eCSSFontDesc_FontFeatureSettings, aDescriptors.mFeatureSettings, mDescriptors->mFontFeatureSettings) || !ParseDescriptor(eCSSFontDesc_Display, aDescriptors.mDisplay, mDescriptors->mDisplay)) { // XXX Handle font-variant once we support it (bug 1055385). // If any of the descriptors failed to parse, none of them should be set // on the FontFace. mDescriptors = new CSSFontFaceDescriptors; if (mLoaded) { mLoaded->MaybeReject(NS_ERROR_DOM_SYNTAX_ERR); } SetStatus(FontFaceLoadStatus::Error); return false; } return true; }
gfxUserFontEntry* FontFace::CreateUserFontEntry() { if (!mUserFontEntry) { MOZ_ASSERT(!HasRule(), "Rule backed FontFace objects should already have a user font " "entry by the time Load() can be called on them"); RefPtr<gfxUserFontEntry> newEntry = mFontFaceSet->FindOrCreateUserFontEntryFromFontFace(this); if (newEntry) { SetUserFontEntry(newEntry); } } return mUserFontEntry; }