static void includeArrowsInAreaArc(Arc a) { if ( notNil(a->first_arrow) || notNil(a->second_arrow) ) { int sx, sy, ex, ey; int cx, cy; Any av[4]; points_arc(a, &sx, &sy, &ex, &ey); cx = valInt(a->position->x); cy = valInt(a->position->y); if ( notNil(a->first_arrow) ) { av[0] = toInt(sx); av[1] = toInt(sy); if ( valReal(a->size_angle) >= 0.0 ) { av[2] = toInt(sx+(sy-cy)); av[3] = toInt(sy-(sx-cx)); } else { av[2] = toInt(sx-(sy-cy)); av[3] = toInt(sy+(sx-cx)); } if ( qadSendv(a->first_arrow, NAME_points, 4, av) ) { ComputeGraphical(a->first_arrow); unionNormalisedArea(a->area, a->first_arrow->area); } } if ( notNil(a->second_arrow) ) { av[0] = toInt(ex); av[1] = toInt(ey); if ( valReal(a->size_angle) >= 0.0 ) { av[2] = toInt(ex-(ey-cy)); av[3] = toInt(ey+(ex-cx)); } else { av[2] = toInt(ex+(ey-cy)); av[3] = toInt(ey-(ex-cx)); } if ( qadSendv(a->second_arrow, NAME_points, 4, av) ) { ComputeGraphical(a->second_arrow); unionNormalisedArea(a->area, a->second_arrow->area); } } } }
status initialiseLayoutInterface(Any obj, Graphical image) { LayoutInterface itf = obj; assign(itf, image, image); return qadSendv(image, NAME_layoutInterface, 1, &obj); }
static status unlinkTableCell(TableCell cell) { Table tab; if ( (tab=table_of_cell(cell)) ) qadSendv(tab, NAME_delete, 1, (Any *)&cell); return unlinkLayoutInterface(cell); }
static status removeCellImageTable(Table tab, TableCell cell, BoolObj keep) { Graphical gr = cell->image; if ( notNil(gr) ) { DeviceGraphical(gr, NIL); if ( keep != ON && !onFlag(gr, F_PROTECTED|F_LOCKED|F_FREED) ) qadSendv(gr, NAME_destroy, 0, NULL); } succeed; }
status unlinkLayoutInterface(Any obj) { LayoutInterface itf = obj; if ( notNil(itf->image) && !isFreedObj(itf->image) ) { Any nil = NIL; return qadSendv(itf->image, NAME_layoutInterface, 1, &nil); } succeed; }
static status imageTableCell(TableCell c, Graphical gr) { if ( c->image != gr ) { Graphical old = c->image; Table tab = table_of_cell(c); if ( notNil(old) && !onFlag(old, F_FREEING|F_FREED) ) { Any nil = NIL; qadSendv(old, NAME_layoutInterface, 1, &nil); send(old, NAME_destroy, EAV); } assign(c, image, gr); qadSendv(gr, NAME_layoutInterface, 1, (Any *)&c); if ( tab && notNil(tab->device) ) send(tab->device, NAME_display, gr, EAV); requestComputeLayoutManager(c->layout_manager, DEFAULT); } succeed; }
status adjustFirstArrowBezier(Bezier b) { if ( notNil(b->first_arrow) ) { Any av[4]; av[0] = b->start->x; av[1] = b->start->y; av[2] = b->control1->x; av[3] = b->control1->y; if ( qadSendv(b->first_arrow, NAME_points, 4, av) ) { assign(b->first_arrow, displayed, ON); return ComputeGraphical(b->first_arrow); } } fail; }
status adjustFirstArrowLine(Line ln) { if ( notNil(ln->first_arrow) ) { Any av[4]; av[0] = ln->start_x; av[1] = ln->start_y; av[2] = ln->end_x; av[3] = ln->end_y; if ( qadSendv(ln->first_arrow, NAME_points, 4, av) ) { assign(ln->first_arrow, displayed, ON); return ComputeGraphical(ln->first_arrow); } } fail; }
status adjustSecondArrowBezier(Bezier b) { if ( notNil(b->second_arrow) ) { Any av[4]; av[0] = b->end->x; av[1] = b->end->y; if ( notNil(b->control2) ) { av[2] = b->control2->x; av[3] = b->control2->y; } else { av[2] = b->control1->x; av[3] = b->control1->y; } if ( qadSendv(b->second_arrow, NAME_points, 4, av) ) { assign(b->second_arrow, displayed, ON); return ComputeGraphical(b->second_arrow); } } fail; }
status placeImageTableCell(TableCell cell) { Graphical gr = cell->image; Table tab = table_of_cell(cell); table_cell_dimensions d; int grx, gry; Any av[4]; Point ref = NULL; Name halign = getHalignTableCell(cell); Name valign = getValignTableCell(cell); ComputeGraphical(gr); /* make sure */ av[2] = DEFAULT; /* width */ av[3] = DEFAULT; /* height */ dims_table_cell(cell, &d); if ( halign == NAME_left ) /* determine X-placement */ grx = d.x + d.px; else if ( halign == NAME_right ) grx = d.x + d.w-d.px-valInt(gr->area->w); else if ( halign == NAME_center ) grx = d.x + (d.w-valInt(gr->area->w)+1)/2; else if ( halign == NAME_stretch ) { grx = d.x + d.px; av[2] = toInt(d.w-2*d.px); } else /* if ( halign == NAME_reference ) */ { ref = getIf(gr, NAME_reference, NIL); if ( notNil(ref) ) grx = d.x + d.rx - valInt(ref->x); else grx = d.x + d.px; } if ( valign == NAME_top ) /* determine Y-placement */ gry = d.y + d.py; else if ( valign == NAME_bottom ) gry = d.y + d.h-d.py-valInt(gr->area->h); else if ( valign == NAME_center ) gry = d.y + (d.h-valInt(gr->area->h)+1)/2; else if ( valign == NAME_stretch ) { gry = d.y + d.py; av[3] = toInt(d.h-2*d.py); } else /* if ( halign == NAME_reference ) */ { if ( !ref ) ref = getIf(gr, NAME_reference, NIL); if ( notNil(ref) ) gry = d.y + d.ry - valInt(ref->y); else gry = d.y + d.py; } av[0] = toInt(grx); av[1] = toInt(gry); if ( instanceOfObject(gr, ClassWindow) && /* HACK */ notNil(((PceWindow)gr)->decoration) ) gr = (Graphical)((PceWindow)gr)->decoration; qadSendv(gr, NAME_doSet, 4, av); if ( gr->device != tab->device ) send(tab->device, NAME_display, gr, EAV); succeed; }
static status RedrawAreaArc(Arc a, Area area) { int x, y, w, h; int aw = valInt(a->size->w); int ah = valInt(a->size->h); int sx, sy, ex, ey; int cx, cy; initialiseDeviceGraphical(a, &x, &y, &w, &h); points_arc(a, &sx, &sy, &ex, &ey); cx = valInt(a->position->x); cy = valInt(a->position->y); r_thickness(valInt(a->pen)); r_dash(a->texture); #ifndef WIN32_GRAPHICS r_arcmode(a->close == NAME_none ? NAME_pieSlice : a->close); r_arc(valInt(a->position->x) - aw, valInt(a->position->y) - ah, 2*aw, 2*ah, rfloat(valReal(a->start_angle)*64.0), rfloat(valReal(a->size_angle)*64.0), a->fill_pattern); if ( a->close != NAME_none && a->pen != ZERO ) { if ( a->close == NAME_chord ) { r_line(sx, sy, ex, ey); } else /* if ( a->close == NAME_pieSlice ) */ { r_line(cx, cy, sx, sy); r_line(cx, cy, ex, ey); } } #else /*WIN32_GRAPHICS*/ { int ax, ay, bx, by; double sa = valReal(a->size_angle); int large; if ( sa >= 0.0 ) { ax = sx, ay = sy, bx = ex, by = ey; large = (sa >= 180.0); } else { ax = ex, ay = ey, bx = sx, by = sy; large = (sa <= -180.0); } r_msarc(valInt(a->position->x) - aw, valInt(a->position->y) - ah, 2*aw, 2*ah, ax, ay, bx, by, large, a->close, a->fill_pattern); } #endif /* __WINDOWS__ */ if (notNil(a->first_arrow)) { Any av[4]; av[0] = toInt(sx); av[1] = toInt(sy); if ( valReal(a->size_angle) >= 0.0 ) { av[2] = toInt(sx+(sy-cy)); av[3] = toInt(sy-(sx-cx)); } else { av[2] = toInt(sx-(sy-cy)); av[3] = toInt(sy+(sx-cx)); } if ( qadSendv(a->first_arrow, NAME_points, 4, av) ) { assign(a->first_arrow, displayed, ON); ComputeGraphical(a->first_arrow); RedrawArea(a->first_arrow, area); } } if (notNil(a->second_arrow)) { Any av[4]; av[0] = toInt(ex); av[1] = toInt(ey); if ( valReal(a->size_angle) >= 0.0 ) { av[2] = toInt(ex-(ey-cy)); av[3] = toInt(ey+(ex-cx)); } else { av[2] = toInt(ex+(ey-cy)); av[3] = toInt(ey-(ex-cx)); } if ( qadSendv(a->second_arrow, NAME_points, 4, av) ) { assign(a->second_arrow, displayed, ON); ComputeGraphical(a->second_arrow); RedrawArea(a->second_arrow, area); } } return RedrawAreaGraphical(a, area); }