Skip to content

Commit 8f03721

Browse files
committed
Update v3.0
1 parent 1ecf4f8 commit 8f03721

8 files changed

Lines changed: 119 additions & 30 deletions

File tree

EmptyKeys.UserInterface.Designer/EmptyKeys.UserInterface.Designer.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
<Compile Include="EventTrigger.cs" />
7474
<Compile Include="GeneratedBindingsMode.cs" />
7575
<Compile Include="GeneratedBindings.cs" />
76+
<Compile Include="ImageBrush.cs" />
7677
<Compile Include="ImageButton.cs" />
7778
<Compile Include="Input\GamepadBinding.cs" />
7879
<Compile Include="Input\GamepadGesture.cs" />
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using System.Windows;
7+
using System.Windows.Media;
8+
9+
namespace EmptyKeys.UserInterface.Designer
10+
{
11+
/// <summary>
12+
/// Implements fake designer class for Image Brush
13+
/// </summary>
14+
public static class ImageBrush
15+
{
16+
/// <summary>
17+
/// The color overlay property
18+
/// </summary>
19+
public static readonly DependencyProperty ColorOverlayProperty =
20+
DependencyProperty.RegisterAttached("ColorOverlay", typeof(Color), typeof(ImageBrush),
21+
new FrameworkPropertyMetadata(Color.FromArgb(255,255,255,255)));
22+
23+
/// <summary>
24+
/// Gets the color overlay.
25+
/// </summary>
26+
/// <param name="obj">The object.</param>
27+
/// <returns></returns>
28+
public static Color GetColorOverlay(DependencyObject obj)
29+
{
30+
return (Color)obj.GetValue(ColorOverlayProperty);
31+
}
32+
33+
/// <summary>
34+
/// Sets the color overlay.
35+
/// </summary>
36+
/// <param name="obj">The object.</param>
37+
/// <param name="value">The value.</param>
38+
public static void SetColorOverlay(DependencyObject obj, Color value)
39+
{
40+
obj.SetValue(ColorOverlayProperty, value);
41+
}
42+
}
43+
}

GlobalAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@
1313

1414
[assembly: NeutralResourcesLanguage("en")]
1515

16-
[assembly: AssemblyVersion("2.6.0.0")]
17-
[assembly: AssemblyFileVersion("2.6.0.0")]
16+
[assembly: AssemblyVersion("3.0.0.0")]
17+
[assembly: AssemblyFileVersion("3.0.0.0")]

UIGenerator/CodeComHelper.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ static CodeComHelper()
8080
supportedAttachedProperties.Add("VirtualizedCacheMaxRows");
8181
supportedAttachedProperties.Add("VirtualizedCacheMaxItems");
8282
supportedAttachedProperties.Add("EnableVirtualization");
83+
supportedAttachedProperties.Add("ColorOverlay");
8384

8485
ignoredProperties.Add("NameScope");
8586
ignoredProperties.Add("BaseUri");
@@ -474,7 +475,7 @@ public static CodeExpression GenerateBrushInstance(CodeMemberMethod method, Brus
474475
return brushExpr;
475476
}
476477

