goToTimePath method

dynamic goToTimePath(
  1. dynamic x,
  2. dynamic y,
  3. dynamic w,
  4. dynamic h,
)

Implementation

goToTimePath(x, y, w, h) {
  var pathData = {};
  var linePath = [];
  var txtPath = [];
  var pj = 0, j = 0;
  double oy = 0, ox = 0;
  for (j = kStartI; j < kStopI; j++) {
    if (Tools.isInKline(chartData.klineData[j]['time'], goToTime,
        klineState.widget.propertys['interval'])) {
      pj = j - kStartI;
      oy = Tools.priceToY(h, chartData.klineData[j]['high'], kYMin, kScale);
      ox = x + kStartX + pj * kWG + kGap + kW / 2;
      String xTimeStr = Tools.intervalTimeFormat(chartData.klineData[j]['time'],klineState.widget.propertys['interval']);
      double pading = 10; //上下左右间距10
      var xTimeStrw = Tools.getStrW(xTimeStr, style['goToTimeStyle']['font']);
      double rw = xTimeStrw['width'] + pading * 2;
      double rh = xTimeStrw['height'] + pading * 2;
      double arrow = 8;
      double oxoff = 0;
      if (ox - rw / 2 < 0) {
        // 边缘小于0的时候,像右偏移
        oxoff = (rw / 2 - ox);//.floor();
      } else if (ox + rw / 2 > w) {
        // 边缘大于w的时候,像左偏移
        oxoff = (w - (ox + rw / 2));//.floor();
      }
      //x轴刻度背景矩形块
      linePath.add([
        "drawRect",
        [ox - rw / 2 + oxoff, y + oy - rh - arrow+2, rw, rh,  style['goToTimeStyle']['property']['reactRound']]//矩形背景高度往下+2像素和箭头有一个重叠,让箭头在左右两边时可以填充矩形的圆角空白区
      ]);
      linePath.add([
        "moveTo",
        [ox - arrow, y + oy - arrow]
      ]);
      linePath.add([
        "lineTo",
        [ox + arrow, y + oy - arrow]
      ]);
      linePath.add([
        "lineTo",
        [ox, y + oy]
      ]);
      linePath.add([
        "lineTo",
        [ox - arrow, y + oy - arrow]
      ]);
      //x轴刻度文字默认居中对齐
      txtPath.add([
        xTimeStr,
        ox - xTimeStrw['width'] / 2 + oxoff,
        y + oy - rh - arrow + pading
      ]);
      break;
    }
  }
  pathData = {'linePath': linePath, 'txtPath': txtPath};
  return pathData;
}