X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=de%2Fbrush.c;h=74b47f137e3956747e78361e5f6a03036f5ae679;hb=ae4260bb64817c11f9a7140324cd3e3ba113e297;hp=fbaaa610f6e7f54a6d302b4d386024028df1c40d;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d;p=ion3.git diff --git a/de/brush.c b/de/brush.c index fbaaa61..74b47f1 100644 --- a/de/brush.c +++ b/de/brush.c @@ -3,10 +3,7 @@ * * Copyright (c) Tuomo Valkonen 1999-2007. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -29,6 +26,13 @@ /*{{{ Brush creation and releasing */ +#define MATCHES(S, A) (gr_stylespec_score(&(S), A)>0) +#define MATCHES2(S, A1, A2) (gr_stylespec_score2(&(S), A1, A2)>0) + +#define ENSURE_INITSPEC(S, NM) \ + if((S).attrs==NULL) gr_stylespec_load(&(S), NM); + + static GrStyleSpec tabframe_spec=GR_STYLESPEC_INIT; static GrStyleSpec tabinfo_spec=GR_STYLESPEC_INIT; static GrStyleSpec tabmenuentry_spec=GR_STYLESPEC_INIT; @@ -182,32 +186,49 @@ void debrush_get_border_widths(DEBrush *brush, GrBorderWidths *bdw) { DEStyle *style=brush->d; DEBorder *bd=&(style->border); - uint tmp=0, spc=style->spacing; + uint tmp=0; + uint tbf=1, lrf=1; + uint pad=bd->pad; + uint spc=style->spacing; + switch(bd->sides){ + case DEBORDER_TB: + lrf=0; + break; + case DEBORDER_LR: + tbf=0; + break; + } + + /* Ridge/groove styles use 'padding' for the spacing between the + * 'highlight' and 'shadow' portions of the border, and 'spacing' + * between the border and contents. Inlaid style also uses 'spacing' + * between the contents and the border, and padding as its outer + * component. Elevated style does not use spacing. + */ switch(bd->style){ case DEBORDER_RIDGE: - tmp=spc; case DEBORDER_GROOVE: - tmp+=bd->sh+bd->hl+bd->pad; - bdw->top=tmp; bdw->bottom=tmp; bdw->left=tmp; bdw->right=tmp; + tmp=bd->sh+bd->hl+pad; + bdw->top=tbf*tmp+spc; bdw->bottom=tbf*tmp+spc; + bdw->left=lrf*tmp+spc; bdw->right=lrf*tmp+spc; break; case DEBORDER_INLAID: - tmp=bd->sh+bd->pad+spc; bdw->top=tmp; bdw->left=tmp; - tmp=bd->hl+bd->pad+spc; bdw->bottom=tmp; bdw->right=tmp; + tmp=bd->sh+pad; bdw->top=tbf*tmp+spc; bdw->left=lrf*tmp+spc; + tmp=bd->hl+pad; bdw->bottom=tbf*tmp+spc; bdw->right=lrf*tmp+spc; break; case DEBORDER_ELEVATED: default: - tmp=bd->hl+bd->pad; bdw->top=tmp; bdw->left=tmp; - tmp=bd->sh+bd->pad; bdw->bottom=tmp; bdw->right=tmp; + tmp=bd->hl; bdw->top=tbf*tmp+pad; bdw->left=lrf*tmp+pad; + tmp=bd->sh; bdw->bottom=tbf*tmp+pad; bdw->right=lrf*tmp+pad; break; } + bdw->right+=brush->indicator_w; + bdw->tb_ileft=bdw->left; bdw->tb_iright=bdw->right; bdw->spacing=style->spacing; - - bdw->right+=brush->indicator_w; - bdw->tb_iright+=brush->indicator_w; } @@ -215,7 +236,7 @@ bool debrush_get_extra(DEBrush *brush, const char *key, char type, void *data) { DEStyle *style=brush->d; while(style!=NULL){ - if(extl_table_get(style->data_table, 's', type, key, data)) + if(extl_table_get(style->extras_table, 's', type, key, data)) return TRUE; style=style->based_on; }