477-
ImageBrush image = brush as ImageBrush;
478+
System.Windows.Media.ImageBrush image = brush as System.Windows.Media.ImageBrush;
478479
if (image != null)
479480
{
480481
brushExpr = GenerateImageBrush(method, variableName, brushTypeName, brushExpr, image);
@@ -486,7 +487,7 @@ public static CodeExpression GenerateBrushInstance(CodeMemberMethod method, Brus
486487
return brushExpr;
487488
}
488489

489-
private static CodeExpression GenerateImageBrush(CodeMemberMethod method, string variableName, string brushTypeName, CodeExpression brushExpr, ImageBrush image)
490+
private static CodeExpression GenerateImageBrush(CodeMemberMethod method, string variableName, string brushTypeName, CodeExpression brushExpr, System.Windows.Media.ImageBrush image)
490491
{
491492
CodeVariableDeclarationStatement variable = new CodeVariableDeclarationStatement(
492493
"ImageBrush", variableName,
@@ -497,18 +498,18 @@ private static CodeExpression GenerateImageBrush(CodeMemberMethod method, string
497498
BitmapImage bitmap = image.ImageSource as BitmapImage;
498499
if (bitmap != null)
499500
{
500-
GenerateBitmapImageField(method, brushExpr, image, bitmap.UriSource, variableName + "_bm", ImageBrush.ImageSourceProperty);
501+
GenerateBitmapImageField(method, brushExpr, image, bitmap.UriSource, variableName + "_bm", System.Windows.Media.ImageBrush.ImageSourceProperty);
501502
}
502503

503-
if (BindingOperations.IsDataBound(image, ImageBrush.ImageSourceProperty))
504+
if (BindingOperations.IsDataBound(image, System.Windows.Media.ImageBrush.ImageSourceProperty))
504505
{
505506
CodeComHelper.GenerateBindings(method, brushExpr, image, variableName);
506507
}
507508

508-
GenerateEnumField<Stretch>(method, brushExpr, image, ImageBrush.StretchProperty);
509-
GenerateEnumField<BrushMappingMode>(method, brushExpr, image, ImageBrush.ViewboxUnitsProperty);
509+
GenerateEnumField<Stretch>(method, brushExpr, image, System.Windows.Media.ImageBrush.StretchProperty);
510+
GenerateEnumField<BrushMappingMode>(method, brushExpr, image, System.Windows.Media.ImageBrush.ViewboxUnitsProperty);
510511
GenerateFieldDoubleToFloat(method, brushExpr, image, Brush.OpacityProperty);
511-
GenerateRect(method, brushExpr, image, ImageBrush.ViewboxProperty);
512+
GenerateRect(method, brushExpr, image, System.Windows.Media.ImageBrush.ViewboxProperty);
512513

513514
GenerateAttachedProperties(method, brushExpr, image);
514515

@@ -835,7 +836,7 @@ private static string CreatePathFromParameters(PropertyPath propertyPath)
835836
{
836837
continue;
837838
}
838-
839+
839840
path = path.Replace(string.Format("({0})", i), parameter.Name);
840841
}
841842

@@ -963,6 +964,19 @@ public static void GenerateAttachedProperties(CodeMemberMethod method, CodeExpre
963964
new CodeFieldReferenceExpression(enumType, value.ToString()));
964965
method.Statements.Add(setValue);
965966
}
967+
else if (value is Color)
968+
{
969+
Color valueColor = (Color)value;
970+
971+
CodeMethodInvokeExpression setValue = new CodeMethodInvokeExpression(
972+
typeReference, "Set" + property.Name, target,
973+
new CodeObjectCreateExpression("ColorW",
974+
new CodePrimitiveExpression(valueColor.R),
975+
new CodePrimitiveExpression(valueColor.G),
976+
new CodePrimitiveExpression(valueColor.B),
977+
new CodePrimitiveExpression(valueColor.A)));
978+
method.Statements.Add(setValue);
979+
}
966980
else
967981
{
968982
if (value is double)
@@ -1012,7 +1026,7 @@ public static void GenerateSoundSources(CodeMemberMethod method, SoundSourceColl
10121026
public static CodeSnippetExpression GenerateSoundSource(CodeMemberMethod method, SoundSource sound)
10131027
{
10141028
CodeSnippetExpression expression = new CodeSnippetExpression(
1015-
string.Format("new SoundSource {{ SoundType = SoundType.{0}, SoundAsset = \"{1}\", Volume = {2}f }}", sound.SoundType, sound.SoundAsset, sound.Volume));
1029+
string.Format("new SoundSource {{ SoundType = SoundType.{0}, SoundAsset = \"{1}\", Volume = {2}f }}", sound.SoundType, sound.SoundAsset, sound.Volume));
10161030

10171031
method.Statements.Add(new CodeMethodInvokeExpression(
10181032
new CodeFieldReferenceExpression(new CodeTypeReferenceExpression("SoundManager"), "Instance"),
@@ -1070,7 +1084,7 @@ public static void GenerateTemplateStyleField(CodeTypeDeclaration parentClass, C
10701084
CodeExpression valueExpr = GetValueExpression(parentClass, method, value, name);
10711085
method.Statements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(target, property.Name), valueExpr));
10721086
}
1073-
}
1087+
}
10741088

10751089
/// <summary>
10761090
/// Gets the resource key expression.
@@ -1251,6 +1265,7 @@ public static void GenerateSetter(CodeTypeDeclaration parentClass, CodeMemberMet
12511265
{
12521266
setterValue = Convert.ToSingle(setterValue); // TODO maybe there is better solution for this
12531267
}
1268+
12541269
CodeExpression setterValueExpr = GetValueExpression(parentClass, method, setterValue, setterVarName);
12551270
if (setterValueExpr != null)
12561271
{

UIGenerator/Types/ElementGeneratorType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public virtual CodeExpression Generate(DependencyObject source, CodeTypeDeclarat
101101
CodeComHelper.GenerateField<bool>(method, fieldReference, source, FrameworkElement.IsEnabledProperty);
102102
CodeComHelper.GenerateField<bool>(method, fieldReference, source, FrameworkElement.IsHitTestVisibleProperty);
103103
CodeComHelper.GenerateField<bool>(method, fieldReference, source, FrameworkElement.SnapsToDevicePixelsProperty);
104+
CodeComHelper.GenerateField<bool>(method, fieldReference, source, FrameworkElement.UseLayoutRoundingProperty);
104105
CodeComHelper.GenerateField<bool>(method, fieldReference, source, UIElement.FocusableProperty);
105106
CodeComHelper.GenerateEnumField<Visibility>(method, fieldReference, source, FrameworkElement.VisibilityProperty);
106107
CodeComHelper.GenerateThicknessField(method, fieldReference, source, FrameworkElement.MarginProperty);

UIGenerator/UserInterfaceGenerator.cs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,16 @@ public class UserInterfaceGenerator
3838
/// <param name="inputFileContent">Content of the input file.</param>
3939
/// <param name="renderMode">The render mode.</param>
4040
/// <param name="desiredNamespace">The desired namespace.</param>
41+
/// <param name="header">The header.</param>
4142
/// <returns></returns>
42-
public string GenerateCode(string inputFileName, string inputFileContent, RenderMode renderMode, string desiredNamespace)
43+
public string GenerateCode(string inputFileName, string inputFileContent, RenderMode renderMode, string desiredNamespace, string header)
4344
{
4445
inputFileContent = RemoveClass(inputFileContent);
4546

4647
var parserContext = new ParserContext
4748
{
48-
BaseUri = new Uri(inputFileName, UriKind.Absolute)
49-
};
49+
BaseUri = new Uri(inputFileName, UriKind.Absolute)
50+
};
5051

5152
object source = null;
5253
try
@@ -65,12 +66,12 @@ public string GenerateCode(string inputFileName, string inputFileContent, Render
6566
if (source == null)
6667
{
6768
return "Source is empty. XAML file is not valid.";
68-
}
69+
}
6970

7071
Console.WriteLine();
7172
Console.WriteLine("Generating " + inputFileName);
7273

73-
ElementGeneratorType.NameUniqueId = 0;
74+
ElementGeneratorType.NameUniqueId = 0;
7475
string className = Path.GetFileNameWithoutExtension(inputFileName);
7576

7677
CodeNamespace ns = new CodeNamespace(desiredNamespace);
@@ -82,16 +83,16 @@ public string GenerateCode(string inputFileName, string inputFileContent, Render
8283
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Data"));
8384
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls"));
8485
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Controls.Primitives"));
85-
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Input"));
86+
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Input"));
8687
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Interactions.Core"));
87-
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Interactivity"));
88+
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Interactivity"));
8889
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media"));
8990
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Effects"));
9091
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Animation"));
9192
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Media.Imaging"));
9293
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Shapes"));
9394
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Renderers"));
94-
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Themes"));
95+
ns.Imports.Add(new CodeNamespaceImport("EmptyKeys.UserInterface.Themes"));
9596

9697
CodeTypeDeclaration classType = new CodeTypeDeclaration(className);
9798

@@ -106,11 +107,18 @@ public string GenerateCode(string inputFileName, string inputFileContent, Render
106107
new CodePrimitiveExpression(generatedCodeAttribute.Version)));
107108
classType.CustomAttributes.Add(codeAttrDecl);
108109

109-
ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false));
110-
ns.Comments.Add(new CodeCommentStatement(" ", false));
111-
ns.Comments.Add(new CodeCommentStatement(" This file was generated, please do not modify.", false));
112-
ns.Comments.Add(new CodeCommentStatement(" ", false));
113-
ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false));
110+
if (string.IsNullOrEmpty(header))
111+
{
112+
ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false));
113+
ns.Comments.Add(new CodeCommentStatement(" ", false));
114+
ns.Comments.Add(new CodeCommentStatement(" This file was generated, please do not modify.", false));
115+
ns.Comments.Add(new CodeCommentStatement(" ", false));
116+
ns.Comments.Add(new CodeCommentStatement("-----------------------------------------------------------", false));
117+
}
118+
else
119+
{
120+
ns.Comments.Add(new CodeCommentStatement(header, false));
121+
}
114122

