crunch@well.UUCP (John Draper) (12/03/86)
/***************************** Imagdcl.c ************************************
*
* Image editor declarations for the Gadget Editor.
*
* This module by
* Ray R. Larson
*
* This module contains the global definitions for the gadgets and
* menus used by the Image_Ed routines. The main routine Image_Ed
* can be found in Image.c and support routines in Imagfunc.c
*
****************************************************************************/
/* The usual header files */
#include <intuition/intuition.h>
#include <libraries/dosextens.h>
#include <graphics/gfxbase.h>
#include <graphics/gfx.h>
#include <graphics/display.h>
#include <exec/memory.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <devices/narrator.h>
#include <devices/audio.h>
#include <libraries/translator.h>
/*------------------- work rasters and bitmaps -----------*/
struct RastPort smallraster;
struct BitMap smallbitmap;
/*------------------- color table definitions ------------------*/
UWORD defaultCT[32], CTable[32];
struct ColorMap *cmap;
/**************************************************************************
* Definitions and declarations for all them gadgets
***************************************************************************/
/* image editor window dimensions */
#define WINDWIDTH 640
#define WINDHEIGHT 200
/* size of the image editing area */
#define FRAMETOP 11
#define FRAMELEFT 3
#define FRAMEBOT 173
#define FRAMERIGHT 401
#define FRAMEHEIGHT FRAMEBOT-FRAMETOP
#define FRAMEWIDTH FRAMERIGHT-FRAMELEFT
/* size of small image display area */
#define SMALLTOP 50
#define SMALLLEFT 450
#define SMALLBOT 105
#define SMALLRIGHT 610
#define SMALLHEIGHT (SMALLBOT-SMALLTOP)
#define SMALLWIDTH (SMALLRIGHT-SMALLLEFT)
/* gadget numbers */
#define PALETTEG 1
#define MAGMINUSG 2
#define MAGPLUSG 3
#define UPDOWNG 4
#define LEFTRIGHTG 5
#define BIGEDG 6
#define RESETG 7 /* no longer used - put in menu */
#define BLUECTLG 8
#define GREENCTLG 9
#define REDCTLG 10
#define TOOLOFFSET 11
/* menu items - menu declarations follow the gadgets */
#define PROJMEN 0
#define EDITMEN 1
#define OPTMEN 2
#define TOOLMEN 3
#define RETURNM 0
#define CANCELM 1
#define CLREDWIN 0
#define CLREDALL 1
#define RESETIMAG 2
#define RESETCOLOR 3
#define SHOWSMALL 0
#define HIDESMALL 1
#define FREEHTOOL 0
#define LINETOOL 1
#define BOXTOOL 2
#define CIRCLETOOL 3
#define FILLTOOL 4
/* Text for the proportional gadgets */
struct IntuiText red_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"R",NULL};
struct IntuiText green_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"G",NULL};
struct IntuiText blue_label = {2,1,JAM2,-7,2,NULL,(UBYTE *)"B",NULL};
/* text for the button gadgets */
struct IntuiText magplustxt = {2,1,JAM2,9,3,NULL,
(UBYTE *)" + MAGNIFY + ",NULL};
struct IntuiText magmintxt = {2,1,JAM2,9,3,NULL,
(UBYTE *)" - MAGNIFY - ",NULL};
struct IntuiText brushtxt = {1,0,COMPLEMENT,485,138,NULL,
(UBYTE *)"BRUSH COLOR",NULL};
SHORT brushpairs[]=
{ -1,-1, 161,-1, 161,15, -1,15, -1,-1};
struct Border boxborder =
{450,135,1,0,JAM1,5,&brushpairs[0],NULL};
SHORT smallimpairs[]=
{ -1,-1, 162,-1, 162,57, -1,57, -1,-1};
struct Border smallimborder =
{450,50,1,0,JAM1,5,&smallimpairs[0],NULL};
/* Images for the color proportional gadgets - filled in later */
struct Image r_shape, g_shape, b_shape;
/* Proportional info for the color prop gadgets */
struct PropInfo r_prop, g_prop, b_prop;
/* The color prop gadgets themselves */
struct Gadget blue_control =
{ NULL, /* next in the line */
450, 185, /* Left and Top Edges */
160, 11, /* Width, Height */
GADGHCOMP, /* Flags (complement) */
GADGIMMEDIATE |
RELVERIFY, /* activation */
PROPGADGET, /* GadgetType */
(APTR)&b_shape, /* GadgetRender image */
NULL, /* no SelectRender */
&blue_label, /* GadgetText */
NULL, /* no MutualExclude */
(APTR)&b_prop, /* SpecialInfo */
BLUECTLG, /* GadgetID */
NULL, /* No UserData */
};
struct Gadget green_control =
{ &blue_control, /* next in the line */
450, 170, /* Left and Top Edges */
160, 11, /* Width, Height */
GADGHCOMP, /* Flags (complement) */
GADGIMMEDIATE |
RELVERIFY, /* activation */
PROPGADGET, /* GadgetType */
(APTR)&g_shape, /* GadgetRender image */
NULL, /* no SelectRender */
&green_label, /* GadgetText */
NULL, /* no MutualExclude */
(APTR)&g_prop, /* SpecialInfo */
GREENCTLG, /* GadgetID */
NULL, /* No UserData */
};
struct Gadget red_control =
{ &green_control, /* next in the line */
450, 155, /* Left and Top Edges */
160, 11, /* Width, Height */
GADGHCOMP, /* Flags (complement) */
GADGIMMEDIATE |
RELVERIFY, /* activation */
PROPGADGET, /* GadgetType */
(APTR)&r_shape, /* GadgetRender image */
NULL, /* no SelectRender */
&red_label, /* GadgetText */
NULL, /* no MutualExclude */
(APTR)&r_prop, /* SpecialInfo */
REDCTLG, /* GadgetID */
NULL, /* No UserData */
};
struct Image UpDown_Shape;
struct PropInfo UpDownProp ;
struct Gadget UpDownGadg = {
&red_control, 402, 10, 23, 164,
GADGHCOMP,
RELVERIFY | GADGIMMEDIATE,
PROPGADGET,
(APTR)&UpDown_Shape,
NULL ,
NULL,/* intuitext */
0x0,
(APTR)&UpDownProp,
UPDOWNG,
NULL
};
struct Image L_R_Shape;
struct PropInfo L_R_Prop ;
struct Gadget L_R_Gadg = {
&UpDownGadg, 2, 174, 401, 10,
GADGHCOMP,
RELVERIFY | GADGIMMEDIATE,
PROPGADGET,
(APTR)&L_R_Shape,
NULL,
NULL,/* intuitext */
0x0,
(APTR)&L_R_Prop,
LEFTRIGHTG,
NULL
};
SHORT edgadPairs_1[] = {
0, 0,
160, 0,
160, 20,
0, 20,
0, 0
};
struct Border edgadBord_1 = {
-1, -1,
1, 3, JAM2,
5,
(SHORT *)&edgadPairs_1,
NULL
};
struct Gadget paletteGadg = {
&L_R_Gadg, 450, 110, 160, 20,
GADGHNONE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&edgadBord_1,
NULL,
NULL,/* intuitext */
0x0,
NULL,
PALETTEG,
NULL
};
SHORT edgadPairs_2[] = {
0, 0,
126, 0,
126, 14,
0, 14,
0, 0
};
struct Border edgadBord_2 = {
-1, -1,
1, 3, JAM2,
5,
(SHORT *)&edgadPairs_2,
NULL
};
struct Gadget MagniMinus = {
&paletteGadg, 465, 32, 126, 14,
GADGHCOMP,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&edgadBord_2,
NULL,
&magmintxt,/* intuitext */
0,
NULL,
MAGMINUSG,
NULL
};
SHORT edgadPairs_3[] = {
0, 0,
126, 0,
126, 14,
0, 14,
0, 0
};
struct Border edgadBord_3 = {
-1, -1,
1, 3, JAM2,
5,
(SHORT *)&edgadPairs_3,
NULL
};
struct Gadget MagniPlus = {
&MagniMinus, 465, 12, 126, 14,
GADGHCOMP,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&edgadBord_3, NULL,
&magplustxt, /* intuitext */
0,
NULL,
MAGPLUSG,
NULL
};
/* Image structures for tool selection gadgets - defined in imagimag.c */
extern struct Image freehand_image, linetool_image, boxtool_image,
circtool_image, recttool_image;
SHORT toolpairs[]=
{ 0,0, 49, 0, 49,24, 0,24, 0,1,
-1,-1, 50,-1, 50,25, -1,25, -1,0,
-2,-2, 51,-2, 51,26, -2,26, -2,-1};
struct Border toolgadbord =
{0,0,1,0,COMPLEMENT,15,&toolpairs[0],NULL};
struct Gadget freehandGadg = {
&MagniPlus, 450, 53, 50, 25,
GADGHNONE | GADGIMAGE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&freehand_image,
NULL,
NULL,/* intuitext */
0x0000001E,
NULL,
TOOLOFFSET+FREEHTOOL,
NULL
};
struct Gadget linetoolGadg = {
&freehandGadg, 505, 53, 50, 25,
GADGHNONE | GADGIMAGE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&linetool_image,
NULL,
NULL,/* intuitext */
0x0000002E,
NULL,
TOOLOFFSET+LINETOOL,
NULL
};
struct Gadget boxtoolGadg = {
&linetoolGadg, 560, 53, 50, 25,
GADGHNONE | GADGIMAGE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&boxtool_image,
NULL,
NULL,/* intuitext */
0x00000036,
NULL,
TOOLOFFSET+BOXTOOL,
NULL
};
struct Gadget circtoolGadg = {
&boxtoolGadg, 478, 81, 50, 25,
GADGHNONE | GADGIMAGE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&circtool_image,
NULL,
NULL,/* intuitext */
0x0000003A,
NULL,
TOOLOFFSET+CIRCLETOOL,
NULL
};
struct Gadget recttoolGadg = {
&circtoolGadg, 532, 81, 50, 25,
GADGHNONE | GADGIMAGE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&recttool_image,
NULL,
NULL,/* intuitext */
0x0000003C,
NULL,
TOOLOFFSET+FILLTOOL,
NULL
};
SHORT edgadPairs_4[] = {
0, 0,
400, 0,
400, 163,
0, 163,
0, 0
};
struct Border edgadBord_4 = {
-1, -1,
1, 3, JAM2,
5,
(SHORT *)&edgadPairs_4,
NULL
};
struct Gadget Big_Ed_Gadg = {
&recttoolGadg, FRAMELEFT, FRAMETOP, 399, 163,
GADGHNONE,
RELVERIFY | GADGIMMEDIATE,
BOOLGADGET,
(APTR)&edgadBord_4,
NULL,
NULL,
0x0,
0x0,
BIGEDG,
NULL
};
struct NewWindow gwind =
{ 0,0, /* Left and Top edges */
WINDWIDTH, /* Width and Height */
WINDHEIGHT,
0,1, /* DetailPen and BlockPen colors */
/* IDCMPFlags for the window - */
MOUSEMOVE | GADGETUP | GADGETDOWN | MENUPICK | CLOSEWINDOW,
/* Flags for the window */
ACTIVATE | REPORTMOUSE | WINDOWCLOSE,
&Big_Ed_Gadg, /* First gadget in list */
NULL, /* Checkmark - use the default check */
(UBYTE *)"Image Editor Window",/* Title */
NULL, /* Screen - set if this is a custom one. */
NULL, /* No Custom bitmap here either */
0, /* MinWidth, MinHeight, MaxW & MaxH */
0, /* no window sizing so these should be ignored */
640,
200,
WBENCHSCREEN, /* May be tweaked to custom later */
};
/************************************************************************
* Menu Definitions for the Image editor portion of the Gadget Editor.
* Designed by Ray Larson and...
* Created with Menu Creator
* by
* David Pehrson
*
* Copyright (C) 1986 David Pehrson
* Mantis Development
*
* ... Which is a very useful Freeware tool, that nicely complements
* the gadget editor.
*
*********************************************************************/
char stTopaz[] = "topaz.font";
struct TextAttr taPlain =
{
(STRPTR)stTopaz, 8, FS_NORMAL, FPF_ROMFONT
};
struct IntuiText im_ItemText[] =
{
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Return Image", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Cancel Edit", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Clear Edit Area", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Clear Whole Image", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Reset Input Image", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)"Reset Colors", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Show Small Image", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Hide Small Image", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Freehand Draw", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Line Draw", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Box Draw", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Circle Draw", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Filled Box", NULL },
{ 0, 1, JAM1, 0, 1, &taPlain, (UBYTE *)" Flood Fill", NULL },
};
struct MenuItem im_Items[] =
{
{
&im_Items[1], 0, 0, 139, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
HIGHCOMP,
0, (APTR)&im_ItemText[0], NULL, 'R', NULL, NULL
},
{
NULL, 0, 10, 139, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOM
P,
0, (APTR)&im_ItemText[1], NULL, 'Q', NULL, NULL
},
{
&im_Items[3], 0, 0, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
HIGHCOMP,
0, (APTR)&im_ItemText[2], NULL, 'K', NULL, NULL
},
{
&im_Items[4], 0, 10, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
HIGHCOMP,
0, (APTR)&im_ItemText[3], NULL, 'Z', NULL, NULL
},
{
&im_Items[5], 0, 20, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
HIGHCOMP,
0, (APTR)&im_ItemText[4], NULL, 'I', NULL, NULL
},
{
NULL, 0, 30, 179, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | HIGHCOM
P,
0, (APTR)&im_ItemText[5], NULL, 'C', NULL, NULL
},
{
&im_Items[7], 0, 0, 195, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
CHECKIT | HIGHCOMP,
2, (APTR)&im_ItemText[6], NULL, 'S', NULL, NULL
},
{
NULL, 0, 10, 195, 10, ITEMENABLED | ITEMTEXT | COMMSEQ |
CHECKIT | HIGHCOMP | CHECKED,
1, (APTR)&im_ItemText[7], NULL, 'H', NULL, NULL
},
{
&im_Items[9], 0, 0, 171, 10, ITEMENABLED | ITEMTEXT |
COMMSEQ | CHECKIT | HIGHCOMP | CHECKED,
62, (APTR)&im_ItemText[8], NULL, 'F', NULL, NULL
},
{
&im_Items[10], 0, 10, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ
| CHECKIT | HIGHCOMP,
61, (APTR)&im_ItemText[9], NULL, 'L', NULL, NULL
},
{
&im_Items[11], 0, 20, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ
| CHECKIT | HIGHCOMP,
59, (APTR)&im_ItemText[10], NULL, 'B', NULL, NULL
},
{
&im_Items[12], 0, 30, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ
| CHECKIT | HIGHCOMP,
55, (APTR)&im_ItemText[11], NULL, 'O', NULL, NULL
},
{
&im_Items[13], 0, 40, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ
| CHECKIT | HIGHCOMP,
47, (APTR)&im_ItemText[12], NULL, 'P', NULL, NULL
},
{
NULL, 0, 50, 171, 10, ITEMENABLED | ITEMTEXT | COMMSEQ | CHECKI
T | HIGHCOMP,
31, (APTR)&im_ItemText[13], NULL, 'X', NULL, NULL
},
};
struct Menu im_Titles[] =
{
{ &im_Titles[1], 3, 0, 78, 10, MENUENABLED, (BYTE *)" Project", &im_Item
s[0] },
{ &im_Titles[2], 80, 0, 54, 10, MENUENABLED, (BYTE *)" Edit", &im_Items[
2] },
{ &im_Titles[3], 133, 0, 78, 10, MENUENABLED, (BYTE *)" Options", &im_It
ems[6] },
{ NULL, 210, 0, 62, 0, MENUENABLED, (BYTE *)" Tools", &im_Items[8] },
};