gecko-dev/layout/style/MappedDeclarations.cpp
Emilio Cobos Álvarez 7d6f6c28d7 Bug 1536582 - Autogenerate Servo_ binding functions with cbindgen. r=boris
This depends on https://github.com/eqrion/cbindgen/pull/308. Other than that,
this should be ready to go.

There's still a bit more magic than what I'd like to eventually. I should be
able to make cbindgen not rename types if it doesn't know about them, or
something.

But this removes most of the manual binding function implementations (all but
the ones that are declared via macros, which cbindgen doesn't see across).

I need to give up on the _Drop functions taking an Owned<T> because of
instantiation order fiasco. In order to define DefaultDelete I need Owned to be
complete, but I cannot do it after including the generated file since some
declarations already instantiate the specialization. Oh well.

Differential Revision: https://phabricator.services.mozilla.com/D24798

--HG--
rename : servo/components/style/cbindgen.toml => servo/ports/geckolib/cbindgen.toml
extra : moz-landing-system : lando
2019-03-30 20:18:33 +00:00

42 lines
1.4 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 "MappedDeclarations.h"
#include "nsAttrValue.h"
#include "nsAttrValueInlines.h"
#include "mozilla/dom/Document.h"
#include "nsPresContext.h"
namespace mozilla {
void MappedDeclarations::SetIdentAtomValue(nsCSSPropertyID aId,
nsAtom* aValue) {
Servo_DeclarationBlock_SetIdentStringValue(mDecl, aId, aValue);
if (aId == eCSSProperty__x_lang) {
// This forces the lang prefs result to be cached so that we can access them
// off main thread during traversal.
//
// FIXME(emilio): Can we move mapped attribute declarations across
// documents? Isn't this wrong in that case? This is pretty out of place
// anyway.
mDocument->ForceCacheLang(aValue);
}
}
void MappedDeclarations::SetBackgroundImage(const nsAttrValue& aValue) {
if (aValue.Type() != nsAttrValue::eURL) {
return;
}
// FIXME(emilio): Going through URL parsing again seems slightly wasteful.
nsAutoString str;
aValue.ToString(str);
Servo_DeclarationBlock_SetBackgroundImage(
mDecl, &str, mDocument->DefaultStyleAttrURLData());
}
} // namespace mozilla