* Fixed a bug where first click on an unfocused image preview would zoom
* added two spaces
* removed unnecessary state variable
* User now has ability to enter zoom-out mode on first click
* removed some code that was not needed
* removed useless if statement
* minimap - allow variable scaling
This PR allows the minimap to be scaled to several constant values. Most of the
work in this PR is adjusting the the font renderer to render character at
variable sizes. It turns out most generic image scaling algorithms are not
built to scale down to one or two pixels (the default minimap font size has
1px by 2px characters), so some work was needed to make this possible and look
good.
Generating fonts at runtime does incur a small performance penalty, taking
about 0.6m at 1x scale and 0.9ms at 4x scale on my machine to create the font
the first time we render a minimap. If we want to avoid this, we could consider
shipping pre-rendered font for the first few scale settings.
At this moment this only supports scaling to a constant integer--effectively,
scaling the character width, since we start at 1x2px. More granular scaling
would be interesting, but will come at a runtime cost as we'll need to do
linear interpolation for each character we draw at a non-integral coordinate.
Draw speed is comparable to the previous version, the profiler reported in
the range of 8-11ms to render my test file in both the previous and new code.
I've tested this on my high DPI Macbook display and it appears to work well
there too.
Talking to Alex, something we may need to look into is matching the user font
and render settings. Previously, and continuing in this PR, we use the default
monospace font on the system with a restricted set of character codes.
Previously the sidebar's font was too small to be visible, but now its content
can be seen under large settings. We may need to look and reworking how this
data is rendered. Perhaps we generate the characters we need on the fly into
their own buffers? Open to ideas.
Fixes https://github.com/microsoft/vscode/issues/21773
* fixup! not caching created factory
* fix common/browser component layering
* fixup! use a constant upscale for hDPI
* small tweaks
* fixup! pr comments
* fixup! reduce max minimap scale