mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
only allow file uris for images
This commit is contained in:
parent
18fed1fa13
commit
70e03e1849
@ -240,13 +240,44 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
return Strings.ResourceManager.GetStringSafe(resourceName);
|
return Strings.ResourceManager.GetStringSafe(resourceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string? GetSourcePath(CustomDialog dialog, string? sourcePath)
|
private static string? GetFullPath(CustomDialog dialog, string? sourcePath)
|
||||||
{
|
{
|
||||||
if (sourcePath == null)
|
if (sourcePath == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return sourcePath.Replace("theme://", $"{dialog.ThemeDir}\\");
|
return sourcePath.Replace("theme://", $"{dialog.ThemeDir}\\");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct GetImageSourceDataResult
|
||||||
|
{
|
||||||
|
public bool IsIcon = false;
|
||||||
|
public Uri? Uri = null;
|
||||||
|
|
||||||
|
public GetImageSourceDataResult()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static GetImageSourceDataResult GetImageSourceData(CustomDialog dialog, string name, XElement xmlElement)
|
||||||
|
{
|
||||||
|
string path = GetXmlAttribute(xmlElement, name);
|
||||||
|
|
||||||
|
if (path == "{Icon}")
|
||||||
|
return new GetImageSourceDataResult { IsIcon = true };
|
||||||
|
|
||||||
|
path = GetFullPath(dialog, path)!;
|
||||||
|
|
||||||
|
if (!Uri.TryCreate(path, UriKind.RelativeOrAbsolute, out Uri? result))
|
||||||
|
throw new Exception($"{xmlElement.Name} failed to parse {name} as Uri");
|
||||||
|
|
||||||
|
if (result == null)
|
||||||
|
throw new Exception($"{xmlElement.Name} {name} Uri is null");
|
||||||
|
|
||||||
|
if (result.Scheme != "file")
|
||||||
|
throw new Exception($"{xmlElement.Name} {name} uses blacklisted scheme {result.Scheme}");
|
||||||
|
|
||||||
|
return new GetImageSourceDataResult { Uri = result };
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Transformation Elements
|
#region Transformation Elements
|
||||||
@ -409,9 +440,9 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
if (viewport is Rect)
|
if (viewport is Rect)
|
||||||
imageBrush.Viewport = (Rect)viewport;
|
imageBrush.Viewport = (Rect)viewport;
|
||||||
|
|
||||||
string sourcePath = GetSourcePath(dialog, GetXmlAttribute(xmlElement, "ImageSource"))!;
|
var sourceData = GetImageSourceData(dialog, "ImageSource", xmlElement);
|
||||||
|
|
||||||
if (sourcePath == "{Icon}")
|
if (sourceData.IsIcon)
|
||||||
{
|
{
|
||||||
// bind the icon property
|
// bind the icon property
|
||||||
Binding binding = new Binding("Icon") { Mode = BindingMode.OneWay };
|
Binding binding = new Binding("Icon") { Mode = BindingMode.OneWay };
|
||||||
@ -419,16 +450,10 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!Uri.TryCreate(sourcePath, UriKind.RelativeOrAbsolute, out Uri? result))
|
|
||||||
throw new Exception("ImageBrush failed to parse ImageSource as Uri");
|
|
||||||
|
|
||||||
if (result == null)
|
|
||||||
throw new Exception("ImageBrush ImageSource uri is null");
|
|
||||||
|
|
||||||
BitmapImage bitmapImage;
|
BitmapImage bitmapImage;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bitmapImage = new BitmapImage(result);
|
bitmapImage = new BitmapImage(sourceData.Uri!);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -627,7 +652,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
uiElement.FontStyle = GetFontStyleFromXElement(xmlElement);
|
uiElement.FontStyle = GetFontStyleFromXElement(xmlElement);
|
||||||
|
|
||||||
// NOTE: font family can both be the name of the font or a uri
|
// NOTE: font family can both be the name of the font or a uri
|
||||||
string? fontFamily = GetSourcePath(dialog, xmlElement.Attribute("FontFamily")?.Value);
|
string? fontFamily = GetFullPath(dialog, xmlElement.Attribute("FontFamily")?.Value);
|
||||||
if (fontFamily != null)
|
if (fontFamily != null)
|
||||||
uiElement.FontFamily = new System.Windows.Media.FontFamily(fontFamily);
|
uiElement.FontFamily = new System.Windows.Media.FontFamily(fontFamily);
|
||||||
}
|
}
|
||||||
@ -843,7 +868,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
textBlock.BaselineOffset = ParseXmlAttribute<double>(xmlElement, "BaselineOffset", double.NaN);
|
textBlock.BaselineOffset = ParseXmlAttribute<double>(xmlElement, "BaselineOffset", double.NaN);
|
||||||
|
|
||||||
// NOTE: font family can both be the name of the font or a uri
|
// NOTE: font family can both be the name of the font or a uri
|
||||||
string? fontFamily = GetSourcePath(dialog, xmlElement.Attribute("FontFamily")?.Value);
|
string? fontFamily = GetFullPath(dialog, xmlElement.Attribute("FontFamily")?.Value);
|
||||||
if (fontFamily != null)
|
if (fontFamily != null)
|
||||||
textBlock.FontFamily = new System.Windows.Media.FontFamily(fontFamily);
|
textBlock.FontFamily = new System.Windows.Media.FontFamily(fontFamily);
|
||||||
|
|
||||||
@ -886,11 +911,11 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
image.Stretch = ParseXmlAttribute<Stretch>(xmlElement, "Stretch", Stretch.Uniform);
|
image.Stretch = ParseXmlAttribute<Stretch>(xmlElement, "Stretch", Stretch.Uniform);
|
||||||
image.StretchDirection = ParseXmlAttribute<StretchDirection>(xmlElement, "StretchDirection", StretchDirection.Both);
|
image.StretchDirection = ParseXmlAttribute<StretchDirection>(xmlElement, "StretchDirection", StretchDirection.Both);
|
||||||
|
|
||||||
string sourcePath = GetSourcePath(dialog, GetXmlAttribute(xmlElement, "Source"))!;
|
|
||||||
|
|
||||||
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.HighQuality); // should this be modifiable by the user?
|
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.HighQuality); // should this be modifiable by the user?
|
||||||
|
|
||||||
if (sourcePath == "{Icon}")
|
var sourceData = GetImageSourceData(dialog, "Source", xmlElement);
|
||||||
|
|
||||||
|
if (sourceData.IsIcon)
|
||||||
{
|
{
|
||||||
// bind the icon property
|
// bind the icon property
|
||||||
Binding binding = new Binding("Icon") { Mode = BindingMode.OneWay };
|
Binding binding = new Binding("Icon") { Mode = BindingMode.OneWay };
|
||||||
@ -898,19 +923,13 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!Uri.TryCreate(sourcePath, UriKind.RelativeOrAbsolute, out Uri? result))
|
|
||||||
throw new Exception("Image failed to parse Source as Uri");
|
|
||||||
|
|
||||||
if (result == null)
|
|
||||||
throw new Exception("Image Source uri is null");
|
|
||||||
|
|
||||||
bool isAnimated = ParseXmlAttribute<bool>(xmlElement, "IsAnimated", false);
|
bool isAnimated = ParseXmlAttribute<bool>(xmlElement, "IsAnimated", false);
|
||||||
if (!isAnimated)
|
if (!isAnimated)
|
||||||
{
|
{
|
||||||
BitmapImage bitmapImage;
|
BitmapImage bitmapImage;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bitmapImage = new BitmapImage(result);
|
bitmapImage = new BitmapImage(sourceData.Uri!);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -921,7 +940,7 @@ namespace Bloxstrap.UI.Elements.Bootstrapper
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
XamlAnimatedGif.AnimationBehavior.SetSourceUri(image, result);
|
XamlAnimatedGif.AnimationBehavior.SetSourceUri(image, sourceData.Uri!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user