/*
 *  ADDGBORDER.C
 */

#include "newlook.h"

/****** newlook.lib/AddGBorder ******************************************
*
*   NAME
*	AddGBorder -- Add a (newlook) border to a gadget.
*
*   SYNOPSIS
*	border= AddGBorder( g, b )
*
*	struct Border *AddGBorder( struct Gadget *, struct Border * );
*
*   FUNCTION
*	Link given struct Border *b to the g->GadgetRender list of Borders.
*	If b is == NULL a new border will be created & chained to
*	g->GadgetRender.
*
*   INPUTS
*	g             - the gadget to this function is about to add
*			or create a border.
*	b             - the border (or a list of borders) which will be
*			added to the g->GadgetRender entry or NULL for
*			a newlook border.
*
*   RESULT
*	border - either given struct border *b or (if b was NULL) the
*	allocated newlook border.
*
*   EXAMPLE
*
*   NOTES
*
*   BUGS
*
*   SEE ALSO
*	CreateBorder(), LastBorder()
*
*****************************************************************************
*
*/

struct Border *AddGBorder(g,b)
struct Gadget *g;
struct Border *b;
/* Links b given struct Border *b to the GadgetRender list of Borders.
 * If b is NULL a new border will be created & chained to g->GadgetRender.
 */
{
  /* No Borders for Gadgets w/ Images */
  if(g && (g->Flags & GADGIMAGE)==NULL)
  {
    if(b == (struct Border *)NULL)
    {
      if(g->GadgetType == STRGADGET)
      {
        if(b= CreateBorder(-4,-2,g->Width+8,g->Height+4,TRUE))
        {
          LastBorder(b)->NextBorder=
            CreateBorder(-6,-3,g->Width+12,g->Height+6,FALSE);
        }
      }
      else if(g->GadgetType == BOOLGADGET)
      {
        b= CreateBorder(0,0,g->Width,g->Height,g->Flags==SELECTED|GADGHCOMP);
      }
    }

    if(b)  
    {
      if(g->GadgetRender)
        LastBorder(b)->NextBorder = g->GadgetRender;
      g->GadgetRender= b;
    }
  }

  return b;
}
