resolveCoordinatesFromAnchor function

List<double> resolveCoordinatesFromAnchor(
  1. String anchor,
  2. double left,
  3. double top,
  4. double width,
  5. double height,
)

Implementation

List<double> resolveCoordinatesFromAnchor(
    String anchor, double left, double top, double width, double height) {
  double valueX = -1;
  double valueY = -1;

  switch (anchor) {
    case 'UpperLeft':
      valueX = left;
      valueY = top;
      break;
    case 'UpperCenter':
      valueX = left + width / 2;
      valueY = top;
      break;
    case 'UpperRight':
      valueX = left + width;
      valueY = top;
      break;
    case 'CenterLeft':
      valueX = left;
      valueY = top + height / 2;
      break;
    case 'Center':
      valueX = left + width / 2;
      valueY = top + height / 2;
      break;
    case 'CenterRight':
      valueX = left + width;
      valueY = top + height / 2;
      break;
    case 'LowerLeft':
      valueX = left;
      valueY = top + height;
      break;
    case 'LowerCenter':
      valueX = left + width / 2;
      valueY = top + height;
      break;
    case 'LowerRight':
      valueX = left + width;
      valueY = top + height;
      break;
    default:
      List<String> parts = anchor.split(';');
      if (parts.length == 2) {
        try {
          double offsetX = double.parse(parts[0]);
          double offsetY = double.parse(parts[1]);
          if (offsetX > 0 && offsetX < 1 && offsetY > 0 && offsetY < 1) {
            // Relative offset.
            valueX = left + offsetX * width;
            valueY = top + offsetY * height;
          } else {
            // Absolute offset.
            valueX = left + offsetX;
            valueY = top + offsetY;
          }
        } catch (e) {
          print("Error parsing custom anchor offsets: $e");
        }
      } else {
        print("Invalid custom anchor format: $anchor");
      }
  }

  return [valueX, valueY];
}