1. 24 Feb, 2013 5 commits
    • David Schnur's avatar
      Break text styles into their own cache tier. · a2dd0645
      David Schnur authored
      Previously the cache was divided only by layer, with entries keyed on a
      string built from the text and style.  Now the style has its own tier in
      the cache, i.e. layers > styles > text > info.
      
      This introduces some complexity, since the nested for loops are ugly,
      but at the same time we avoid having to create the cache-key strings.
      More importantly it solves the problem of uniqueness that exists when we
      try to join strings that may contain arbitrary text.  It also allows a
      further optimization in the canvas plugin, which can now set text style
      and color just once per distinct style, instead of with every string.
      a2dd0645
    • David Schnur's avatar
      Allow text to be divided between multiple layers. · 77e50b17
      David Schnur authored
      This lets users 'namespace' text more naturally, i.e. placing x-axis
      labels in a different container from y-axis labels, providing more
      flexibility when it comes to styling and interactivity.
      
      Internally the text cache now has a second tier: layers > text > info.
      77e50b17
    • David Schnur's avatar
      Add text to its actual layer before measuring it. · 4203a66e
      David Schnur authored
      The getTextInfo method previously added new text to the top-level
      container when measuring it.  Now it adds the text to the text layer,
      just as it will be when rendered, so that parent-child CSS rules can
      resolve correctly.
      
      This also avoids having to safe a reference to the top-level container,
      since it wasn't used anywhere else.
      4203a66e
    • David Schnur's avatar
      Factor out text layer creation to its own method. · e7de8735
      David Schnur authored
      This sets the stage for allowing the use of multiple layers.
      e7de8735
    • David Schnur's avatar
      Reverse cache key order to ensure uniqueness. · a036aa96
      David Schnur authored
      Also switch from dashes to pipes, and remove the angle for now, since we
      don't currently support rotated text.
      a036aa96
  2. 23 Feb, 2013 1 commit
    • David Schnur's avatar
      Replace drawText with add and remove methods. · a9a31644
      David Schnur authored
      Every cache element now contains the actual text element instead of just
      its HTML, plus a flag indicating whether it is visible.  The addText and
      removeText methods control the state of this flag, and the render method
      uses it to manage elements within the text container.  So where we
      previously used drawText to actually render text, now we add each string
      once, then let the render method take care of drawing them as necessary.
      
      This dramatically improves performance by eliminating the need to clear
      and re-populate HTML text on every drawing cycle.  Since the elements
      are now static between add/remove calls, this also allows users to add
      interactivity, as they could in 0.7.  Finally, it eliminates the need
      for a separate 'hot' cache.
      
      I also removed the unnecessary 'dimensions' object; it's easier and
      faster to store the width and height at the top level of the info
      object.
      a9a31644
  3. 21 Feb, 2013 1 commit
  4. 17 Feb, 2013 1 commit
  5. 16 Feb, 2013 1 commit
    • David Schnur's avatar
      Cache actual elements instead of buffering HTML. · 73baa2b9
      David Schnur authored
      This significantly improves performance, since we already create the
      elements when measuring them, and that effort is now no longer wasted.
      We must take care to detach, rather than remove, when clearing the text
      layer, so we can add the elements back later if necessary.
      73baa2b9
  6. 31 Jan, 2013 3 commits
  7. 19 Jan, 2013 6 commits
    • David Schnur's avatar
      Moved canvas tick rendering into a plugin. · a0529ee8
      David Schnur authored
      The base implementation uses the new drawText and getTextInfo methods to
      draw text in HTML.  Canvas rendering has been moved to overrides of
      these methods within the canvas-render plugin.
      a0529ee8
    • David Schnur's avatar
      3b2d43bf
    • David Schnur's avatar
      Added methods to draw and measure text. · edc2bbd9
      David Schnur authored
      These methods provide a common way to draw HTML text above a canvas.
      
      The getTextInfo method generates div HTML for text with a given font
      style/class and angle, measures the element's dimensions, and saves
      everything in a cache.  The drawText method takes the resulting entry,
      finishes generating the inline styles necessary to position the div, and
      adds the result to a buffer.  The render method dumps the buffer into an
      overlay and expires unused cache entries.
      edc2bbd9
    • David Schnur's avatar
      42d5592a
    • David Schnur's avatar
      Abstract-out canvas creation into an object. · a9be4d55
      David Schnur authored
      Moved canvas creation and size management into a new Canvas class.
      
      This is the first step towards a more object-oriented architecture.
      Since we create multiple canvases, and have to maintain several
      module-global variables to track their properties, they are the ideal
      place to start.
      
      This commit also removes sizing code that was duplicated between
      makeCanvas and resizeCanvas.
      a9be4d55
    • David Schnur's avatar
      Renamed the 'canvas' variable to 'surface'. · f66c9ae3
      David Schnur authored
      Renaming the variable gives us room to create a new class called Canvas.
      f66c9ae3
  8. 14 Jan, 2013 2 commits
  9. 13 Jan, 2013 1 commit
  10. 12 Jan, 2013 4 commits
  11. 11 Jan, 2013 5 commits
  12. 10 Jan, 2013 7 commits
  13. 03 Jan, 2013 3 commits