/*
 *  CREATEBUTTON.C
 */

#include "newlook.h"

extern struct TextFont *OpenFont(struct TextAttr *);
extern void CloseFont(struct TextFont *);
extern LONG IntuiTextLength(struct IntuiText *);

struct Gadget *CreateButton(x,y,w,h, text, id)
SHORT x,y,w,h;
STRPTR text;
USHORT id;
{
  struct Gadget *g= (struct Gadget *)NULL;
  struct Border *b;
  struct IntuiText *it= (struct IntuiText *)NULL;

  ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);

  if(g= (struct Gadget *)SmartAllocate(GADGETSIZE))
  {
    if(b= CreateBorder(0,0,w,h,FALSE))
    {
      if(text && *text)
      {
        if(it= CreateIText(0,0,text))
        {
          struct TextFont *tf;
          SHORT dx,dy;

          if(tf= (struct TextFont *)OpenFont(&Topaz80))
          { dy= (h - tf->tf_Baseline)/2;
            CloseFont(tf);
          }
          else dy= (h-6)/2;  /* `known' topaz80 dimensions */

#ifdef CENTER_UNDERSCORES

          if(it->NextText) /* => there are underscores */
          {
            dy--;
            dx= (w- IntuiTextLength(it->NextText))/2;
          }
          else dx= (w- IntuiTextLength(it))/2;
#else
          dx= (w - IntuiTextLength(LastIText(it)))/2;

#endif /* CENTER_UNDERSCORES */

          MoveIText(it,dx,dy);
        }
        else goto clean_exit;
      }

      g->NextGadget    = (struct Gadget *)NULL;
      g->LeftEdge      = x;
      g->TopEdge       = y;
      g->Width         = w;
      g->Height        = h;
      g->Flags         = GADGHCOMP;
      g->Activation    = GADGIMMEDIATE|RELVERIFY;
      g->GadgetType    = BOOLGADGET;
      g->GadgetRender  = (APTR)b;
      g->SelectRender  = (APTR)NULL;
      g->GadgetText    = it;
      g->MutualExclude = (LONG)0L;
      g->SpecialInfo   = (APTR)NULL;
      g->GadgetID      = id;
      g->UserData      = (APTR)NULL;

      MakePrivateHandlePublic(UserHandle);
      return g;
    }
  }

clean_exit:
  if(UserHandle != PRIVATE_HANDLE)
  { SmartFreeAll(PRIVATE_HANDLE);
    (void)SetNewLookHandle(UserHandle);
  }
  return (struct Gadget *)NULL;
}
