очередное предложение: добавить в bottleneck вместо DrawRect/DrawOval/DrawPath — универсальные пути с командами, как сделано во многих 2d рисовалках. то есть, что-то типа такого:
Код:
   VAR
      pt: ARRAY 128 OF INTEGER;
      ppos: INTEGER;
      x, y, w, h: INTEGER;
      PROCEDURE Command (cmd: INTEGER);
      BEGIN
         pt[ppos] := cmd; INC(ppos)
      END Command;
      PROCEDURE Coords (x, y: REAL);
      BEGIN
         pt[ppos] := SHORT(ENTIER(x + 0.5)); INC(ppos);
         pt[ppos] := SHORT(ENTIER(y + 0.5)); INC(ppos);
      END Coords;
         Command(pathMoveTo); Coords(x + rw, y);
         Command(pathLineTo); Coords(x + w - rw, y);
         Command(pathBezierTo);
            Coords(x + w - rw*(1 - KAPPA90), y);
            Coords(x + w, y + rh * (1 - KAPPA90));
            Coords(x + w, y + rh);
         Command(pathLineTo); Coords(x + w, y + h - rh);
         Command(pathBezierTo);
            Coords(x + w, y + h - rh * (1 - KAPPA90));
            Coords(x + w - rw * (1 - KAPPA90), y + h);
            Coords(x + w - rw, y + h);
         Command(pathLineTo); Coords(x + rw, y + h);
         Command(pathBezierTo);
            Coords(x + rw * (1 - KAPPA90), y + h);
            Coords(x, y + h - rh * (1 - KAPPA90));
            Coords(x, y + h - rh);
         Command(pathLineTo); Coords(x, y + rh);
         Command(pathBezierTo);
            Coords(x, y + rh * (1 - KAPPA90));
            Coords(x + rw * (1 - KAPPA90), y);
            Coords(x + rw, y);
         Command(pathClose);
         f.DrawPathComplex(pt, ppos, s, col)
остальное реализовать через этот интерфейс.
что даёт: возможность рисовать сложные фигуры, собирая их из единообразных кусочков. один интерфейс вместо кучи вызовов. упрощение портов на что-то типа AGG (там используется похожий механизм). возможность использовать пути повторно (например, для контура и заливки, без копипасты). возможность в будущем расширять пути новыми командами (например, задавать паттерны для заливок, без сочинения нового апи, просто складывая их в путь как данные команды.
предварительная версия — как обычно — реализована в 
Lament Configuration, будет чиститься и допиливаться. кстати, вот вам и бинарный формат картинок заодно. ;-)
также (ещё не сделано, но будет) предлагаю передавать в райдер HostPorts hunit и vunit, вместо пересчёта координат в Frame. пусть bottleneck получает координаты с максимально возможной точностью, и пересчитывает их сам. полезно для реализации бэкэндов со сглаживанием, например, потому что такие бэкэнды могут хотеть координаты в REAL, например, и лучше их считать прямо на месте, чтобы терять как можно меньше точности. ну да, можно играть с unit, но я всё равно вижу смысл делать финальные пересчёты в bottleneck.
два юнита — на всякий случай и на будущее: горизонтальный и вертикальный. пока что они будут равны, но мало ли.
p.s.: рисовать сглажено, собирая из тех примитивов, что сейчас есть в BBCB — неправильно 
технически. сглаживание делается не так, и работает иначе: рисовалка для корректной работы должна иметь полный путь. который может включать в себя безьерки, и безьерки эти надо переводить в линии уже на уровне bottleneck. так что если мы хотим нормальный aa-rendering — то рано или поздно придётся это сделать. лучше рано.