115123
CodeMemberMethod initMethod = null;
116124
if (source is UIRoot)

UIGenerator/Values/FontWeightGeneratorValue.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,14 @@ public CodeExpression Generate(CodeTypeDeclaration parentClass, CodeMemberMethod
4343
{
4444
FontWeight fontWeight = (FontWeight)value;
4545
CodeTypeReferenceExpression typeReference = new CodeTypeReferenceExpression("FontStyle");
46-
valueExpression = new CodeFieldReferenceExpression(typeReference, fontWeight.ToString());
46+
if (fontWeight == FontWeights.Normal)
47+
{
48+
valueExpression = new CodeFieldReferenceExpression(typeReference, "Regular");
49+
}
50+
else
51+
{
52+
valueExpression = new CodeFieldReferenceExpression(typeReference, fontWeight.ToString());
53+
}
4754
}
4855

4956
return valueExpression;

ekUiGen/Program.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ static int Main(string[] args)
3030
string desiredNamespace = string.Empty;
3131
string buildDir = string.Empty;
3232
string defaultAssembly = string.Empty;
33+
string headerFile = string.Empty;
3334

3435
var optionSet = new OptionSet()
3536
.Add("?|help|h", "Command line help", o => showHelp = o != null)
@@ -46,7 +47,8 @@ static int Main(string[] args)
4647
.Add<string>("ns|namespace=", "The namespace to generate the code under", o => desiredNamespace = o)
4748
.Add<string>("bd|buildDir=", "Directory for additional assemblies", o => buildDir = o)
4849
.Add("generate-bindings", "Generate data bindings", o => generateBindings = o != null)
49-
.Add<string>("da|defaultAssembly=", "Assembly name to use for clr-namespaces without an assembly", o => defaultAssembly = o);
50+
.Add<string>("da|defaultAssembly=", "Assembly name to use for clr-namespaces without an assembly", o => defaultAssembly = o)
51+
.Add<string>("header=", "Header file for generated .cs files", o => headerFile = o);
5052

5153
try
5254
{
@@ -121,6 +123,18 @@ static int Main(string[] args)
121123
CopyDirectory(buildDir, Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), true);
122124
}
123125

