You are reading a single comment by @Gordon and its replies. Click here to read the full conversation.
  • Hmm. Maybe a stroked font is the best bet. I just had a play - it's slow, but quite interesting:

    font = new Uint16Array(E.toArrayBuffer(atob("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")));
    
    function drawChar(c,ox,oy,s) {
      c-=32;
      if (c<0 || c>95) return 0; // no char
      var i = 0;
      while (c)if(font[++i]&32768) c--;
      var width = font[i++]&63;
      var f;
      while (!((f=font[i++])&32768)) {
        var x = (f&63)*s + ox;
        var y = ((f>>6)&63)*s + oy;
        if (f&16384) g.moveTo(x,y); else g.lineTo(x,y);
      }
      return width*s;
    }
    function drawString(str,x,y,s) {
      x=x||0;
      y=y||0;
      s=s?(s/22):1;
      str=""+str;
      y -= 20*s;
      for (var i=0;i<str.length;i++)
        x+=drawChar(str.charCodeAt(i),x,y,s);
    }
    g.clear();drawString("Hello",0,0,10);g.flip();
    

    It uses half the space of the current vector font, and it scales down really well:

     #   #      # #
     #   #      # #
     ##### #### # #  ####
     #   # #### # # #   #
     #   # #    # # #   #
     #   # ## # # #  # ##
     #   #  ##  # #   ##
     
     #      #           #   #
     #      #           #   #
     #      #           #   #
     #      #    ####   #   #    ####
     ########   #    #  #   #   #    #
     #      #   #    #  #   #   #     #
     #      #  #######  #   #   #     #
     #      #  #        #   #   #     #
     #      #   #    #  #   #   #    #
     #      #    ####   #   #    ####
    

    It's just a matter of making the lines bigger when the text is rendered bigger.

About

Avatar for Gordon @Gordon started