whole_func_string: function () {
        var self = this;
        var start_x = time_x(self.capture_idx.start);
        var end_x = time_x(self.capture_idx.end);
        var end_y = self.h - margin[2];
        var end_attrs = {
          stroke: "#666",
          "stroke-width": "1"
        };
        var label_attrs = {
          fill: "white",
          "font-size": "16",
          "opacity": ".5"
        };
        paper.path(
          "M" + start_x + "," + margin[0] + " " +
          "L" + start_x + "," + end_y).attr(end_attrs);
        var m;
        if (self.pix_per_sec <= 1000) {
          m = 1000;
        } else if (self.pix_per_sec <= 2000) {
          m = 500;
        } else if (self.pix_per_sec <= 3500) {
          m = 250;
        } else if (self.pix_per_sec <= 5000) {
          m = 100;
        } else {
          m = 50;
        }
        for (var i = self.capture_idx.start; i < self.capture_idx.end; i += m) {
          var i_x = time_x(i);
          paper.path(
            "M" + i_x + "," + margin[0] + " " +
            "L" + i_x + "," + end_y
          ).attr({
            stroke: "#444",
            "stroke-width": "1"
          });
          paper.text(i_x, end_y + 10,
            ((i - self.capture_idx.start) / 1000) + "s").attr(label_attrs);
          paper.text(i_x, margin[0] - 20,
            ((i - self.capture_idx.start) / 1000) + "s").attr(label_attrs);
        }
        paper.path(
          "M" + end_x + "," + margin[0] + " " +
          "L" + end_x + "," + end_y
        ).attr(end_attrs);
      }
func_code_string: function () {
        var self = this;
        var start_x = time_x(self.capture_idx.start);
        var end_x = time_x(self.capture_idx.end);
        var end_y = self.h - margin[2];
        var end_attrs = {
          stroke: "#666",
          "stroke-width": "1"
        };
        var label_attrs = {
          fill: "white",
          "font-size": "16",
          "opacity": ".5"
        };
        paper.path(
          "M" + start_x + "," + margin[0] + " " +
          "L" + start_x + "," + end_y).attr(end_attrs);
        var m;
        if (self.pix_per_sec <= 1000) {
          m = 1000;
        } else if (self.pix_per_sec <= 2000) {
          m = 500;
        } else if (self.pix_per_sec <= 3500) {
          m = 250;
        } else if (self.pix_per_sec <= 5000) {
          m = 100;
        } else {
          m = 50;
        }
        for (var i = self.capture_idx.start; i < self.capture_idx.end; i += m) {
          var i_x = time_x(i);
          paper.path(
            "M" + i_x + "," + margin[0] + " " +
            "L" + i_x + "," + end_y
          ).attr({
            stroke: "#444",
            "stroke-width": "1"
          });
          paper.text(i_x, end_y + 10,
            ((i - self.capture_idx.start) / 1000) + "s").attr(label_attrs);
          paper.text(i_x, margin[0] - 20,
            ((i - self.capture_idx.start) / 1000) + "s").attr(label_attrs);
        }
        paper.path(
          "M" + end_x + "," + margin[0] + " " +
          "L" + end_x + "," + end_y
        ).attr(end_attrs);
      }
func_documentation_string: draw scale markings appropriate for the capture