-
由 Connor Peet 提交于
* 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
5767f6f2