126+
string header = string.Empty;
127+
if (!string.IsNullOrEmpty(headerFile))
128+
{
129+
if (!File.Exists(headerFile))
130+
{
131+
Console.WriteLine($"Header file {headerFile} does not exist.");
132+
return -1;
133+
}
134+
135+
header = File.ReadAllText(headerFile);
136+
}
137+
124138
BindingGenerator.Instance.IsEnabled = generateBindings;
125139

126140
foreach (var file in Directory.EnumerateFiles(inputDirectory, "*.xaml", SearchOption.AllDirectories))
@@ -135,7 +149,7 @@ static int Main(string[] args)
135149

136150
try
137151
{
138-
Generate(file, outputFile, renderMode, desiredNamespace, defaultAssembly);
152+
Generate(file, outputFile, renderMode, desiredNamespace, defaultAssembly, header);
139153
}
140154
catch (Exception ex)
141155
{
@@ -176,7 +190,7 @@ static int Main(string[] args)
176190
return 0;
177191
}
178192

179-
private static void Generate(string xamlFile, string outputFile, RenderMode renderMode, string desiredNamespace, string defaultAssembly)
193+
private static void Generate(string xamlFile, string outputFile, RenderMode renderMode, string desiredNamespace, string defaultAssembly, string header)
180194
{
181195
string xaml = string.Empty;
182196
using (TextReader tr = File.OpenText(xamlFile))
@@ -195,7 +209,7 @@ private static void Generate(string xamlFile, string outputFile, RenderMode rend
195209
string generatedCode = string.Empty;
196210
try
197211
{
198-
generatedCode = generator.GenerateCode(xamlFile, xaml, renderMode, desiredNamespace);
212+
generatedCode = generator.GenerateCode(xamlFile, xaml, renderMode, desiredNamespace, header);
199213
}
200214
catch (Exception ex)
201215
{

0 commit comments

Comments
 (0)