mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
Bug 1328319 part 2 - Add basic integration of @counter-style. r=heycam
MozReview-Commit-ID: 68CcxyWuINu --HG-- extra : rebase_source : 2772c4ab938daf61e4a14fa952b24ecd4220de6b
This commit is contained in:
parent
6f168c437d
commit
2723728359
@ -122,6 +122,8 @@ GROUP_RULE_FUNCS(Document)
|
||||
#undef BASIC_RULE_FUNCS
|
||||
SERVO_BINDING_FUNC(Servo_CssRules_GetFontFaceRuleAt, nsCSSFontFaceRule*,
|
||||
ServoCssRulesBorrowed rules, uint32_t index)
|
||||
SERVO_BINDING_FUNC(Servo_CssRules_GetCounterStyleRuleAt, nsCSSCounterStyleRule*,
|
||||
ServoCssRulesBorrowed rules, uint32_t index)
|
||||
SERVO_BINDING_FUNC(Servo_StyleRule_GetStyle, RawServoDeclarationBlockStrong,
|
||||
RawServoStyleRuleBorrowed rule)
|
||||
SERVO_BINDING_FUNC(Servo_StyleRule_SetStyle, void,
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "gfxFontFamilyList.h"
|
||||
#include "nsAnimationManager.h"
|
||||
#include "nsAttrValueInlines.h"
|
||||
#include "nsCSSCounterStyleRule.h"
|
||||
#include "nsCSSFrameConstructor.h"
|
||||
#include "nsCSSProps.h"
|
||||
#include "nsCSSParser.h"
|
||||
@ -2113,6 +2114,23 @@ Gecko_CSSFontFaceRule_GetCssText(const nsCSSFontFaceRule* aRule,
|
||||
|
||||
NS_IMPL_FFI_REFCOUNTING(nsCSSFontFaceRule, CSSFontFaceRule);
|
||||
|
||||
nsCSSCounterStyleRule*
|
||||
Gecko_CSSCounterStyle_Create(nsIAtom* aName)
|
||||
{
|
||||
RefPtr<nsCSSCounterStyleRule> rule = new nsCSSCounterStyleRule(aName, 0, 0);
|
||||
return rule.forget().take();
|
||||
}
|
||||
|
||||
void
|
||||
Gecko_CSSCounterStyle_GetCssText(const nsCSSCounterStyleRule* aRule,
|
||||
nsAString* aResult)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
aRule->GetCssText(*aResult);
|
||||
}
|
||||
|
||||
NS_IMPL_FFI_REFCOUNTING(nsCSSCounterStyleRule, CSSCounterStyleRule);
|
||||
|
||||
NS_IMPL_THREADSAFE_FFI_REFCOUNTING(nsCSSValueSharedList, CSSValueSharedList);
|
||||
|
||||
#define STYLE_STRUCT(name, checkdata_cb) \
|
||||
|
@ -51,6 +51,7 @@ namespace mozilla {
|
||||
using mozilla::FontFamilyList;
|
||||
using mozilla::FontFamilyType;
|
||||
using mozilla::ServoElementSnapshot;
|
||||
class nsCSSCounterStyleRule;
|
||||
class nsCSSFontFaceRule;
|
||||
struct nsMediaFeature;
|
||||
struct nsStyleList;
|
||||
@ -520,6 +521,12 @@ nsCSSFontFaceRule* Gecko_CSSFontFaceRule_Create(uint32_t line, uint32_t column);
|
||||
void Gecko_CSSFontFaceRule_GetCssText(const nsCSSFontFaceRule* rule, nsAString* result);
|
||||
NS_DECL_FFI_REFCOUNTING(nsCSSFontFaceRule, CSSFontFaceRule);
|
||||
|
||||
// Counter style rule
|
||||
// Creates and returns a new (already-addrefed) nsCSSCounterStyleRule object.
|
||||
nsCSSCounterStyleRule* Gecko_CSSCounterStyle_Create(nsIAtom* name);
|
||||
void Gecko_CSSCounterStyle_GetCssText(const nsCSSCounterStyleRule* rule, nsAString* result);
|
||||
NS_DECL_FFI_REFCOUNTING(nsCSSCounterStyleRule, CSSCounterStyleRule);
|
||||
|
||||
RawGeckoElementBorrowedOrNull Gecko_GetBody(RawGeckoPresContextBorrowed pres_context);
|
||||
|
||||
// We use an int32_t here instead of a LookAndFeel::ColorID
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "mozilla/ServoPageRule.h"
|
||||
#include "mozilla/ServoStyleRule.h"
|
||||
#include "mozilla/ServoSupportsRule.h"
|
||||
#include "nsCSSCounterStyleRule.h"
|
||||
#include "nsCSSFontFaceRule.h"
|
||||
|
||||
namespace mozilla {
|
||||
@ -46,10 +47,13 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ServoCSSRuleList,
|
||||
if (!aRule->IsCCLeaf()) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRules[i]");
|
||||
cb.NoteXPCOMChild(aRule);
|
||||
// Note about @font-face rule again, since there is an indirect
|
||||
// owning edge through Servo's struct that FontFaceRule in Servo
|
||||
// owns a Gecko nsCSSFontFaceRule object.
|
||||
if (aRule->Type() == nsIDOMCSSRule::FONT_FACE_RULE) {
|
||||
// Note about @font-face and @counter-style rule again, since
|
||||
// there is an indirect owning edge through Servo's struct that
|
||||
// FontFaceRule / CounterStyleRule in Servo owns a Gecko
|
||||
// nsCSSFontFaceRule / nsCSSCounterStyleRule object.
|
||||
auto type = aRule->Type();
|
||||
if (type == nsIDOMCSSRule::FONT_FACE_RULE ||
|
||||
type == nsIDOMCSSRule::COUNTER_STYLE_RULE) {
|
||||
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mRawRules[i]");
|
||||
cb.NoteXPCOMChild(aRule);
|
||||
}
|
||||
@ -99,13 +103,18 @@ ServoCSSRuleList::GetRule(uint32_t aIndex)
|
||||
CASE_RULE(SUPPORTS, Supports)
|
||||
CASE_RULE(DOCUMENT, Document)
|
||||
#undef CASE_RULE
|
||||
// For @font-face and @counter-style rules, the function returns
|
||||
// a borrowed Gecko rule object directly, so we don't need to
|
||||
// create anything here. But we still need to have the style sheet
|
||||
// and parent rule set properly.
|
||||
case nsIDOMCSSRule::FONT_FACE_RULE: {
|
||||
// Returns a borrowed nsCSSFontFaceRule object directly, so we
|
||||
// don't need to create anything here, but we still need to have
|
||||
// the style sheet and parent rule set properly.
|
||||
ruleObj = Servo_CssRules_GetFontFaceRuleAt(mRawRules, aIndex);
|
||||
break;
|
||||
}
|
||||
case nsIDOMCSSRule::COUNTER_STYLE_RULE: {
|
||||
ruleObj = Servo_CssRules_GetCounterStyleRuleAt(mRawRules, aIndex);
|
||||
break;
|
||||
}
|
||||
case nsIDOMCSSRule::KEYFRAMES_RULE:
|
||||
// XXX create corresponding rules
|
||||
default:
|
||||
|
@ -2461,7 +2461,11 @@ nsCSSCounterStyleRule::SetName(const nsAString& aName)
|
||||
mName = name;
|
||||
|
||||
if (StyleSheet* sheet = GetStyleSheet()) {
|
||||
sheet->AsGecko()->SetModifiedByChildRule();
|
||||
if (sheet->IsGecko()) {
|
||||
sheet->AsGecko()->SetModifiedByChildRule();
|
||||
} else {
|
||||
NS_ERROR("stylo: Dynamic change on @counter-style not yet supported");
|
||||
}
|
||||
if (doc) {
|
||||
doc->StyleRuleChanged(sheet, this);
|
||||
}
|
||||
@ -2506,7 +2510,11 @@ nsCSSCounterStyleRule::SetDesc(nsCSSCounterDesc aDescID, const nsCSSValue& aValu
|
||||
mGeneration++;
|
||||
|
||||
if (StyleSheet* sheet = GetStyleSheet()) {
|
||||
sheet->AsGecko()->SetModifiedByChildRule();
|
||||
if (sheet->IsGecko()) {
|
||||
sheet->AsGecko()->SetModifiedByChildRule();
|
||||
} else {
|
||||
NS_ERROR("stylo: Dynamic change on @counter-style not yet supported");
|
||||
}
|
||||
if (doc) {
|
||||
doc->StyleRuleChanged(sheet, this);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user