Make styles inherited by default

This commit is contained in:
Frank A. Krueger 2017-06-18 13:00:07 -07:00
parent 3f1b44d855
commit 3f30531d52
2 changed files with 26 additions and 3 deletions

View File

@ -17,12 +17,17 @@ namespace Ooui
set => SetProperty ("background-color", value); set => SetProperty ("background-color", value);
} }
public Value BackgroundImage {
get => GetProperty ("background-image");
set => SetProperty ("background-image", value);
}
private Value GetProperty (string propertyName) private Value GetProperty (string propertyName)
{ {
lock (properties) { lock (properties) {
Value p; Value p;
if (!properties.TryGetValue (propertyName, out p)) { if (!properties.TryGetValue (propertyName, out p)) {
p = new Value (); p = "inherit";
properties[propertyName] = p; properties[propertyName] = p;
} }
return p; return p;
@ -31,13 +36,14 @@ namespace Ooui
private void SetProperty (string propertyName, Value value) private void SetProperty (string propertyName, Value value)
{ {
var safeValue = value ?? "inherit";
lock (properties) { lock (properties) {
Value old; Value old;
if (properties.TryGetValue (propertyName, out old)) { if (properties.TryGetValue (propertyName, out old)) {
if (EqualityComparer<Value>.Default.Equals (old, value)) if (EqualityComparer<Value>.Default.Equals (old, safeValue))
return; return;
} }
properties[propertyName] = value; properties[propertyName] = safeValue;
} }
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName)); PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
} }

View File

@ -8,6 +8,23 @@ namespace Tests
[TestClass] [TestClass]
public class StyleTests public class StyleTests
{ {
[TestMethod]
public void DefaultIsInherit ()
{
var s = new Style ();
Assert.AreEqual ("inherit", s.BackgroundColor);
}
[TestMethod]
public void NullMakesInherit ()
{
var s = new Style ();
s.BackgroundColor = "red";
Assert.AreEqual ("red", s.BackgroundColor);
s.BackgroundColor = null;
Assert.AreEqual ("inherit", s.BackgroundColor);
}
[TestMethod] [TestMethod]
public void ChangedWhen () public void ChangedWhen ()
{ {