bezierRgba function

bool bezierRgba(
  1. Pointer<SdlRenderer> renderer,
  2. Pointer<Int16> vx,
  3. Pointer<Int16> vy,
  4. int n,
  5. int s,
  6. int r,
  7. int g,
  8. int b,
  9. int a, {
  10. int blendMode = SDL_BLENDMODE_BLEND,
})

Implementation

bool bezierRgba(
  Pointer<SdlRenderer> renderer,
  Pointer<Int16> vx,
  Pointer<Int16> vy,
  int n,
  int s,
  int r,
  int g,
  int b,
  int a, {
  int blendMode = SDL_BLENDMODE_BLEND,
}) {
  var result = true;
  int i;
  double t;
  double stepsize;
  final x = <double>[];
  final y = <double>[];
  int x1;
  int y1;
  int x2;
  int y2;

  /*
	* Sanity check
	*/
  if (n < 3) {
    return false;
  }
  if (s < 2) {
    return false;
  }

  /*
	* Variable setup
	*/
  stepsize = 1.0 / s;

  /* Transfer vertices into float arrays */
  for (i = 0; i < n; i++) {
    x.add(vx[i].toDouble());
    y.add(vy[i].toDouble());
  }
  x.add(vx[0].toDouble());
  y.add(vy[0].toDouble());

  /*
	* Set color
	*/
  result = true;
  if (result) {
    result = sdlSetRenderDrawBlendMode(renderer, blendMode);
  }
  if (result) {
    result = sdlSetRenderDrawColor(renderer, r, g, b, a);
  }

  /*
	* Draw
	*/
  t = 0.0;
  x1 = _evaluateBezier(x, n + 1, t).toInt();
  y1 = _evaluateBezier(y, n + 1, t).toInt();
  for (i = 0; i <= (n * s); i++) {
    t += stepsize;
    x2 = _evaluateBezier(x, n, t).toInt();
    y2 = _evaluateBezier(y, n, t).toInt();
    if (result) {
      result = line(
        renderer,
        x1.toDouble(),
        y1.toDouble(),
        x2.toDouble(),
        y2.toDouble(),
      );
    }
    x1 = x2;
    y1 = y2;
  }

  /* Clean up temporary array */
  //free(x);
  //free(y);

  return result;
}