mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 03:07:56 +01:00
Add a new image provider for `MarkdownTextBlock` that allows loading
images from additional sources:
- **file scheme**
- Enables loading images using the `file:` scheme.
- Intentionally restricts file URIs to absolute paths to ensure correct
resolution when passed through the CmdPal extension/host boundary. (In
most cases, 3rd-party extensions will provide the paths, but the CmdPal
host performs the actual loading and would otherwise resolve paths
relative to itself.)
- **data scheme**
- Enables loading images from URIs with the `data:` scheme (both Base64
and URL-encoded forms).
- Note: the Markdown control itself cannot handle large input and may
hang before the code introduced in this PR is invoked.
- **ms-appx scheme**
- This scheme is now supported for loading images.
- However, since the Command Palette host performs the loading,
`ms-appx:` resolution applies to the host and not the extensions, which
limits its usefulness.
- **ms-appdata scheme**
- This scheme is now supported for loading images.
- Similar to `ms-appx:`, resolution applies to the host, not the
extensions, limiting its usefulness.
---
Additionally, this PR introduces the concept of **_image source
hints_**, implemented as query string parameters piggy-backed on the
original URI.
These hints allow users to influence the behavior of images within
Markdown content.
- `--x-cmdpal-fit`
- `none`: no automatic scaling, provides image as is (default)
- `fit`: scale to fit the available space
- `--x-cmdpal-upscale`
- `true`: allow upscaling
- `false`: downscale only (default)
- `--x-cmdpal-width`: desired width in pixels
- `--x-cmdpal-height`: desired height in pixels
- `--x-cmdpal-maxwidth`: max width in pixels
- `--x-cmdpal-maxheight`: max height in pixels
---
Since `MarkdownTextBlock` requires conforming to the `IImageProvider`
interface—which accepts only a raw URI and must return an `Image`
control—this PR also introduces a new class `RtbInlineImageFactory`.
The factory hooks into the root text block upon loading and listens for
events related to **layout** and **DPI changes**, ensuring that images
adapt correctly to the control’s environment.
```csharp
public interface IImageProvider
{
Task<Image> GetImage(string url);
bool ShouldUseThisProvider(string url);
}
```
---
Pictures? Videos!
Loading images from new schemes:
https://github.com/user-attachments/assets/e0f4308d-30b2-4c81-86db-353048c708c1
New image source scaling options:
https://github.com/user-attachments/assets/ec5b007d-3140-4f0a-b163-7b278233ad40
<!-- 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
<!-- Please review the items on the PR checklist before submitting-->
## PR Checklist
- [x] Closes: #41752
- [ ] **Communication:** I've discussed this with core contributors
already. If the work hasn't been agreed, this work might be rejected
- [ ] **Tests:** Added/updated and all pass
- [ ] **Localization:** All end-user-facing strings can be localized
- [ ] **Dev docs:** Added/updated
- [ ] **New binaries:** Added on the required places
- [ ] [JSON for
signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json)
for new binaries
- [ ] [WXS for
installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs)
for new binaries and localization folder
- [ ] [YML for CI
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml)
for new test projects
- [ ] [YML for signed
pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml)
- [ ] **Documentation updated:** If checked, please file a pull request
on [our docs
repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys)
and link it here: #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
---------
Co-authored-by: Michael Jolley <mike@baldbeardedbuilder.com>
135 lines
3.3 KiB
Plaintext
135 lines
3.3 KiB
Plaintext
# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
|
|
(?:^|/)(?i)COPYRIGHT
|
|
(?:^|/)(?i)LICEN[CS]E
|
|
(?:^|/)(?i)third[-_]?party/
|
|
(?:^|/)3rdparty/
|
|
(?:^|/)generated/
|
|
(?:^|/)go\.sum$
|
|
(?:^|/)package(?:-lock|)\.json$
|
|
(?:^|/)Pipfile$
|
|
(?:^|/)power-rename-ui-flags$
|
|
(?:^|/)pyproject.toml
|
|
(?:^|/)sample\.qoi$
|
|
(?:^|/)vendor/
|
|
(?:^|/)WindowsSettings\.json$
|
|
(?:^|/|\b)requirements(?:-dev|-doc|-test|)\.txt$
|
|
(?:|$^ 92.31% - excluded 12/13)/editor/[^/]+$
|
|
/images/launcher/[^/]+$
|
|
/TestFiles/
|
|
[^/]\.cur$
|
|
[^/]\.gcode$
|
|
[^/]\.bgcode$
|
|
[^/]\.rgs$
|
|
\.a$
|
|
\.ai$
|
|
\.all-contributorsrc$
|
|
\.avi$
|
|
\.bmp$
|
|
\.bz2$
|
|
\.cert?$|\.crt$
|
|
\.class$
|
|
\.coveragerc$
|
|
\.crl$
|
|
\.csr$
|
|
\.dll$
|
|
\.docx?$
|
|
\.drawio$
|
|
\.DS_Store$
|
|
\.eot$
|
|
\.eps$
|
|
\.exe$
|
|
\.filters$
|
|
\.gif$
|
|
\.git-blame-ignore-revs$
|
|
\.gitattributes$
|
|
\.gitkeep$
|
|
\.graffle$
|
|
\.gz$
|
|
\.icns$
|
|
\.ico$
|
|
\.ipynb$
|
|
\.jar$
|
|
\.jks$
|
|
\.jpe?g$
|
|
\.key$
|
|
\.lib$
|
|
\.lock$
|
|
\.map$
|
|
\.min\..
|
|
\.mo$
|
|
\.mod$
|
|
\.mp[34]$
|
|
\.o$
|
|
\.ocf$
|
|
\.otf$
|
|
\.p12$
|
|
\.parquet$
|
|
\.pdf$
|
|
\.pem$
|
|
\.pfx$
|
|
\.png$
|
|
\.psd$
|
|
\.pyc$
|
|
\.pylintrc$
|
|
\.qm$
|
|
\.s$
|
|
\.sig$
|
|
\.snk$
|
|
\.so$
|
|
\.stl$
|
|
\.svgz?$
|
|
\.sys$
|
|
\.tar$
|
|
\.tgz$
|
|
\.tiff?$
|
|
\.ttf$
|
|
\.wav$
|
|
\.webm$
|
|
\.webp$
|
|
\.woff2?$
|
|
\.xcf$
|
|
\.xlsx?$
|
|
\.xpm$
|
|
\.xz$
|
|
\.zip$
|
|
^\.github/actions/spell-check/
|
|
^\.github/workflows/spelling\d*\.yml$
|
|
^\.gitmodules$
|
|
^\Q.pipelines/ESRPSigning_core.json\E$
|
|
^\Qdoc/devdocs/localization.md\E$
|
|
^\Qsrc/modules/MouseUtils/MouseJump.Common/NativeMethods/User32/UI/WindowsAndMessaging/User32.SYSTEM_METRICS_INDEX.cs\E$
|
|
^doc/devdocs/akaLinks\.md$
|
|
^NOTICE\.md$
|
|
^src/common/CalculatorEngineCommon/exprtk\.hpp$
|
|
^src/common/ManagedCommon/ColorFormatHelper\.cs$
|
|
^src/common/notifications/BackgroundActivatorDLL/cpp\.hint$
|
|
^src/common/sysinternals/Eula/
|
|
^src/modules/cmdpal/doc/initial-sdk-spec/list-elements-mock-002\.pdn$
|
|
^src/modules/colorPicker/ColorPickerUI/Shaders/GridShader\.cso$
|
|
^src/modules/launcher/Plugins/Microsoft\.PowerToys\.Run\.Plugin\.TimeDate/Properties/
|
|
^src/modules/MouseUtils/MouseJumpUI/MainForm\.resx$
|
|
^src/modules/MouseWithoutBorders/App/.*/NativeMethods\.cs$
|
|
^src/modules/MouseWithoutBorders/App/Form/.*\.Designer\.cs$
|
|
^src/modules/MouseWithoutBorders/App/Form/.*\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmAbout\.cs$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmInputCallback\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmLogon\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmMatrix\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmMessage\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmMouseCursor\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Form/frmScreen\.resx$
|
|
^src/modules/MouseWithoutBorders/App/Helper/.*\.resx$
|
|
^src/modules/MouseWithoutBorders/ModuleInterface/generateSecurityDescriptor\.h$
|
|
^src/modules/peek/Peek.Common/NativeMethods\.txt$
|
|
^src/modules/previewpane/SvgPreviewHandler/SvgHTMLPreviewGenerator\.cs$
|
|
^src/modules/previewpane/UnitTests-MarkdownPreviewHandler/HelperFiles/MarkdownWithHTMLImageTag\.txt$
|
|
^src/modules/registrypreview/RegistryPreviewUILib/Controls/HexBox/.*$
|
|
^src/modules/ZoomIt/ZoomIt/ZoomIt\.idc$
|
|
^src/Monaco/
|
|
^tools/project_template/ModuleTemplate/resource\.h$
|
|
^tools/Verification scripts/Check preview handler registration\.ps1$
|
|
ignore$
|
|
^src/modules/registrypreview/RegistryPreviewUILib/Controls/HexBox/.*$
|
|
^src/common/CalculatorEngineCommon/exprtk\.hpp$
|
|
src/modules/cmdpal/ext/SamplePagesExtension/Pages/SampleMarkdownImagesPage.cs
|