Adds exception handling of uri creation in profile background image update (#11542)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Moves baskgroung image update releated code into separate function and adds uri path construction exeption handling. <!-- Other than the issue solved, is this relevant to any other issues/existing PRs? --> ## References <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist * [x] Closes #11361 * [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA * [ ] Tests added/passed * [ ] Documentation updated. If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx * [ ] Schema updated. * [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed Tried to put garbage as a path. Terminal didn't crashed.
This commit is contained in:
parent
e10e1d8ef1
commit
f63159db59
|
@ -297,37 +297,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!newAppearance.BackgroundImage().empty())
|
_SetBackgroundImage(newAppearance);
|
||||||
{
|
|
||||||
Windows::Foundation::Uri imageUri{ newAppearance.BackgroundImage() };
|
|
||||||
|
|
||||||
// Check if the image brush is already pointing to the image
|
|
||||||
// in the modified settings; if it isn't (or isn't there),
|
|
||||||
// set a new image source for the brush
|
|
||||||
auto imageSource = BackgroundImage().Source().try_as<Media::Imaging::BitmapImage>();
|
|
||||||
|
|
||||||
if (imageSource == nullptr ||
|
|
||||||
imageSource.UriSource() == nullptr ||
|
|
||||||
imageSource.UriSource().RawUri() != imageUri.RawUri())
|
|
||||||
{
|
|
||||||
// Note that BitmapImage handles the image load asynchronously,
|
|
||||||
// which is especially important since the image
|
|
||||||
// may well be both large and somewhere out on the
|
|
||||||
// internet.
|
|
||||||
Media::Imaging::BitmapImage image(imageUri);
|
|
||||||
BackgroundImage().Source(image);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply stretch, opacity and alignment settings
|
|
||||||
BackgroundImage().Stretch(newAppearance.BackgroundImageStretchMode());
|
|
||||||
BackgroundImage().Opacity(newAppearance.BackgroundImageOpacity());
|
|
||||||
BackgroundImage().HorizontalAlignment(newAppearance.BackgroundImageHorizontalAlignment());
|
|
||||||
BackgroundImage().VerticalAlignment(newAppearance.BackgroundImageVerticalAlignment());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BackgroundImage().Source(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update our control settings
|
// Update our control settings
|
||||||
const auto bg = newAppearance.DefaultBackground();
|
const auto bg = newAppearance.DefaultBackground();
|
||||||
|
@ -412,6 +382,57 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Method Description:
|
||||||
|
// - Sets background image and applies its settings (stretch, opacity and alignment)
|
||||||
|
// - Checks path validity
|
||||||
|
// Arguments:
|
||||||
|
// - newAppearance
|
||||||
|
// Return Value:
|
||||||
|
// - <none>
|
||||||
|
void TermControl::_SetBackgroundImage(const IControlAppearance& newAppearance)
|
||||||
|
{
|
||||||
|
if (newAppearance.BackgroundImage().empty())
|
||||||
|
{
|
||||||
|
BackgroundImage().Source(nullptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Windows::Foundation::Uri imageUri{ nullptr };
|
||||||
|
try
|
||||||
|
{
|
||||||
|
imageUri = Windows::Foundation::Uri{ newAppearance.BackgroundImage() };
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
LOG_CAUGHT_EXCEPTION();
|
||||||
|
BackgroundImage().Source(nullptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the image brush is already pointing to the image
|
||||||
|
// in the modified settings; if it isn't (or isn't there),
|
||||||
|
// set a new image source for the brush
|
||||||
|
auto imageSource = BackgroundImage().Source().try_as<Media::Imaging::BitmapImage>();
|
||||||
|
|
||||||
|
if (imageSource == nullptr ||
|
||||||
|
imageSource.UriSource() == nullptr ||
|
||||||
|
imageSource.UriSource().RawUri() != imageUri.RawUri())
|
||||||
|
{
|
||||||
|
// Note that BitmapImage handles the image load asynchronously,
|
||||||
|
// which is especially important since the image
|
||||||
|
// may well be both large and somewhere out on the
|
||||||
|
// internet.
|
||||||
|
Media::Imaging::BitmapImage image(imageUri);
|
||||||
|
BackgroundImage().Source(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply stretch, opacity and alignment settings
|
||||||
|
BackgroundImage().Stretch(newAppearance.BackgroundImageStretchMode());
|
||||||
|
BackgroundImage().Opacity(newAppearance.BackgroundImageOpacity());
|
||||||
|
BackgroundImage().HorizontalAlignment(newAppearance.BackgroundImageHorizontalAlignment());
|
||||||
|
BackgroundImage().VerticalAlignment(newAppearance.BackgroundImageVerticalAlignment());
|
||||||
|
}
|
||||||
|
|
||||||
// Method Description:
|
// Method Description:
|
||||||
// - Set up each layer's brush used to display the control's background.
|
// - Set up each layer's brush used to display the control's background.
|
||||||
// - Respects the settings for acrylic, background image and opacity from
|
// - Respects the settings for acrylic, background image and opacity from
|
||||||
|
|
|
@ -202,6 +202,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||||
void _UpdateSettingsFromUIThread(IControlSettings newSettings);
|
void _UpdateSettingsFromUIThread(IControlSettings newSettings);
|
||||||
void _UpdateAppearanceFromUIThread(IControlAppearance newAppearance);
|
void _UpdateAppearanceFromUIThread(IControlAppearance newAppearance);
|
||||||
void _ApplyUISettings(const IControlSettings&);
|
void _ApplyUISettings(const IControlSettings&);
|
||||||
|
void _SetBackgroundImage(const IControlAppearance& newAppearance);
|
||||||
|
|
||||||
void _InitializeBackgroundBrush();
|
void _InitializeBackgroundBrush();
|
||||||
void _BackgroundColorChangedHandler(const IInspectable& sender, const IInspectable& args);
|
void _BackgroundColorChangedHandler(const IInspectable& sender, const IInspectable& args);
|
||||||
|
|
Loading…
Reference in a new issue