- *x = (int)((bb.r - bb.l + 2*solids[params->solid]->border) * GRID_SCALE);
- *y = (int)((bb.d - bb.u + 2*solids[params->solid]->border) * GRID_SCALE);
+ float gsx, gsy, gs;
+
+ gsx = *x / (bb.r - bb.l + 2*solids[params->solid]->border);
+ gsy = *y / (bb.d - bb.u + 2*solids[params->solid]->border);
+ gs = min(gsx, gsy);
+
+ if (expand)
+ ds->gridscale = gs;
+ else
+ ds->gridscale = min(gs, PREFERRED_GRID_SCALE);
+
+ ds->ox = (int)(-(bb.l - solids[params->solid]->border) * GRID_SCALE);
+ ds->oy = (int)(-(bb.u - solids[params->solid]->border) * GRID_SCALE);
+
+ *x = XSIZE(bb, solids[params->solid]);
+ *y = YSIZE(bb, solids[params->solid]);