• C
    minimap - allow variable scaling (#82265) · 5767f6f2
    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
monaco.d.ts 157.9 KB