home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / Painting / XiPaint3.2-Aminet11.lzx / XiPaint / Developer / OutputLib / libraries / xigfx.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-09  |  31.2 KB  |  653 lines

  1. /* Last Change: Herbert /  9. September 1995  11:28:50 */
  2.  
  3. /* libraries/xigfx.h
  4.    Includefile fuer die xigfx.library und deren Anwendung
  5. */
  6.  
  7. /* Defines für XG_SetRegister(entry, data) */
  8. #define IVERSION  0     /* Entry  (Returnvalue) */
  9. #define IREVISION 1     /* Entry  (Returnvalue) */
  10. #define XDPI      2     /* Entry */
  11. #define YDPI      3     /* Entry */
  12. #define XOUT      4     /* Adresse der Xout-Library für AA-Version der Xigfx */
  13. #define XIWIN     5     /* Adresse der Xiwin-Library für AA-Version der Xigfx */
  14.  
  15. /****  Basis-Strukturen  ****/
  16.  
  17. //+ "struct Clip {"
  18.  
  19. struct Clip {
  20.         struct Clip *PrevClip;
  21.         struct Clip *NextClip;
  22.         struct Box *ClippingBox;
  23.         SHORT X1, X2;
  24.         SHORT Y1, Y2;
  25.       };
  26. //-
  27.  
  28. //+ "union color{"
  29.  
  30. union color{
  31.         LONG c24;
  32.         UBYTE c8[4];
  33.         };
  34. //-
  35.  
  36. //+ "typedef RGBA                /* Braucht das jemand? */"
  37.  
  38. typedef                 /* Braucht das jemand? */
  39. struct
  40. {
  41.   UBYTE r;      
  42.   UBYTE g;      
  43.   UBYTE b;      
  44.   UBYTE a;      
  45. }
  46. RGBA;
  47. //-
  48.  
  49.  
  50. /******************************* Defines für DrawBoxBorder **************/
  51. /*********** mode kann folgende Werte annehmen: *************************/
  52. #define FULLBORDER 0
  53. #define V_BAR      1
  54. #define H_BAR      2
  55. #define TITLEBAR   3
  56. #define QTITLEBAR  4
  57.  
  58. /* XiAct übersiedelt nach Xpaint.h */
  59.  
  60.  
  61. /****  Defines für Arten von Strukturen (Kind-Feld)  ****/
  62.  
  63. //+ "STR-Defines"
  64. #define  STR_DISPLAY       0x58495001
  65. #define  STR_BOX           0x58495002
  66. #define  STR_BUTTON        0x58495003
  67. #define  STR_NEWBUTTON     0x58495004
  68. #define  STR_MENU          0x58495005
  69. #define  STR_ITEM          0x58495006
  70. #define  STR_SUBITEM       0x58495007
  71. #define  STR_DROPAREA      0x58495008
  72.  
  73. #define  STR_CYCLE         0x58495009
  74. #define  STR_LISTVIEW      0x5849500A
  75. #define  STR_CHARLIST      0x5849500B
  76. #define  STR_MOUSEINFO     0x5849500C
  77. //-
  78.  
  79.  
  80.  
  81. /****  Display-Struktur  ****/
  82.  
  83. //+ "struct Display {"
  84.  
  85. struct Display {
  86.         LONG Kind;                              /* Kennung = STR_DISPLAY */
  87.         struct Display *NextDisplay;            /* Listen-Links */
  88.         struct Display *PrevDisplay;                    /* Privat !! */
  89.  
  90.     /**  allgemeine Daten  **/
  91.         short Width, Height;                    /* Größe des Displays */
  92.         short BytesPerRow;                      /* Breite einer Zeile in Bytes */
  93.         short Depth;                            /* Anzahl Bytes/Pixel */
  94.         short MouseX, MouseY;                   /* aktuelle Mauskoordinaten */
  95.  
  96.     /**  Hardwarespezifische Pointer  **/
  97.         struct RetinaScreen *RetScreen;         /* Zeiger auf Screen der Retina-Version */
  98.         struct Window *InputWindow;             /* Zeiger auf Amiga-Eingabe-Fenster */
  99.  
  100.     /**  Dummy-Box in Display-Struktur für Menüs, etc.  **/
  101.         struct Box *BackBox;                    /* Zeiger auf Dummy-Box-Struktur */
  102.  
  103.     /**  Speicher zum Zeichnen (Hintergrund-Display)  **/
  104.         union color *PaintMem;                  /* Zeiger auf Zeichenspeicher des Displays */
  105.         union color *BackMem;                   /* Zeiger auf Hintergrundspeicher des Displays */
  106.         ULONG PaintMemSize;                     /* Größe dieses Speichers */
  107.         BOOL PaintMemOn;                        /* Display hat Zeichenspeicher, wenn = TRUE */
  108.  
  109.     /**  Fensterverwaltung  **/
  110.         struct Box *FirstBox;                   /* erste Box */
  111.         struct Box *LastBox;                    /* letzte Box */
  112.         struct Box *ActiveBox;                  /* gerade aktive Box */
  113.         struct Box *LastActive;                 /* vorherige aktive Box */
  114.         struct Box *MouseBox;                   /* Box, über der gerade die Maus steht */
  115.         struct Clip *FirstScrClip;              /* von Fenstern und sonstigem verdeckte Bereiche des Screens */
  116.         struct Clip *LastScrClip;
  117.  
  118.     /**  Zeichenverwaltung des Displays  **/
  119.         struct Box *ActivePaint;                /* Box, in der die letzte Zeichenoperation war */
  120.  
  121.     /**  Subprozesse für Maus- und Fenster-Handling  **/
  122.         struct Thread *MouseThread;             /* Zeiger auf Maus-Thread (Prozess) */
  123.         struct Thread *EventThread;             /* Zeiger auf WinHandle-Thread (Prozess) */
  124.         struct MsgPort *RawPort;                /* Port für Basis-Input-Events */
  125.         struct MsgPort *EventPort;              /* Port für Input-Events aus WinHandle-Prozess */
  126.         struct MsgPort *RawTickPort;            /* Ports für Timer-Ticker */
  127.         struct MsgPort *EventTickPort;
  128.  
  129.     /**  Maushandling  **/
  130.         short RMouseX, RMouseY;                 /* von der Maus abgedeckte Fläche */
  131.         short RMouseWidth, RMouseHeight;
  132.         long PointerType;                       /* Typen der Default-Fenster-Maus */
  133.         long PaintType;                         /* Typen der Zeichen-Maus */
  134.         long MouseType;                         /* aktuelle Maus-Typen */
  135.         BOOL MouseAllowed;                      /* Maus darf nur gezeichnet werden, wenn = TRUE */
  136.         BOOL KeepMouse;                         /* aktuelle Maus ändert sich nicht, wenn = TRUE */
  137.         BOOL Busy;                              /* nur mehr Meldungen von System-Buttons werden durchgeschleift (Busy-Zustand) */
  138.         BOOL LockEvLoop;                        /* Keine Gadget- und Menü-Behandlung durchführen, wenn = TRUE */
  139.         struct MouseInfo *MouseInfo;            /* Zeiger auf aktuelle Daten der Maus */
  140.         struct MouseInfo *NewMouse;             /* Zeiger auf gewünschte Größe der Maus */
  141.         short MouseFixX1, MouseFixY1;           /* Fix-Punkte eines Rubberbands, spezifisch für dieses Display (nur Paint-Mouse) */
  142.         short MouseFixX2, MouseFixY2;
  143.         short MouseFixX3, MouseFixY3;
  144.         short MouseFixX4, MouseFixY4;
  145.  
  146.     /**  Daten des gerade aktiven Stringeingabe-Buttons  **/
  147.         struct Button *ActString;               /* Zeiger auf offenen String-Button oder NULL */
  148.         struct Box *ActStringBox;               /* Zeiger auf dessen Box oder NULL */
  149.  
  150.     /**  Daten für Grid  **/
  151.         BOOL GridOn;                            /* Grid für Zeichenfenster ist eingeschaltet */
  152.         short GridX, GridY;                     /* Offset des Rasters von der linken oberen Ecke */
  153.         short GridWidth, GridHeight;            /* Breite und Höhe des Rasters */
  154.  
  155.     /**  Daten für den Standard-Mauszeiger (R_PFEIL)  **/
  156.         short PointerWidth, PointerHeight;      /* Größe des Mauszeigers */
  157.         short PointerOffX, PointerOffY;         /* Hot-Spot-Offset für Mauszeiger */
  158.         union color *PointerMem;                /* Zeiger auf Speicher für Mauspfeil */
  159.  
  160.     /**  Daten für den Busy-Mauszeiger (R_BUSY)  **/
  161.         short BusyWidth, BusyHeight;            /* Größe des Busyzeigers */
  162.         short BusyOffX, BusyOffY;               /* Hot-Spot-Offset für Busyzeiger */
  163.         union color *BusyMem;                   /* Zeiger auf Speicher für Busy-Symbol */
  164.  
  165.     /**  Pool für Visible Clips  **/
  166.         UBYTE *VisClips;                        /* Zeiger auf großen Speicher für VisClips für Update */
  167.         ULONG VisClipSize;                      /* Größe dieses Speichers */
  168.  
  169.     /**  Hooks zum Beseitigen etwaiger fremder Einflüsse auf den Hardware-Screen  **/
  170.         __far void (* __asm DisownScreen)(register __a0 struct Display *);      /* wird aufgerufen, wenn der Hardware-Screen freigegeben werden muß */
  171.         __far void (* __asm OwnScreen)(register __a0 struct Display *);         /* der Screen ist für die Anwendung wieder frei */
  172.       };
  173. //-
  174.  
  175.  
  176.  
  177. /****  Strukturen für die Boxen und die Buttons ****/
  178.  
  179. #define NORMAL 1                                /* Simplerefresh */
  180. #define SUPER  2                                /* SuperBoxMap */
  181. #define NOBORDER   4                            /* keine Border darstellen */
  182. #define BACKBOX    8                            /* Box im Hintergrund */
  183.                                                         /* Abfrage: if ( Box->Type & SUPER )  -> Box ist SUPER */
  184.                                                         /*      if ( Box->Type == (Box->Type | (SUPER|NOBORDER)) ) */
  185.  
  186.  
  187. //+ "struct Cycle {"
  188.  
  189. struct Cycle {
  190.         LONG Kind;                              /* Kennung = STR_CYCLE */
  191.         struct Cycle *PrevCycle;                /* zeigt auf vorherigen Cycleeintrag */
  192.         struct Cycle *NextCycle;                /* zeigt auf nächsten Cycleeintrag */
  193.         char ButtonText[256];                   /* Text für Normaldarstellung */
  194.         short Symbol;                           /* Symbol für Normaldarstellung */
  195.       };
  196. //-
  197.  
  198.  
  199. //+ "struct ListView {"
  200.  
  201. struct ListView {
  202.         LONG Kind;                              /* Kennung = STR_LISTVIEW */
  203.         struct ListView *NextLV;                /* zeigt auf vorherigen Listeintrag */
  204.         struct ListView *PrevLV;                /* zeigt auf nächsten Listeintrag */
  205.         char ListText[256];                     /* Text für Listeneintrag */
  206.         UBYTE Color;                            /* Farbregister des Textes */
  207.         UBYTE Pri;                              /* Priorität des Eintrags, für Sortieren */
  208.         struct Node AA_LVNode;                  /* zugehöriger AA-Listen-Node */
  209.       };
  210. //-
  211.  
  212.  
  213. //+ "struct CharList {"
  214.  
  215. struct CharList {
  216.         LONG Kind;                              /* Kennung = STR_CHARLIST */
  217.         struct CharList *PrevChar;              /* zeigt auf vorherigen Listeintrag */
  218.         struct CharList *NextChar;              /* zeigt auf nächsten Listeintrag */
  219.         short Width;                            /* Breite des Zeichens */
  220.         UBYTE Letter;                           /* Zeichen */
  221.       };
  222. //-
  223.  
  224.  
  225. //+ "struct DropArea {"
  226.  
  227. struct DropArea {
  228.         LONG Kind;                              /* Kennung = STR_DROPAREA */
  229.         struct DropArea *PrevDrop;              /* zeigt auf vorherigen Listeneintrag */
  230.         struct DropArea *NextDrop;              /* zeigt auf nächsten Listeneintrag */
  231.         LONG AreaID;                            /* Kennung der Area */
  232.         SHORT X1, Y1;                           /* Koordinaten des Area-Feldes (relativ zur Box) */
  233.         SHORT X2, Y2;
  234.       };
  235. //-
  236.  
  237.  
  238. //+ "struct NewButton {"
  239.  
  240. struct NewButton {
  241.         LONG Kind;                              /* Kennung = STR_NEWBUTTON */
  242.         SHORT X, Y;                             /* Felder für alle Buttons, Bedeutung siehe struct Button */
  243.         SHORT Width, Height;
  244.         LONG ButtonID;
  245.         UBYTE ShortKey;
  246.         USHORT ShortQual;
  247.  
  248.         char *Text;                             /* spez. Felder für normalen Button */
  249.         char *TextHi;
  250.  
  251.         SHORT Symbol;                           /* spez. Felder für Image-Button */
  252.         SHORT SymbolHi;
  253.         SHORT SymSize;
  254.  
  255.         char *InitText;                         /* spez. Felder für String-Button */
  256.         SHORT MaxChar;
  257.  
  258.         LONG InitValue;                         /* spez. Felder für Numeric- u. DNumeric-Button */
  259.         double DInitValue;
  260.         LONG MinValue, MaxValue;
  261.         double DMinValue, DMaxValue;
  262.         SHORT MaxDigit;
  263.  
  264.         LONG ScrollValue;                       /* spez. Felder für Scroll-Button */
  265.         LONG MinScroll, MaxScroll;
  266.         double ScrollSteps;
  267.         LONG ScrollPage;
  268.         __far void (* __asm UpdateFunc)(register __a0 struct Box *, register __a1 struct Button *);
  269.  
  270.         char **CycleTextList;                   /* spez. Felder für Cycle-Button */
  271.         SHORT Count;
  272.         void *UserData;                         /* Pointer zur Verfügung für User */
  273.       };
  274. //-
  275.  
  276.  
  277. //+ "struct Button {"
  278.  
  279. struct Button {
  280.         LONG Kind;                              /* Kennung = STR_BUTTON */
  281.         struct Button *PrevButton;              /* Listen-Links */
  282.         struct Button *NextButton;                      /* Privat !!! */
  283.         short X, Y;                             /* Position */
  284.         short Width, Height;                    /* Größe */
  285.         LONG ButtonID;                          /* ID-Nummer für Check */
  286.         unsigned short ButtonMode;              /* Mode des Buttons */
  287.         unsigned short ButtonTextMode;          /* Mode für Textdarstellung (Text, HiText od. Image) */
  288.         unsigned short RMBEnable;               /* if == 1, wird der Button auch von der rechten Maustaste gedrückt */
  289.         char *ButtonText;                       /* Text für Normaldarstellung */
  290.         char *ButtonTextHi;                     /* Text bei gedrücktem Button */
  291.         short Symbol;                           /* Symbol für Normaldarstellung */
  292.         short SymbolHi;                         /* Symbol bei gedrücktem Button */
  293.         short SymSize;                          /* 1 = Normal, 2 = Faktor 2 etc. */
  294.         BOOL ButtonDown;                        /* Button gedrückt = TRUE, sonst FALSE */
  295.         char *TextString;                       /* zum Ausfüllen bei B_STRING und Rückgabe */
  296.         struct Cycle *FirstCycle;               /* Links auf Cyclestruktur für Cyclebutton */
  297.         struct Cycle *LastCycle;
  298.         struct Cycle *ActCycle;                 /* gerade dargestellter Cycle-Text */
  299.         short CyclePos;                         /* Nummer des gerade verwendeten Cycle-Feldes */
  300.         short CycleCount;                       /* Anzahl der Cycle-Felder */
  301.         struct ListView *FirstLV;               /* Links auf Listeneinträge für ListView-Button */
  302.         struct ListView *LastLV;
  303.         struct Button *LVScroll;                /* Links auf Unterbuttons eines ListViews */
  304.         struct Button *LVField;
  305.         struct Button *LVUp;
  306.         struct Button *LVDown;
  307.         struct ListView *TopLV;                 /* erster dargestellter Listeneintrag */
  308.         struct ListView *SelectLV;              /* selektierter Listeneintrag */
  309.         short TopLVPos;                         /* Nummer des ersten dargestellten Listeneintrags */
  310.         short SelectLVPos;                      /* Nummer des selektierten Listeneintrags */
  311.         short EntryHeight;                      /* Höhe eines Eintrages */
  312.         short EntryCount;                       /* Anzahl der dargestellten Einträge */
  313.         LONG MaxChars;                          /* Maximale Länge des Eingabestrings */
  314.         LONG CurrChars;                         /* aktuelle Länge des Eingabestrings */
  315.         struct CharList *FirstChar, *LastChar;  /* Spezialeinträge für String-Buttons (Handle-Links) */
  316.         struct CharList *FirstVisChar, *LastVisChar;
  317.         struct CharList *CursorChar;
  318.         SHORT FirstVisible;                     /* erstes sichtbares Zeichen in längerem String */
  319.         LONG NumValue;                          /* zum Ausfüllen bei B_VALUE und Rückgabe */
  320.         LONG MinValue, MaxValue;                /* Constraints bei Value-Eingabe */
  321.         double DNumValue;                       /* zum Ausfüllen bei B_DVALUE und Rückgabe */
  322.         double DMinValue, DMaxValue;            /* Constraints bei Double-Value-Eingabe */
  323.         LONG MinScroll, MaxScroll;              /* Bereich des Scrollbalkens */
  324.         LONG ScrollVal;                         /* aktueller Wert */
  325.         double ScrollSteps;                     /* Schrittweite des Vals bei Sprung des Scrollers um einen Pixel */
  326.         LONG ScrollPage;                        /* Anzahl der Schritte bei einem Klick in ein leeres Feld */
  327.         short ScrollerWidth;                    /* Breite des Scrollers in Pixeln (intern!) */
  328.         short ScrollerOff;                      /* Offset des Scrollers in Pixeln (intern!) vom linken Buttonrand (<- 2 Pixel breit) */
  329.         __far void (* __asm UpdateFunction)(register __a0 struct Box *, register __a1 struct Button *);
  330.                                                 /* Funktion, die aufgerufen wird, solange der Button gedrückt ist */
  331.         BOOL Rendered;                          /* = TRUE, wenn schon dargestellt */
  332.         UBYTE ShortKey;                         /* ASCII-Wert für Gadget-Shortcut (od. 0 für keinen) */
  333.         USHORT ShortQual;                       /* Qualifier zu ShortKey - im Moment nicht verwendet */
  334.         SHORT ShortPos;                         /* Position des ShortKeys im Gadget-Text (-1 für nicht vorhanden) */
  335.         BOOL Dragable;                          /* wenn = TRUE, kann der Button mit der Maus gezogen werden */
  336.         BOOL Keep;                              /* wenn = TRUE, dann soll Button nicht freigegeben werden */
  337.         void *UserData;                         /* Zeiger auf private Daten des Users */
  338.         short ArrLX, ArrRX;                     /* interner Gebrauch */
  339.         short ArrTY, ArrBY;                             /* Privat !!! - Hitbox */
  340.         short SlArrLX, SlArrRX;                 /* interner Gebrauch */
  341.         short SlArrTY, SlArrBY;                         /* Privat !!! - Hitbox des Sliders bei Scroll-Button */
  342.     /**  spezielle Felder für die Amiga-Versionen  **/
  343.         struct Gadget *AA_FirstGadget;          /* Zeiger auf erstes Gadget der Amiga-(GadTools-)Version */
  344.         struct Gadget *AA_LastGadget;           /* letztes AA-Gadget */
  345.         BOOL AA_Set;                            /* Gadget ist im Fenster gesetzt... */
  346.         SHORT AA_GadCount;                      /* Länge der Gadget-Liste */
  347.         struct List AA_LVList;                  /* Zeiger auf Listenkopf für ListView-Gadget */
  348.         char **AA_CycleList;                    /* Zeiger auf Liste mit Texten für das Cycle-Gadget */
  349.         UWORD *AA_BorderDataA;                  /* Zeiger auf Koordinaten der Gadget-Border bei Bool-Gads... */
  350.         UWORD *AA_BorderDataB;
  351.         struct Border *AA_BorderA;              /* Border-Strukturen für die 3D-Border */
  352.         struct Border *AA_BorderB;
  353.         struct Border *AA_BorderAHi;
  354.         struct Border *AA_BorderBHi;
  355.         struct IntuiText *AA_IntuiText1;        /* Struktur für Gadget-Text */
  356.         struct IntuiText *AA_IntuiText2;        /* Struktur für Gadget-Underscore */
  357.         UBYTE Dummy[20];                        /* für spätere Erweiterungen */
  358.       };
  359. //-
  360.  
  361.  
  362. //+ "struct Box {"
  363.  
  364. struct Box {
  365.         LONG Kind;                              /* Kennung = STR_BOX */
  366.         struct Box *PrevBox;                    /* Listen-Links */
  367.         struct Box *NextBox;                            /* Privat !!! */
  368.         short X, Y;                             /* Position */
  369.         short Width, Height;                    /* Größe */
  370.         short Depth;                            /* 8, 32 */
  371.         short Type;                             /* NORMAL, SUPER, NOBORDER, BACKBOX */
  372.         UBYTE *BoxLayer;                        /* Zeiger auf Speicher mit Inhalt der Box */
  373.         short MinWidth, MinHeight;              /* Grenzen beim Sizen */
  374.         short MaxWidth, MaxHeight;
  375.         short AltX, AltY;                       /* zweite Box-Postiton und -Größe */
  376.         short AltWidth, AltHeight;              
  377.         short BMapX, BMapY;                     /* Offset in der übergroßen Boxmap einer SUPER-Box */
  378.         short BMapWidth, BMapHeight;            /* Größe der übergroßen BoxMap bei SUPER */
  379.         short MouseX, MouseY;                   /* Box-relative Mauskoordinaten */
  380.         short BMapMouseX, BMapMouseY;           /* Maus-Koordineten bezüglich der großen Bitmap einer SUPER-Box */      
  381.         unsigned char *Title;                   /* Titelzeiger: NULL = kein Titel */
  382.         long MouseType;                         /* Typen der Maus für dieses Fenster */
  383.         UBYTE Background;                       /* Farbregister des Box-Hintergrundes bei normaler Box */
  384.         LONG BoxID;                             /* ID-Nummer der Box */
  385.         LONG CloseID, DragID;                   /* Gadget-IDs: 0 = kein Gadget */
  386.         LONG DepthID, SizeID, AltSizeID;
  387.         LONG ScrollXID, ScrollYID;              /* Scrollbars bei SUPER-Box (wird von OpenBox() belegt !!) */
  388.         struct Button *CloseButton;             /* Zeiger auf die Fenster-Gadgets */
  389.         struct Button *DragButton;                      /* Privat !!! */
  390.         struct Button *DepthButton;
  391.         struct Button *SizeButton;
  392.         struct Button *AltSizeButton;
  393.         struct Button *ScrollXButton, *ScrollYButton;
  394.         struct Button *FirstButton;             /* erster Button d. Box (privat) */
  395.         struct Button *LastButton;              /* letzter Button d. Box (privat) */
  396.         struct BMenu *FirstMenu;                /* erstes Menü d. Box (privat) */
  397.         struct BMenu *LastMenu;         /* letztes Menü d. Box (privat) */
  398.         struct DropArea *FirstDrop;             /* Zeiger auf Liste mit den Drop-Clients */
  399.         struct DropArea *LastDrop;
  400.         BOOL BoxActive;                         /* Box aktiv für Input */
  401.         UBYTE *BorderMemT, *BorderMemB;         /* Zeiger auf separaten Rahmen-Speicher einer SUPER-Box */
  402.         UBYTE *BorderMemL, *BorderMemR;
  403.         short BorderWidthT, BorderWidthB;       /* Breite der jeweiligen Rahmens */
  404.         short BorderWidthL, BorderWidthR;
  405.         struct Clip *FirstClip;                 /* Liste der verdeckten Clips (privat) */
  406.         struct Clip *LastClip;
  407.         struct Display *BoxDisplay;             /* Zeiger auf das der Box zugeordnete Display */
  408.         short BoxX1, BoxX2;                     /* Eck-Koordinaten der Box für schnellen Zugriff */
  409.         short BoxY1, BoxY2;
  410.     /**  Hilfsdaten für Maus  **/
  411.         short MouseFixX1, MouseFixY1;           /* Fix-Punkte eines Rubberbands, spezifisch für diese Box */
  412.         short MouseFixX2, MouseFixY2;
  413.         short MouseFixX3, MouseFixY3;
  414.         short MouseFixX4, MouseFixY4;
  415.     /**  Button-Refresh, etc.  **/              
  416.         BOOL NoRefresh;                         /* wenn NoRefresh == TRUE, kein Auto-Refresh beim Resizen */
  417.     /**  Daten für Update-Hook  **/
  418.         short UpdateMode;                       /* wenn != 0, bei SUPER-32-Box Update über Hook mit gew. Mode */
  419.         UBYTE *UpdateMem;                       /* Temporärer Speicher für Hook-Update */
  420.         short UpMemWidth, UpMemHeight;          /* Größe dieses Speichers */
  421.     /**  spezifische Systemdaten  **/
  422.         struct Window *AABoxWindow;             /* Zeiger auf Amiga-Fenster und Menü (nur AA) */
  423.         struct Menu *AABoxMenu;
  424.     /**  User-Daten für XiPaint  **/
  425.         struct XiAct *XiAct;                    /* Zeiger auf Struktur mit zu diesem Fenster gehörigen Zeicheneinstellungen */
  426.         struct Box *BackLink;                   /* Zeiger auf Box, die den Hintergrund bildet (Durchzeichnen) */
  427.         ULONG RedoQueue;                        /* Anzahl der im Undo wiederhergestellten Elemente */
  428.         struct Box *ZoomLink;                   /* Zeiger von Paint- auf Zoomfenster */
  429.         struct Box *PaintLink;                  /* Zeiger von Zoom- auf Paintfenster */
  430.         short ZX1, ZY1, ZX2, ZY2;               /* Eckpunkte des Zoom-Bereichs */
  431.         short ZoomFactor;                       /* Vergrößerungsfaktor */
  432.         BOOL PaintLock;                         /* wenn = TRUE, darf in der Box nicht gezeichnet werden */
  433.         BOOL BackPaint;                         /* wenn = TRUE, ist die Box die Hintergrund-Box */
  434.     /**  Spezielle Daten für AA_SUPER_Boxen  **/
  435.         Object *AA_HorizScroll, *AA_VertScroll; /* Scrollbars */
  436.         Object *AA_LeftGadget, *AA_RightGadget; /* Scrollpfeile */
  437.         Object *AA_UpGadget, *AA_DownGadget;
  438.         LONG AA_HTotal, AA_VTotal;              /* Breite / Höhe der BitMap (wie BMapWidth) */
  439.         LONG AA_HVisible, AA_VVisible;          /* gerade sichtbare Größe */
  440.         BOOL AA_Frozen;                         /* Zeichensperre bei Resize des Fensters */
  441.         BOOL AA_MenuSet;                        /* wenn TRUE: Menü am Amiga-Fenster gesetzt */
  442.         BOOL MenuLend;                          /* wenn TRUE: die verwendeten Menüs sind nicht unsere... */
  443.         SHORT AA_MouseType;                     /* Typ der gesetzten Amiga-Maus */
  444.         UBYTE Dummy[20];                        /* Reserve für später... */
  445.       };
  446. //-
  447.  
  448.  
  449. //+ "Button-Defines"
  450.  
  451. #define BA_BUTTON       0       /* Defines, die von Button-Add-Funktionen gebraucht werden (ButtonMode-Feld) */
  452. #define BA_TOGGLE       1                       /* Defines für AddNormal() und AddImage() */
  453. #define BA_HALF_T       2
  454. #define BA_HALF_B       3
  455. #define BA_BUTTON_DR    4                       /* Buttons sind Drag&Drop-fähig */
  456. #define BA_TOGGLE_DR    5
  457. #define BA_HALF_T_DR    6
  458. #define BA_HALF_B_DR    7
  459.  
  460. #define BA_HIDDEN       8                       /* Defines für den unsichtbaren Button (für AddNormal()) */
  461. #define BA_HIDDEN_DR    9                              /* Drag & Drop - Version */
  462.  
  463. #define BA_HOR          0                       /* Defines für AddScroll() */
  464. #define BA_VER          1
  465. #define BA_HORCOL       2
  466. #define BA_INTEGER      0                       /* Defines für AddNumeric() */
  467. #define BA_DOUBLE       1
  468.  
  469. #define B_BUTTON        1       /* Buttonmode (privat - xigfx, Window) */
  470. #define B_TOGGLE        2
  471. #define B_HALF_T        3
  472. #define B_HALF_B        4
  473. #define B_STRING        5
  474. #define B_VALUE         6
  475. #define B_DVALUE        7
  476. #define B_SCROLLHOR     8
  477. #define B_SCROLLVER     9
  478. #define B_SCROLLHORC    10              /* spezieller Scroller für Farbuntergrund */
  479. #define B_LISTVIEW      11
  480. #define B_CYCLE         12
  481. #define B_CHECK         13
  482. #define B_HIDDEN        14
  483.  
  484. #define S_CLOSE         40      /* Buttonmode (privat - xigfx, Window) */
  485. #define S_DRAG          41
  486. #define S_SIZE          42
  487. #define S_ALTSIZE       43
  488. #define S_DEPTH         44
  489. #define S_SCROLLX       45
  490. #define S_SCROLLY       46
  491.  
  492. #define T_NONE          0       /* TextMode (in allen Funktionen) */
  493. #define T_TEXT          1
  494. #define T_SYMBOL        2
  495. #define T_CYCLE         3
  496.  
  497. #define MB_LEFT         1               /* Defines für Maustasten und -Qualifer */
  498. #define MB_RIGHT        2
  499.  
  500. #define MQ_NONE         0
  501. #define MQ_SHIFT        1
  502. #define MQ_DOUBLE       2
  503.  
  504. #define SCQ_NONE        0               /* Qualifier für Shortcuts - im Moment nicht unterstützt */
  505. #define SCQ_SHIFT       1
  506. #define SCQ_ALT         2
  507. #define SCQ_SHIFTALT    3
  508. #define SCQ_CTRL        4
  509. #define SCQ_AMIGA       5
  510. #define SCQ_COMMAND     6
  511.  
  512. #define SC_NONE         0               /* kein Shortcut gewünscht */
  513. //-
  514.  
  515. //+ "Defines für Funktions-Modes"
  516.  
  517. #define  SLV_POS     1                  /* Mode-Defines für XW_SetListView() */
  518. #define  SLV_HI      2
  519. #define  SLV_HIPOS   3
  520. //-
  521.  
  522.  
  523. /****  Menü-Strukturen  ****/
  524.  
  525. //+ "Menü-Defines"
  526. #define  M_STD        0                 /* Menü- und Item-Modes */
  527. #define  M_DISABLED   1
  528. #define  M_DUMMY      2
  529. #define  M_CHECKMARK  4
  530. #define  M_CHECKED    8
  531. #define  M_HILIGHT   16
  532.  
  533. #define  MID_NONE     0                 /* keine Menü-ID */
  534. //-
  535.  
  536. //+ "struct BMenu {"
  537.  
  538. struct BMenu {
  539.         LONG Kind;                              /* Kennung = STR_MENU */
  540.         struct BMenu *PrevMenu;                 /* Listen-Links */
  541.         struct BMenu *NextMenu;
  542.         short X, Y;                             /* Größe und Ort des Titel-Eintrags */
  543.         short Width, Height;
  544.         short Mode;                             /* Status des Menüs (DISABLED) */
  545.         LONG MenuID;                            /* ID-Nummer des Menüs (muß eindeutig sein) */
  546.         char *MenuTitle;                        /* Titel-Text */
  547.         BOOL MenuDown;                          /* Menü dargestellt */
  548.         BOOL Hilight;                           /* Maus über Menü */
  549.         struct BItem *FirstItem;                /* Liste der Menü-Items */
  550.         struct BItem *LastItem;
  551.         short MX1, MX2;                         /* Hitbox für Maus */
  552.         short MY1, MY2;
  553.         struct Box *RefBox;                     /* zugehörige normale Box */
  554.         struct Box *MenuBarBox;                 /* Box der Titelzeile */
  555.         struct Box *MenuBox;                    /* Box der Menüitems */
  556.         struct Menu *AAMenu;                    /* Zeiger auf Amiga-Menü, privat */
  557.       };
  558. //-
  559.  
  560. //+ "struct BItem {"
  561.  
  562. struct BItem {
  563.         LONG Kind;                              /* Kennung = STR_ITEM */
  564.         struct BItem *PrevItem;                 /* Listen-Links */
  565.         struct BItem *NextItem;
  566.         short X, Y;                             /* Größe und Ort des Titel-Eintrags */
  567.         short Width, Height;
  568.         short Mode;                             /* Status des Items (DUMMY, DISABLED, CHECKMARK, CHECKED) */
  569.         LONG ItemID;                            /* ID-Nummer des Items (muß eindeutig sein) - nicht notw. bei Item mit Submenüs */
  570.         char *ItemText;                         /* Item-Text */
  571.         UBYTE ShortKey;                         /* ASCII-Wert für Item-Shortcut (od. 0 für keinen) */
  572.         USHORT ShortQual;                       /* Qualifier zu ShortKey - im Moment nicht verwendet */
  573.         BOOL ItemDown;                          /* Item dargestellt */
  574.         BOOL Hilight;                           /* Maus über Item */
  575.         struct BSubItem *FirstSub;              /* Liste der Submenü-Items */
  576.         struct BSubItem *LastSub;
  577.         short IX1, IX2;                         /* Hitbox für Maus */
  578.         short IY1, IY2;
  579.         struct BMenu *RefMenu;                  /* zugehöriges Menü */
  580.         struct Box *SubMenuBox;                 /* Box eines etw. Submenüs */
  581.         struct MenuItem *AAItem;                /* Zeiger auf Amiga-MenüItem, privat */
  582.       };
  583. //-
  584.  
  585. //+ "struct BSubItem {"
  586.  
  587. struct BSubItem {
  588.         LONG Kind;                              /* Kennung = STR_SUBITEM */
  589.         struct BSubItem *PrevSub;               /* Listen-Links */
  590.         struct BSubItem *NextSub;
  591.         short X, Y;                             /* Größe und Ort des Titel-Eintrags */
  592.         short Width, Height;
  593.         short Mode;                             /* Status des SubItems (DUMMY, DISABLED, CHECKMARK, CHECKED) */
  594.         LONG SubID;                             /* ID-Nummer des SubItems (muß eindeutig sein) */
  595.         char *SubText;                          /* SubItem-Text */
  596.         UBYTE ShortKey;                         /* ASCII-Wert für Item-Shortcut (od. 0 für keinen) */
  597.         USHORT ShortQual;                       /* Qualifier zu ShortKey - im Moment nicht verwendet */
  598.         BOOL SubDown;                           /* SubItem dargestellt */
  599.         BOOL Hilight;                           /* Maus über SubItem */
  600.         short SX1, SX2;                         /* Hitbox für Maus */
  601.         short SY1, SY2;
  602.         struct BItem *RefItem;                  /* zugehöriges Menü-Item */
  603.         struct MenuItem *AASub;                 /* Zeiger auf Amiga-SubItem, privat */
  604.       };
  605. //-
  606.  
  607.  
  608.  
  609. /****  Struktur für Maus-Info  ****/
  610.  
  611. //+ "struct MouseInfo {"
  612.  
  613. struct MouseInfo {
  614.         LONG Kind;                      /* Kennung = STR_MOUSEINFO */
  615.         long Status;                    /* Ein/aus, welche Art */
  616.         short MouseX, MouseY;           /* Pointer-Koordinaten */
  617.         short BrushX, BrushY;           /* Pinsel/Brush-Koordinaten */
  618.         short BrushWidth, BrushHeight;
  619.         short RubberX1, RubberY1;       /* Rubber-Koordinaten (Rect, etc.) */
  620.         short RubberX2, RubberY2;
  621.         short RubberX3, RubberY3;
  622.         short BoxX, BoxY;               /* Koordinaten für bewegte Rubber-Box */
  623.         short BoxWidth, BoxHeight;
  624.         short BoxOffX, BoxOffY;         /* gew. Offset der Rubber-Box zu Cursor */
  625.         short WaitX, WaitY;             /* Merker für Wait-Pointer */
  626.         BOOL WaitOn;
  627.       };        
  628. //-
  629.  
  630. //+ "Rubber-Defines"
  631. #define  R_CROSS   1
  632. #define  R_PFEIL   2
  633. #define  R_STRICH  4
  634. #define  R_RECT    8
  635. #define  R_RECT2   16
  636. #define  R_BEZIER  32
  637. #define  R_RAUT    64
  638. #define  R_ELLIPS  128
  639. #define  R_LINE    256
  640. #define  R_BRUSH   512
  641. #define  R_PINSEL  1024
  642. #define  R_STAMP   2048
  643. #define  R_BUSY    4096
  644. #define  R_BOX     8192
  645.  
  646.  
  647. #define  AAM_POINTER    1               /* Defines für AA-Maus-Merker */
  648. #define  AAM_BUSY       2
  649. #define  AAM_EMPTY      3
  650. #define  AAM_CROSS      4
  651. //-
  652.  
  653.