#ifndef TRCL_DISPLAYOBJECT_DEFINED
#define TRCL_DISPLAYOBJECT_DEFINED

  #include "object.def"

  struct TROD_DisplayObject
  {
    struct TROD_Object    O;                /* Superclass object data */
    ULONG                 ID;               /* The object's ID */
    ULONG                 MinWidth;         /* The precalculated minimum width */
    ULONG                 MinHeight;        /* The precalculated minimum height */
    ULONG                 Left;             /* The X coordinate of the object */
    ULONG                 Top;              /* The Y coordinate of the object */
    ULONG                 Width;            /* The width of the object */
    ULONG                 Height;           /* The height of the object */
    ULONG                 Flags;            /* See below for flags */
    BOOL                  XResize;          /* Horizontally resizable? */
    BOOL                  YResize;          /* Vertically resizable? */
    STRPTR                QuickHelpString;  /* QuickHelp string */
    WORD                  Shortcut;         /* The object's shortcut */
    ULONG                 BackfillType;     /* The object's backfill type */
    BOOL                  Installed;        /* Does the object have an on-screen representation? */

    ULONG                 PrivData;         /* Private data */
  };

  extern TR_METHOD(DisplayObject,NEW,NewData);
  extern TR_METHOD(DisplayObject,INSTALL,InstallData);
  extern TR_SIMPLEMETHOD(DisplayObject,REMOVE);
  extern TR_METHOD(DisplayObject,SETATTRIBUTE,SetAttributeData);
  extern TR_SIMPLEMETHOD(DisplayObject,GETATTRIBUTE);
  extern TR_METHOD(DisplayObject,HIT,HitData);

  // Flag macros
  #define TR_DO_DISABLED  (DISPLAYOBJECT->Flags&TROB_DISPLAYOBJECT_DISABLED?TRUE:FALSE)
  #define TR_DO_SPACE     (DISPLAYOBJECT->Flags&TROB_DISPLAYOBJECT_SPACE?TRUE:FALSE)

#endif
