kCtipPath method

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

Implementation

kCtipPath(x, y, w, h) {
  var pathData = {};
  var linePath = [];
  var txtPath = [];
  if (chartData.kDataL <= 0) {
    //不画
    return pathData;
  }
  var d = chartData.klineData[chartData.kDataL - 1];
  double cy = Tools.priceToY(h, d['close'], kYMin, kScale);
  double oy = Tools.priceToY(h, d['open'], kYMin, kScale);
  //0.5微调
  if(oy >= cy){
    cy+=0.5;
  }else{
    cy-=0.5;
  }
  if (cy > y + h || cy < y) {
    klineState.cTipPro['top'] = -1;
    return pathData;
  }
  // var c = style[ColorType['downColor']];
  // if (d['close'] < d['open']) {
  //   //下跌色
  //   c = style[ColorType['downColor']];
  // } else {
  //   //上涨色
  //   c = style[ColorType['upColor']];
  // }
  // style['kCtipStyle']['stroke']['color'] = c;
  // style['kCtipStyle']['fill']['color'] = c;

  double padding = style['kCtipStyle']['property']['padding'];
  var djs = Tools.getIntervalDJS(klineState.widget.propertys['interval'],
      chartData.klineData[chartData.kDataL - 1]['time'], chartData.timeUTC,chartData.serveZone,chartData.timeZone);
  double bgw = initYW-20+padding*2;
  double bgh = padding + initYTxtH + padding / 2 + initYTxtH + padding;
  double bgx = x + w - bgw-10+padding;
  double bgy = y + cy - bgh / 4;
  //最新价从最后一根k线开始绘制
  double xoffer = (x + kStartX + (chartData.kDataL- kStartI) * kWG);//.floor();
  //如果最后一根k线x坐标大于y轴,则从0开始绘制
  if(xoffer>w-bgw){
    xoffer = x;
  }
  linePath.addAll([
    [
      "moveTo",
      [xoffer, y + cy]
    ],
    [
      "lineTo",
      [xoffer + w+x-xoffer-bgw, y + cy]
    ]
  ]);
  // 背景和文字放到kline里用组件渲染,通过cTipPro控制坐标
  // linePath.add([
  //   "drawRect",
  //   [bgx, bgy, bgw, bgh, style['kCtipStyle']['property']['reactRound']]
  // ]);
  // txtPath.add([
  //   Tools.toFixed(d['close'], klineState.widget.propertys['priceDigits']),
  //   bgx+bgw-padding,
  //   bgy+padding,
  //  {'xlayout': 'right'}
  // ]);
  // txtPath.add([djs, bgx+bgw-padding, bgy + padding + initYTxtH + padding / 2,{'xlayout': 'right'}]);
  pathData = {'linePath': linePath, 'txtPath': txtPath};

  //更新数据
  klineState.cTipPro['left'] = bgx;
  klineState.cTipPro['top'] = bgy;
  klineState.cTipPro['w'] = bgw;
  klineState.cTipPro['h'] = bgh;
  klineState.cTipPro['price'] = Tools.toFixed(d['close'], klineState.widget.propertys['priceDigits']);
  klineState.cTipPro['djs'] = djs;

  // print('y轴宽度 ${bgw}. ${initYW}');
  return pathData;
}