Skip to content

Add TextColor property to BaseButton and make MathInputButton's color customizable #164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 45 commits into from
Jun 21, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
cd3c5c7
Add TextColor property to BaseButton and make MathInputButton's color…
SymboLinker Sep 15, 2020
083350f
Add a few ButtonTests and refactor out use-once functions from BaseBu…
SymboLinker Sep 16, 2020
04abe53
Fix typo in unit test name MathInputButtonsHaveBlackTextColorByDefault
SymboLinker Sep 16, 2020
aa41a64
ButtonTests: use [ClassData] attribute, use NotNull<T>() extension, i…
SymboLinker Sep 16, 2020
4a56307
Update CSharpMath.CrossPlatform.slnf (suggested commit))
SymboLinker Sep 18, 2020
0271ae8
ButtonTests: use the [MemberData] attribute and MathKeyboardInput enu…
SymboLinker Sep 18, 2020
6aa2ddd
Rename and move file from TestHelpers/NotNull.cs to /Extensions.cs
SymboLinker Sep 18, 2020
f00fa3a
Add ButtonBase.TextColorProperty Xaml Tests to CSharpMath.Forms.Tests
SymboLinker Sep 18, 2020
99417ce
Add MathInputButton_Command unit test and do the suggested cleaning
SymboLinker Sep 19, 2020
fe0f460
MathInputButton_Command test: use the MathInputButton's Keyboard getter
SymboLinker Sep 19, 2020
132e19f
MathInputButton_Command test: no variable is needed anymore for the M…
SymboLinker Sep 19, 2020
d3f7b93
Revert "MathInputButton_Command test: no variable is needed anymore f…
SymboLinker Sep 19, 2020
bca8b4d
Revert "MathInputButton_Command test: use the MathInputButton's Keybo…
SymboLinker Sep 19, 2020
4223835
Add MathButton unit tests that check that the image color is correctl…
SymboLinker Sep 19, 2020
8c486dd
Attempt/test 1: also reference SkiaSharp from the CSharpMath.Forms.cs…
SymboLinker Sep 20, 2020
350fc9b
Attempt/test 2: also reference SkiaSharp from CSharpMath.Forms.Test.c…
SymboLinker Sep 20, 2020
b43a974
Attempt/test 3: Reference SkiaSharp & SkiaSharp.Views.Forms from test…
SymboLinker Sep 20, 2020
6ccb10b
Revert "Attempt/test 3: Reference SkiaSharp & SkiaSharp.Views.Forms f…
SymboLinker Sep 20, 2020
fc639d4
Revert "Attempt/test 2: also reference SkiaSharp from CSharpMath.Form…
SymboLinker Sep 20, 2020
e009029
Revert "Attempt/test 1: also reference SkiaSharp from the CSharpMath.…
SymboLinker Sep 20, 2020
31cc12a
Update SkiaSharp and SkiaSharp.View.Forms to 2.80.2 in all referencin…
SymboLinker Sep 20, 2020
593d677
Add libSkiaSharp.dll to test project CSharpMath.Forms.Tests
SymboLinker Sep 20, 2020
ae84658
Revert "Add libSkiaSharp.dll to test project CSharpMath.Forms.Tests"
SymboLinker Sep 20, 2020
e2dc966
Revert "Update SkiaSharp and SkiaSharp.View.Forms to 2.80.2 in all re…
SymboLinker Sep 20, 2020
1a05de8
Customize buttons for MathKeyboardInput even more
SymboLinker Sep 23, 2020
1991402
Make blinking Placeholder's Nucleus and ForeColor customizable in bot…
SymboLinker Oct 4, 2020
ddb5e4e
MathInputButtons with customized placeholders: what you see is what y…
SymboLinker Oct 3, 2020
a3e6838
Merge pull request #2 from verybadcat/master
SymboLinker Oct 4, 2020
0047a83
Correct comment
SymboLinker Oct 4, 2020
d58072c
MathInputButton: only perform the placeholder color logic if defaults…
SymboLinker Oct 26, 2020
2a9951c
Merge pull request #4 from verybadcat/master
SymboLinker Oct 26, 2020
7ee69ff
Comment out 2 ButtonTests that have Linux failures
SymboLinker Oct 26, 2020
3bb9e34
Use FactAttribute.Skip
SymboLinker Oct 26, 2020
da8b291
Delete NullableColorBindablePropertyHelper (I am afraid I did not try…
SymboLinker Oct 30, 2020
a8c6f8d
Revert "Delete NullableColorBindablePropertyHelper (I am afraid I did…
SymboLinker Oct 30, 2020
b928f4d
Use "foreach" instead of Xamarin.Forms.Internals.ForEach
SymboLinker Oct 30, 2020
afa9f55
First call SetButtonsTextColor and then SetClearButtonImageSource
SymboLinker Oct 30, 2020
e229992
Update CSharpMath.Forms.Example/CSharpMath.Forms.Example/Controls/Mat…
SymboLinker Oct 30, 2020
86c9bbb
Merge pull request #6 from verybadcat/master
SymboLinker Oct 30, 2020
3c76e83
Add unit tests MathButtonTextColorCanChangeMultipleTimes and MathInpu…
SymboLinker Oct 31, 2020
486ac0f
Introduce interface IButtonDraw for bindablePropertyChanged
SymboLinker Nov 1, 2020
ae04c89
Shut CSharpMath.Ios.Tests
Happypig375 Nov 1, 2020
1426a9a
add lock for now
FoggyFinder Jun 15, 2021
edfed19
Create and use method SubStringCount() instead of Regex.Matches().Count
SymboLinker Jun 20, 2021
db93ac9
Customized placeholder colors: add unit test
SymboLinker Jun 21, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CSharpMath.CrossPlatform.slnf
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@
"CSharpMath.Avalonia.Example/CSharpMath.Avalonia.Example.csproj",
"CSharpMath.SkiaSharp/CSharpMath.SkiaSharp.csproj",
"CSharpMath.Forms/CSharpMath.Forms.csproj",
"CSharpMath.Forms.Example/CSharpMath.Forms.Example/CSharpMath.Forms.Example.csproj"
"CSharpMath.Forms.Example/CSharpMath.Forms.Example/CSharpMath.Forms.Example.csproj",
"CSharpMath.Forms.Tests/CSharpMath.Forms.Tests.csproj"

]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,14 @@
<!--Right row of first 3 tabs-->
<Style TargetType="f:MathInputButton" Class="Back">
<Setter Property="Input" Value="Backspace"/>
<Setter Property="TextColor" Value="Red" />
<Setter Property="Grid.Column" Value="5"/>
<Setter Property="Grid.Row" Value="0"/>
<Setter Property="Keyboard" Value="{StaticResource Keyboard}"/>
</Style>
<Style TargetType="f:MathInputButton" Class="Clear">
<Setter Property="Input" Value="Clear"/>
<Setter Property="TextColor" Value="Red" />
<Setter Property="Grid.Column" Value="5"/>
<Setter Property="Grid.Row" Value="1"/>
<Setter Property="Keyboard" Value="{StaticResource Keyboard}"/>
Expand Down
47 changes: 47 additions & 0 deletions CSharpMath.Forms.Tests/ButtonTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using CSharpMath.Editor;
using Xamarin.Forms;
using Xunit;
namespace CSharpMath.Forms.Tests {
public class ButtonTests {
[Fact]
public void ChangingButtonTextColorDoesNotChangeLatexPropertyValue() {
var latexContent = @"1\leq 2";
var newColor = Color.Gray;

var mathButton = new MathButton { Content = new MathView { LaTeX = latexContent } };
mathButton.TextColor = newColor;
Assert.Equal(mathButton.TextColor, newColor);
Assert.Equal(latexContent, mathButton.Content.LaTeX);

var textButton = new TextButton { Content = new TextView { LaTeX = latexContent } };
textButton.TextColor = newColor;
Assert.Equal(mathButton.TextColor, newColor);
Assert.Equal(latexContent, textButton.Content.LaTeX);
}
[Theory]
[ClassData(typeof(TheMathInputButtons))]
public void AllMathInputButtonsHaveLatexContent(MathInputButton mathInputButton) {
Assert.False(string.IsNullOrEmpty(mathInputButton.Content?.LaTeX));
}
[Theory]
[ClassData(typeof(TheMathInputButtons))]
public void MathInputButtonsHaveBlackTextColorByDefault(MathInputButton mathInputButton) {
// At the time of writing this test, vphatom = @"{\color{#00FFFFFF}{|}}" (Xamarin.Forms.Color.Transparent = "#00FFFFFF") is used as there is no \vphantom command yet.
// As soon as \vphantom has been implemented, the call .Replace(LatexHelper.vphantom, "") can be removed.
Assert.DoesNotContain(@"\color", mathInputButton.Content.NotNull().LaTeX.NotNull().Replace(LatexHelper.vphantom, ""));
Assert.Equal(Color.Black, mathInputButton.TextColor);
}
[Theory]
[ClassData(typeof(TheMathInputButtons))]
public void MathInputButtonsHaveTransparentBackgroundByDefault(MathInputButton mathInputButton) {
Assert.Equal(Color.Transparent, mathInputButton.BackgroundColor);
}
public class TheMathInputButtons : TestHelpers.ComplexClassData<MathInputButton> {
public override IEnumerable<MathInputButton> theData =>
Enum.GetValues(typeof(MathKeyboardInput)).Cast<MathKeyboardInput>().Select(input => new MathInputButton { Input = input });
}
}
}
6 changes: 6 additions & 0 deletions CSharpMath.Forms.Tests/CSharpMath.Forms.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<EmbeddedResource Include="..\CSharpMath.Rendering.Tests\ComicNeue_Bold.otf" Link="ComicNeue_Bold.otf" />
<ProjectReference Include="..\CSharpMath.Forms\CSharpMath.Forms.csproj" />
</ItemGroup>
</Project>
11 changes: 11 additions & 0 deletions CSharpMath.Forms.Tests/TestHelpers/ComplexClassData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace CSharpMath.Forms.Tests.TestHelpers {
public abstract class ComplexClassData<T> : IEnumerable<object[]> where T : class {
public abstract IEnumerable<T> theData { get; }
IEnumerator<object[]> IEnumerable<object[]>.GetEnumerator() {
foreach (var item in theData)
yield return new object[] { item };
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => ((IEnumerable<object[]>)this).GetEnumerator();
}
}
15 changes: 15 additions & 0 deletions CSharpMath.Forms.Tests/TestHelpers/NotNull.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace CSharpMath.Forms.Tests {
public static class Extensions {
public static T NotNull<T>(this T? obj) where T : class {
if (obj == null)
throw new Xunit.Sdk.NotNullException();
#nullable disable
return obj;
#nullable restore
}
}
}
49 changes: 32 additions & 17 deletions CSharpMath.Forms/Buttons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,42 @@ public abstract class BaseButton<TView, TPainter, TContent> : ImageButton
where TView : BaseView<TPainter, TContent>
where TPainter : Rendering.FrontEnd.Painter<SKCanvas, TContent, SKColor>, new()
where TContent : class {
private Color _textColor;
public Color TextColor {
get => _textColor;
set {
_textColor = value;
Source = ImageSource.FromStream(() => {
if (Content is { } c) {
var painter = c.Painter;
var originalLatexString = painter.LaTeX;

if (painter.FontSize is Rendering.FrontEnd.PainterConstants.DefaultFontSize)
painter.FontSize = Rendering.FrontEnd.PainterConstants.LargerFontSize;

if (TextColor != Color.Black && painter.LaTeX != null)
painter.LaTeX = LatexHelper.SetColor(painter.LaTeX, TextColor);

// Appropriate positioning for non-full characters, e.g. prime, degree
// Also acts as spacing between MathButtons next to each other
// TODO: Implement and use \phantom
painter.LaTeX = LatexHelper.vphantom + painter.LaTeX + LatexHelper.vphantom;

var stream = painter.DrawAsStream();
painter.LaTeX = originalLatexString;
return stream;
}
return null;
});
}
}
public BaseButton() {
Aspect = Aspect.AspectFit;
// Color.Default will be ugly: https://github.com/verybadcat/CSharpMath/issues/111
BackgroundColor = Color.Transparent;
Source = ImageSource.FromStream(() => {
if (Content is { } c) {
var latex = c.Painter.LaTeX;
if (c.Painter.FontSize is Rendering.FrontEnd.PainterConstants.DefaultFontSize)
// Have a clear output by default
c.Painter.FontSize = Rendering.FrontEnd.PainterConstants.LargerFontSize;
// Appropriate positioning for non-full characters, e.g. prime, degree
// Also acts as spacing between MathButtons next to each other
// TODO: Implement and use \phantom
c.Painter.LaTeX = @"{\color{#00000000}|}" + latex + @"{\color{#00000000}|}";
var stream = c.Painter.DrawAsStream();
c.Painter.LaTeX = latex;
return stream;
}
return null;
});
TextColor = Color.Black;
}
public static readonly BindableProperty TextColorProperty = BindableProperty.Create(nameof(TextColor), typeof(Color), typeof(BaseButton<TView, TPainter, TContent>),
propertyChanged: (b, o, n) => ((BaseButton<TView, TPainter, TContent>)b).TextColor = (Color)n);
public TView? Content { get => (TView?)GetValue(ContentProperty); set => SetValue(ContentProperty, value); }
public static readonly BindableProperty ContentProperty = BindableProperty.Create(nameof(Content), typeof(TView), typeof(BaseButton<TView, TPainter, TContent>));
}
Expand Down
11 changes: 11 additions & 0 deletions CSharpMath.Forms/LatexHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace CSharpMath.Forms {
public static class LatexHelper {
public static readonly string vphantom = SetColor("|", Color.Transparent);
public static string SetColor(string latex, Color color) => @"{\color{" + color.ToHex() + "}{" + latex + "}}";
}
}
6 changes: 3 additions & 3 deletions CSharpMath.Forms/MathInputButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ static string InputToLaTeX(MathKeyboardInput input) {
case MathKeyboardInput.Right: return "\u25B6";
case MathKeyboardInput.Up: return "\u25B2";
case MathKeyboardInput.Down: return "\u25BC";
case MathKeyboardInput.Backspace: return "{\\color{red}\u2B05}";
case MathKeyboardInput.Backspace: return "\u2B05";
case MathKeyboardInput.Return: return "\u21B5";
case MathKeyboardInput.Clear: return "{\\color{red}\u21BB}";
case MathKeyboardInput.Clear: return "\u21BB";
case MathKeyboardInput.Dismiss: return "\u2A2F";
case MathKeyboardInput.Space: return @"\ ␣\ ";
default:
Expand All @@ -25,7 +25,7 @@ static string InputToLaTeX(MathKeyboardInput input) {
}
}
public static readonly BindableProperty InputProperty =
BindableProperty.Create(nameof(Input), typeof(MathKeyboardInput), typeof(MathInputButton), propertyChanged:(b, o, n) => {
BindableProperty.Create(nameof(Input), typeof(MathKeyboardInput), typeof(MathInputButton), propertyChanged: (b, o, n) => {
var button = (MathInputButton)b;
button.Content ??= new MathView();
button.Content.LaTeX = InputToLaTeX((MathKeyboardInput)n);
Expand Down
53 changes: 52 additions & 1 deletion CSharpMath.sln
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharpMath.Evaluation.Tests
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpMath.Ios.Tests", "CSharpMath.Ios.Tests\CSharpMath.Ios.Tests.csproj", "{30C91103-12E5-47AE-85FE-41B0218A8997}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpMath.Rendering.Benchmarks", "CSharpMath.Rendering.Benchmarks\CSharpMath.Rendering.Benchmarks.csproj", "{3D54C678-A873-4831-9894-9E92E6F8EEBF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharpMath.Rendering.Benchmarks", "CSharpMath.Rendering.Benchmarks\CSharpMath.Rendering.Benchmarks.csproj", "{3D54C678-A873-4831-9894-9E92E6F8EEBF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CSharpMath.Forms.Tests", "CSharpMath.Forms.Tests\CSharpMath.Forms.Tests.csproj", "{FBD8667E-9506-4654-9FF1-49A75BE17771}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Expand Down Expand Up @@ -1513,6 +1515,54 @@ Global
{3D54C678-A873-4831-9894-9E92E6F8EEBF}.Release|x64.Build.0 = Release|Any CPU
{3D54C678-A873-4831-9894-9E92E6F8EEBF}.Release|x86.ActiveCfg = Release|Any CPU
{3D54C678-A873-4831-9894-9E92E6F8EEBF}.Release|x86.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|Any CPU.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|ARM.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|ARM.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|iPhone.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|x64.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|x64.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|x86.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.AppStore|x86.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|ARM.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|iPhone.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|x64.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|x64.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|x86.ActiveCfg = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Debug|x86.Build.0 = Debug|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|Any CPU.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|ARM.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|ARM.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|iPhone.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|iPhone.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|x64.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|x64.Build.0 = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|x86.ActiveCfg = Release|Any CPU
{FBD8667E-9506-4654-9FF1-49A75BE17771}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -1554,6 +1604,7 @@ Global
{06241755-626A-4992-9CAE-C5A5745CB83C} = {125C1FE9-F684-4E87-A9EF-969FD1E2D726}
{30C91103-12E5-47AE-85FE-41B0218A8997} = {1D406122-CB0D-4366-8EBC-2207EA64B7F1}
{3D54C678-A873-4831-9894-9E92E6F8EEBF} = {125C1FE9-F684-4E87-A9EF-969FD1E2D726}
{FBD8667E-9506-4654-9FF1-49A75BE17771} = {C365BD30-D4E7-444A-A66D-25AAB9C67038}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3C9A56A6-4EA3-4228-B064-E4789B282032}
Expand Down