static status RedrawAreaTextMargin(TextMargin m, Area a) { int x, y, w, h; Elevation z = getClassVariableValueObject(m, NAME_elevation); Any obg; initialiseDeviceGraphical(m, &x, &y, &w, &h); margin_x = x; margin_y = y; obg = r_background(m->background); r_clear(x, y, w, h); if ( z && notNil(z) ) r_3d_box(x, y, w, h, 0, z, FALSE); else { r_thickness(valInt(m->pen)); r_dash(m->texture); r_box(x, y, w, h, 0, NIL); } scan_fragment_icons(m, paint_fragment, NAME_forSome, NIL); RedrawAreaGraphical(m, a); r_background(obg); succeed; }
static int draw_button_popup_indicator(Button b, int x, int y, int w, int h, int up) { int rm; /* required right margin */ if ( notNil(b->popup_image) ) { int iw = valInt(b->popup_image->size->w); int ih = valInt(b->popup_image->size->h); rm = iw+8; r_image(b->popup_image, 0, 0, x+w-rm, y + (h-ih)/2, iw, ih, ON); } else { Elevation z = getClassVariableValueObject(b, NAME_elevation); if ( b->look == NAME_motif || b->look == NAME_gtk ) { int bw = 12; int bh = 8; rm = bw+8; r_3d_box(x+w-bw-8, y+(h-bh)/2, bw, bh, 0, z, TRUE); } else { int th = 8; int tw = 9; int tx, ty; rm = tw+8; tx = x+w-rm; ty = y + (h-th)/2; r_3d_triangle(tx+tw/2, ty+th, tx, ty, tx+tw, ty, z, up, 0x3); rm = tw; } } return rm; }
Any RedrawBoxFigure(Figure f, Area area) { Any rval = NIL; if ( f->pen != ZERO || notNil(f->background) || notNil(f->elevation) ) { int x, y, w, h; initialiseDeviceGraphical(f, &x, &y, &w, &h); if ( f->pen == ZERO && f->radius == ZERO && isNil(f->elevation) ) { r_fill(x, y, w, h, f->background); rval = f->background; } else { r_thickness(valInt(f->pen)); r_dash(f->texture); if ( notNil(f->elevation) ) { r_3d_box(x, y, w, h, valInt(f->radius), f->elevation, TRUE); rval = f->elevation->background; } else { r_box(x, y, w, h, valInt(f->radius), f->background); rval = f->background; } } } return rval; }
static status RedrawAreaLabel(Label lb, Area a) { int x, y, w, h; Elevation z = lb->elevation; int preview = (lb->status == NAME_preview && notNil(lb->message)); initialiseDeviceGraphical(lb, &x, &y, &w, &h); if ( notNil(z) ) r_3d_box(x, y, w, h, 0, z, !preview); x += valInt(lb->border); y += valInt(lb->border); w -= 2*valInt(lb->border); h -= 2*valInt(lb->border); if ( lb->wrap == NAME_clip ) d_clip(x, y, w, h); if ( instanceOfObject(lb->selection, ClassCharArray) ) { String s = &((CharArray)lb->selection)->data; if ( notNil(z) ) x += valInt(getExFont(lb->font))/2; if ( lb->wrap == NAME_clip ) { LocalString(buf, s->iswide, s->size+1); str_one_line(buf, s); s = buf; } str_label(s, 0, lb->font, x, y, w, h, NAME_left, NAME_top, lb->active == ON ? 0 : LABEL_INACTIVE); } else /*if ( instanceOfObject(lb->selection, ClassImage) )*/ { Image image = (Image) lb->selection; r_image(image, 0, 0, x, y, w, h, ON); } if ( lb->wrap == NAME_clip ) d_clip_done(); if ( preview && isNil(z) ) r_complement(x, y, w, h); return RedrawAreaGraphical(lb, a); }
static status RedrawMenuBarButton(Button b, Area a) { int x, y, w, h; Any ofg = NIL; int flags = 0; initialiseDeviceGraphical(b, &x, &y, &w, &h); NormaliseArea(x, y, w, h); if ( b->status == NAME_preview ) { Elevation e; if ( b->look == NAME_gtkMenuBar && (e = getClassVariableValueObject(b, NAME_previewElevation)) && notNil(e) ) { r_3d_box(x, y, w, h, 0, e, TRUE); } else /* if ( b->look == NAME_winMenuBar ) */ { Any fg = getClassVariableValueObject(b, NAME_selectedForeground); Any bg = getClassVariableValueObject(b, NAME_selectedBackground); if ( !fg ) fg = WHITE_COLOUR; if ( !bg ) bg = BLACK_COLOUR; r_fill(x, y, w, h, bg); ofg = r_colour(fg); } } if ( b->active == OFF ) flags |= LABEL_INACTIVE; RedrawLabelDialogItem(b, accelerator_code(b->accelerator), x, y, w, h, NAME_center, NAME_center, flags); if ( notNil(ofg) ) r_colour(ofg); succeed; }
static status RedrawAreaTextItem(TextItem ti, Area a) { int x, y, w, h; int al, av, am; int lw, lh; int fw = valInt(getExFont(ti->value_text->font)); Elevation z = getClassVariableValueObject(ti, NAME_elevation); int tx, ty, tw, th; TextObj vt = ti->value_text; int flags = 0; initialiseDeviceGraphical(ti, &x, &y, &w, &h); al = valInt(getAscentFont(ti->label_font)); av = valInt(getAscentFont(vt->font)) + valInt(vt->border); am = max(al, av); compute_label_text_item(ti, &lw, &lh); if ( ti->show_label == ON ) { RedrawLabelDialogItem(ti, accelerator_code(ti->accelerator), x, y+am-al, lw-fw, h, ti->label_format, NAME_top, ti->active == ON ? 0 : LABEL_INACTIVE); } tx = x+lw; ty = y+am-av; tw = valInt(vt->area->w); th = valInt(vt->area->h); if ( ti->editable == ON && ti->active == ON ) flags |= TEXTFIELD_EDITABLE; flags |= combo_flags(ti); if ( !ws_entry_field(tx, ty, tw+text_item_combo_width(ti), th, flags) ) { if ( flags & TEXTFIELD_EDITABLE ) { if ( z && notNil(z) ) { int zh = abs(valInt(z->height)); int ly = y+am+zh+valInt(getDescentFont(vt->font)); r_3d_line(x+lw, ly, x+lw+tw, ly, z, TRUE); } else if ( ti->pen != ZERO ) { int pen = valInt(ti->pen); int ly = y+am+1+pen/2; r_dash(ti->texture); r_thickness(valInt(ti->pen)); r_line(x+lw, ly, x+lw+tw, ly); } } if ( flags & (TEXTFIELD_COMBO|TEXTFIELD_COMBO_DOWN) ) { int trh = 8; int trw = 9; int trx, try; int up = (flags & TEXTFIELD_COMBO) ? TRUE : FALSE; trx = tx+tw+5; try = y + (h-trh)/2; r_3d_triangle(trx+trw/2, try+trh, trx, try, trx+trw, try, z, up, 0x3); } if ( flags & TEXTFIELD_STEPPER ) { int sw = STEPPER_BOX_W; int bx = x+w-sw; int bh = (h+1)/2; int iw, ih, ix, dy; Elevation e = getClassVariableValueClass(ClassButton, NAME_elevation); r_3d_box(bx, y, sw, bh, 0, e, !(flags & TEXTFIELD_INCREMENT)); r_3d_box(bx, y+bh, sw, h-bh, 0, e, !(flags & TEXTFIELD_DECREMENT)); iw = valInt(INT_ITEM_IMAGE->size->w)/2; ih = valInt(INT_ITEM_IMAGE->size->h); ix = x + w - (sw+iw+1)/2; dy = (bh-ih+1)/2; r_image(INT_ITEM_IMAGE, 0, 0, ix, y+dy, iw, ih, ON); r_image(INT_ITEM_IMAGE, iw, 0, ix, y+h-dy-ih, iw, ih, ON); } }
static void draw_generic_button_face(Button b, int x, int y, int w, int h, int up, int defb, int focus) { Elevation z = getClassVariableValueObject(b, NAME_elevation); int r = valInt(b->radius); if ( z && notNil(z) ) /* 3-d style */ { int up = (b->status == NAME_inactive || b->status == NAME_active); if ( b->look == NAME_motif || b->look == NAME_gtk || b->look == NAME_win ) { int bx = x, by = y, bw = w, bh = h; if ( b->look == NAME_motif || b->look == NAME_gtk ) { if ( b->show_focus_border == ON ) { PceWindow sw = getWindowGraphical((Graphical)b); Graphical kbfocus = (sw ? sw->keyboard_focus : NIL); if ( focus || kbfocus == (Graphical) b || /* inactive focus */ (defb && !instanceOfObject(kbfocus, ClassButton)) ) { static Elevation e = NULL; if ( !e ) e = newObject(ClassElevation, ONE, EAV); bx -= GTK_BUTTON_MARGIN; by -= GTK_BUTTON_MARGIN; bw += GTK_BUTTON_MARGIN * 2; bh += GTK_BUTTON_MARGIN * 2; r_3d_box(bx, by, bw, bh, r, e, FALSE); } } if ( focus ) { int pen = valInt(b->pen); if ( pen > 0 ) { r_thickness(pen); r_box(x-pen, y-pen, w+2*pen, h+2*pen, r, NIL); } } } else { if ( defb ) { int pen = valInt(b->pen); bx -= pen; by -= pen; bw += 2*pen; bh += 2*pen; r_thickness(pen); r_box(bx, by, bw, bh, r, NIL); } } } r_3d_box(x, y, w, h, r, z, up); if ( b->look == NAME_openLook && defb ) { Any old; old = r_colour(r_elevation_shadow(z)); r_box(x+2, y+2, w-4, h-4, r, NIL); r_colour(old); } } else /* 2-d style */ { int swapc = 0; int pen = valInt(b->pen); int radius = valInt(b->radius); int shadow = valInt(b->shadow); if ( defb && b->look != NAME_openLook ) pen++; r_thickness(pen); r_dash(b->texture); if ( up ) { r_shadow_box(x, y, w, h, radius, shadow, NIL); } else if ( b->status == NAME_preview ) { r_shadow_box(x, y, w, h, radius, shadow, BLACK_IMAGE); swapc = TRUE; } else if ( b->status == NAME_execute ) { r_shadow_box(x, y, w, h, radius, shadow, GREY25_IMAGE); } if ( swapc ) r_swap_background_and_foreground(); if ( defb && b->look == NAME_openLook ) r_box(x+pen, y+pen, w-2*pen-shadow, h-2*pen-shadow, radius, NIL); if ( swapc ) r_swap_background_and_foreground(); } }
static status RedrawAreaSlider(Slider s, Area a) { int x, y, w, h; int ny, vx, vy, lx, ly, sx, sy, hx, hy; int vv; int bw = (s->look == NAME_x ? BAR_WIDTH : OL_BOX_WIDTH); float lv = convert_value(s->low); float hv = convert_value(s->high); float dv = convert_value(s->displayed_value); int lflags = (s->active == ON ? 0 : LABEL_INACTIVE); if ( dv < lv ) dv = lv; else if ( dv > hv ) dv = hv; if ( hv > lv ) vv = rfloat(((float) (valInt(s->width) - bw) * (dv - lv)) / (hv - lv)); else vv = 0; initialiseDeviceGraphical(s, &x, &y, &w, &h); NormaliseArea(x, y, w, h); r_thickness(valInt(s->pen)); r_dash(s->texture); compute_slider(s, &ny, &vx, &vy, &lx, &ly, &sx, &sy, &hx, &hy); r_clear(x, y, w, h); if ( s->show_label == ON ) { int ex = valInt(getExFont(s->label_font)); RedrawLabelDialogItem(s, accelerator_code(s->accelerator), x, y+ny, vx-ex, 0, s->label_format, NAME_top, lflags); } if ( s->look == NAME_motif ) { int by = y+sy+(SLIDER_HEIGHT-OL_BAR_HEIGHT)/2; int ex = x + sx + valInt(s->width); Elevation z = getClassVariableValueObject(s, NAME_elevation); r_3d_box(x+sx, by, vv, OL_BAR_HEIGHT, 0, z, FALSE); r_3d_box(x+sx+vv+bw, by, ex-(x+sx+vv+bw), OL_BAR_HEIGHT, 0, z, FALSE); r_3d_box(x+sx+vv, y+sy, bw, SLIDER_HEIGHT, 0, z, TRUE); } else if ( s->look == NAME_openLook ) { int by = y+sy+(SLIDER_HEIGHT-OL_BAR_HEIGHT)/2; int ly2 = by+OL_BAR_HEIGHT-1; int ex = x + sx + valInt(s->width); r_fill(x+sx, by+1, 1, OL_BAR_HEIGHT-2, BLACK_IMAGE); r_fill(x+sx+1, by, vv-2, OL_BAR_HEIGHT, BLACK_IMAGE); r_line(x+sx+1+vv+bw, by, ex-2, by); r_line(x+sx+1+vv+bw, ly2, ex-2, ly2); r_line(ex-1, by+1, ex-1, ly2-1); r_shadow_box(x+sx+vv, y+sy, bw, SLIDER_HEIGHT, 0, 1, NIL); } else { r_fill(x+sx, y+sy, vv, SLIDER_HEIGHT, GREY50_IMAGE); r_box(x+sx, y+sy, valInt(s->width), SLIDER_HEIGHT, 0, NIL); r_fill(x+sx+vv, y+sy, bw, SLIDER_HEIGHT, BLACK_IMAGE); } if ( s->show_value == ON ) { char buf[100]; string str; buf[0] = '['; format_value(s, &buf[1], s->displayed_value); strcat(buf, "]"); str_set_ascii(&str, buf); str_label(&str, 0, s->value_font, x+vx, y+vy, 0, 0, NAME_left, NAME_top, lflags); format_value(s, buf, s->low); str_set_ascii(&str, buf); str_label(&str, 0, s->value_font, x+lx, y+ly, 0, 0, NAME_left, NAME_top, lflags); format_value(s, buf, s->high); str_set_ascii(&str, buf); str_label(&str, 0, s->value_font, x+hx, y+hy, 0, 0, NAME_left, NAME_top, lflags); } return RedrawAreaGraphical(s, a); }