home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Programming
/
DOpus4-GPL
/
Config
/
screen_colors.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-01-27
|
10KB
|
381 lines
/*
Directory Opus 4
Original GPL release version 4.12
Copyright 1993-2000 Jonathan Potter
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
All users of Directory Opus 4 (including versions distributed
under the GPL) are entitled to upgrade to the latest version of
Directory Opus version 5 at a reduced price. Please see
http://www.gpsoft.com.au for more information.
The release of Directory Opus 4 under the GPL in NO WAY affects
the existing commercial status of Directory Opus 5.
*/
#include "config.h"
void showcolourvals(pen,prop)
int pen,prop;
{
int a,c;
ULONG b,d,cbuf[3];
SetAPen(rp,pen);
RectFill(rp,
x_off+252,y_off+34,
x_off+287,y_off+45);
if (version2>=OSVER_39) {
GetRGB32(vp->ColorMap,pen,1,cbuf);
for (a=0;a<3;a++) {
scalecol(&cbuf[a]);
lsprintf(palette_buf[a],"%ld",cbuf[a]);
if (prop) FixSliderPot(Window,&palettegads[a],cbuf[a],1<<bpg,1,1);
ShowSlider(Window,&palettegads[a]);
RefreshGList(&palettegads[a+3],Window,NULL,1);
}
}
else {
b=GetRGB4(vp->ColorMap,pen);
for (a=0,c=8;a<3;a++,c-=4) {
d=(b>>c)&0xf;
lsprintf(palette_buf[a],"%ld",d);
if (prop) FixSliderPot(Window,&palettegads[a],d,1<<bpg,1,1);
RefreshStrGad(&palettegads[a+3],Window);
}
}
}
void updatecolourvals(pen,show)
int pen,show;
{
ULONG new[3],old[3];
int a,b,ok=0;
if (show==-1) {
for (a=0;a<3;a++) {
new[a]=atoi(palette_buf[a]);
if (new[a]<0) new[a]=0;
else if (new[a]>=(1<<bpg)) new[a]=(1<<bpg)-1;
if (version2>=OSVER_39) scalecolup(&new[a]);
}
ok=1;
}
else {
if (version2>=OSVER_39) {
GetRGB32(vp->ColorMap,pen,1,old);
for (a=0;a<3;a++) {
scalecol(&old[a]);
if ((new[a]=GetSliderPos(&palettegads[a],1<<bpg,1))!=old[a]) ok=1;
scalecolup(&new[a]);
}
}
else {
for (a=0,b=8;a<3;a++,b-=4)
old[a]=(GetRGB4(vp->ColorMap,pen)>>b)&0xf;
for (a=0;a<3;a++)
if ((new[a]=GetSliderPos(&palettegads[a],1<<bpg,1))!=old[a]) ok=1;
}
}
if (ok) {
if (version2>=OSVER_39) SetRGB32(vp,pen,new[0],new[1],new[2]);
else SetRGB4(vp,pen,new[0],new[1],new[2]);
}
showcolourvals(pen,show);
get_palette(Screen,config->new_palette,1<<screen_depth);
}
void showscreencolours(which,fg,bg,special)
int which;
char **fg,**bg;
int special;
{
int a,x,y,h;
char buf[2];
if (which&COLOURS_3DBOXES) {
do3dbox(x_off+151,y_off+88,203,41);
do3dbox(x_off+394,y_off+88,203,41);
Do3DStringBox(rp,
x_off+153,y_off+143,
163,8,
screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
Do3DStringBox(rp,
x_off+432,y_off+143,
163,8,
screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
solidblock(rp,
coloursgadgets[COLBIT_3DBOXES],
x_off+162,y_off+168,
208,10,1,0,3+special);
if (fg) {
*fg=&config->gadgettopcol; *bg=&config->gadgetbotcol;
}
}
if (which&COLOURS_STATUS) {
solidblock(rp,
coloursgadgets[COLBIT_STATUS],
x_off+151,y_off+68,
446,8,config->statusfg,config->statusbg,3+special);
if (fg) {
*fg=&config->statusfg; *bg=&config->statusbg;
}
}
if (which&COLOURS_SELDISKNAME) {
solidblock(rp,
coloursgadgets[COLBIT_SELDISKNAME],
x_off+151,y_off+78,
221,8,config->disknameselfg,config->disknameselbg,1+special);
if (fg) {
*fg=&config->disknameselfg; *bg=&config->disknameselbg;
}
}
if (which&COLOURS_DISKNAME) {
solidblock(rp,
coloursgadgets[COLBIT_DISKNAME],
x_off+376,y_off+78,
221,8,config->disknamefg,config->disknamebg,1+special);
if (fg) {
*fg=&config->disknamefg; *bg=&config->disknamebg;
}
}
if (!special) {
if (which&COLOURS_SELDIRECTORY) {
solidblock(rp,
coloursgadgets[COLBIT_SELDIRECTORY],
x_off+151,y_off+88,
203,8,config->dirsselfg,config->dirsselbg,0);
if (fg) {
*fg=&config->dirsselfg; *bg=&config->dirsselbg;
}
}
if (which&COLOURS_DIRECTORY) {
solidblock(rp,
coloursgadgets[COLBIT_DIRECTORY],
x_off+151,y_off+96,
203,8,config->dirsfg,config->dirsbg,0);
if (fg) {
*fg=&config->dirsfg; *bg=&config->dirsbg;
}
}
if (which&COLOURS_SELFILE) {
solidblock(rp,
coloursgadgets[COLBIT_SELFILE],
x_off+151,y_off+104,
203,8,config->filesselfg,config->filesselbg,0);
if (fg) {
*fg=&config->filesselfg; *bg=&config->filesselbg;
}
}
if (which&COLOURS_FILE) {
solidblock(rp,
coloursgadgets[COLBIT_FILE],
x_off+151,y_off+112,
203,8,config->filesfg,config->filesbg,0);
solidblock(rp,
NULL,
x_off+151,y_off+120,
203,9,config->filesfg,config->filesbg,0);
solidblock(rp,
NULL,
x_off+394,y_off+88,
203,41,config->filesfg,config->filesbg,0);
if (fg) {
*fg=&config->filesfg; *bg=&config->filesbg;
}
}
}
if (which&COLOURS_SLIDERS) {
do3dbox(x_off+151,y_off+131,167,9);
do3dbox(x_off+430,y_off+131,167,9);
do3dbox(x_off+358,y_off+88,14,23);
do3dbox(x_off+376,y_off+88,14,23);
if (!special) {
SetAPen(rp,screen_pens[config->sliderbgcol].pen);
RectFill(rp,
x_off+151,y_off+131,
x_off+317,y_off+139);
RectFill(rp,
x_off+430,y_off+131,
x_off+596,y_off+139);
RectFill(rp,
x_off+358,y_off+88,
x_off+371,y_off+110);
RectFill(rp,
x_off+376,y_off+88,
x_off+389,y_off+110);
SetAPen(rp,screen_pens[config->slidercol].pen);
RectFill(rp,
x_off+153,y_off+132,
x_off+259,y_off+138);
RectFill(rp,
x_off+432,y_off+132,
x_off+540,y_off+138);
RectFill(rp,
x_off+360,y_off+89,
x_off+369,y_off+102);
RectFill(rp,
x_off+378,y_off+89,
x_off+387,y_off+102);
}
if (fg) {
*fg=&config->slidercol; *bg=&config->sliderbgcol;
}
}
if (which&COLOURS_ARROWS) {
x=x_off+322; y=y_off+131;
h=9;
for (a=0;a<4;a++) {
do3dbox(x,y,14,h);
do3dbox(x+18,y,14,h);
DoArrow(rp,x,y,14,h,
screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,3);
DoArrow(rp,x+18,y,14,h,
screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,2);
if (a==1) {
x=x_off+322;
y+=h+2;
++h;
}
else x+=72;
}
for (a=0;a<2;a++) {
do3dbox(x_off+358,y_off+113+(a*9),14,7);
do3dbox(x_off+376,y_off+113+(a*9),14,7);
if (!special) {
DoArrow(rp,
x_off+358,y_off+113+(a*9),
14,7,
screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,a);
DoArrow(rp,
x_off+376,y_off+113+(a*9),
14,7,
screen_pens[config->arrowfg].pen,screen_pens[config->arrowbg].pen,a);
}
}
if (fg) {
*fg=&config->arrowfg; *bg=&config->arrowbg;
}
}
if (which&COLOURS_TINYGADS) {
buf[1]=0;
buf[0]=cfg_string[STR_COLOURS_TINY_GADS][0];
solidblock(rp,
buf,
x_off+358,y_off+131,
14,9,config->littlegadfg,config->littlegadbg,3+special);
buf[0]=cfg_string[STR_COLOURS_TINY_GADS][1];
solidblock(rp,
buf,
x_off+376,y_off+131,
14,9,config->littlegadfg,config->littlegadbg,3+special);
buf[0]=cfg_string[STR_COLOURS_TINY_GADS][2];
solidblock(rp,
buf,
x_off+358,y_off+142,
14,10,config->littlegadfg,config->littlegadbg,3+special);
buf[0]=cfg_string[STR_COLOURS_TINY_GADS][3];
solidblock(rp,
buf,
x_off+376,y_off+142,
14,10,config->littlegadfg,config->littlegadbg,3+special);
for (a=0;a<6;a++) {
buf[0]=cfg_string[STR_COLOURS_TINY_GADS][4+a];
solidblock(rp,
buf,
x_off+493+(a*18),y_off+154,
14,8,config->littlegadfg,config->littlegadbg,3+special);
}
if (fg) {
*fg=&config->littlegadfg; *bg=&config->littlegadbg;
}
}
if (which&COLOURS_CLOCK) {
solidblock(rp,
coloursgadgets[COLBIT_CLOCK],
x_off+151,y_off+154,
338,8,config->clockfg,config->clockbg,3+special);
if (fg) {
*fg=&config->clockfg; *bg=&config->clockbg;
}
}
if (which&COLOURS_REQUESTER) {
solidblock(rp,
coloursgadgets[COLBIT_REQUESTER],
x_off+378,y_off+168,
208,10,config->requestfg,config->requestbg,3+special);
if (fg) {
*fg=&config->requestfg; *bg=&config->requestbg;
}
}
if (which&COLOURS_STRINGS) {
solidblock(rp,
cfg_string[STR_COLOR_PATHNAME],
x_off+153,y_off+143,
163,8,version2?config->stringfgcol:1,version2?config->stringbgcol:0,0);
if (fg) {
*fg=&config->stringfgcol; *bg=&config->stringbgcol;
}
}
if (which&COLOURS_SELSTRINGS) {
solidblock(rp,
cfg_string[STR_COLOR_SELPATHNAME],
x_off+432,y_off+143,
163,8,version2?config->stringselfgcol:1,version2?config->stringselbgcol:0,0);
if (fg) {
*fg=&config->stringselfgcol; *bg=&config->stringselbgcol;
}
}
SetAPen(rp,screen_pens[1].pen);
SetBPen(rp,screen_pens[0].pen);
}
void solidblock(r,txt,x,y,w,h,fg,bg,bord)
struct RastPort *r;
char *txt;
int x,y,w,h,fg,bg,bord;
{
if (bord&1)
Do3DBox(r,x,y,w,h,screen_pens[config->gadgettopcol].pen,screen_pens[config->gadgetbotcol].pen);
if (!(bord&4)) {
SetAPen(r,screen_pens[bg].pen);
RectFill(r,x,y,x+w-1,y+h-1);
if (txt) {
SetAPen(r,screen_pens[fg].pen);
SetBPen(r,screen_pens[bg].pen);
UScoreText(r,txt,(bord&2)?x+((w-(strlen(txt)*8))/2):x,y+((h-8)/2)+6,-1);
SetBPen(rp,screen_pens[0].pen);
}
}
}
void showcolourscycle(fg,bg,sel)
int fg,bg,sel;
{
SetAPen(rp,screen_pens[1].pen);
DoCycleGadget(&coloursgad,Window,coloursgadgets,sel);
if (sel==COLBIT_3DBOXES) showfuncob(rp,cfg_string[STR_EXAMPLE],1,0,CFG_GADGET,x_off+302,y_off+23);
else showfuncob(rp,cfg_string[STR_EXAMPLE],fg,bg,CFG_GADGET,x_off+302,y_off+23);
}