Blame lib/Xm/ChColor.c

Packit b099d7
/* $XConsortium: ChColor.c /main/6 1995/10/25 19:55:45 cde-sun $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 * 
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
#include <Xm/ManagerP.h>
Packit b099d7
#include <Xm/PrimitiveP.h>
Packit b099d7
#include <Xm/GadgetP.h>
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 *  XmChangeColor - change set of colors for existing widget, given 
Packit b099d7
 *                  background color
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
void 
Packit b099d7
XmChangeColor(
Packit b099d7
	      Widget w,
Packit b099d7
	      Pixel background )
Packit b099d7
Packit b099d7
{
Packit b099d7
  Widget windowed_ancestor = w;
Packit b099d7
  Pixel foreground_ret;
Packit b099d7
  Pixel topshadow_ret;
Packit b099d7
  Pixel bottomshadow_ret;
Packit b099d7
  Pixel select_ret; 
Packit b099d7
  Pixel use_background = background;
Packit b099d7
  Pixel gadget_background;
Packit b099d7
  Arg args[5];
Packit b099d7
Packit b099d7
  /*
Packit b099d7
   * If the gadget is in BC mode (for colors), it must follow its parent's
Packit b099d7
   * color scheme.  We therefore ignore the background pixel that was
Packit b099d7
   * passed in.
Packit b099d7
   */
Packit b099d7
Packit b099d7
  _XmWidgetToAppContext(w);
Packit b099d7
  _XmAppLock(app);
Packit b099d7
Packit b099d7
  if (XmIsGadget(w))
Packit b099d7
    {
Packit b099d7
      Widget parent = XtParent(w);
Packit b099d7
Packit b099d7
      windowed_ancestor = parent;
Packit b099d7
      XtSetArg(args[0], XmNbackground, &gadget_background);
Packit b099d7
      XtGetValues(w,args,1);
Packit b099d7
      if (gadget_background == parent->core.background_pixel)
Packit b099d7
	use_background = parent->core.background_pixel;
Packit b099d7
    }
Packit b099d7
Packit b099d7
  XmGetColors(windowed_ancestor->core.screen, windowed_ancestor->core.colormap,
Packit b099d7
	      use_background, &foreground_ret, &topshadow_ret,
Packit b099d7
	      &bottomshadow_ret, NULL );
Packit b099d7
Packit b099d7
  if ( (XmIsManager(w)) ||  (XmIsPrimitive(w)) || (XmIsGadget(w)) )
Packit b099d7
    { 
Packit b099d7
      XtSetArg (args[0], XmNbackground, (XtArgVal) use_background);
Packit b099d7
      XtSetArg (args[1], XmNforeground, (XtArgVal) foreground_ret);
Packit b099d7
      XtSetArg (args[2], XmNtopShadowColor, (XtArgVal) topshadow_ret);
Packit b099d7
      XtSetArg (args[3], XmNbottomShadowColor, (XtArgVal) bottomshadow_ret);
Packit b099d7
      XtSetArg (args[4], XmNhighlightColor, (XtArgVal) foreground_ret);
Packit b099d7
      
Packit b099d7
      XtSetValues (w, args, 5);
Packit b099d7
      
Packit b099d7
      if (XmIsPrimitive(w) || XmIsGadget(w))
Packit b099d7
	{
Packit b099d7
	  if ( (XmIsScrollBar(w)) ||
Packit b099d7
	       (XmIsPushButton(w)) || (XmIsPushButtonGadget(w)) ||
Packit b099d7
	       (XmIsToggleButton(w)) || (XmIsToggleButtonGadget(w)) )
Packit b099d7
	    { 
Packit b099d7
	      XmGetColors( windowed_ancestor->core.screen,
Packit b099d7
			   windowed_ancestor->core.colormap,
Packit b099d7
			   background, NULL, NULL, NULL, &select_ret);
Packit b099d7
Packit b099d7
	      if (XmIsToggleButton(w) || XmIsToggleButtonGadget(w))
Packit b099d7
	        {
Packit b099d7
		  XtSetArg (args[0], XmNselectColor, (XtArgVal) select_ret);
Packit b099d7
		  XtSetArg (args[1], XmNunselectColor, (XtArgVal) use_background);
Packit b099d7
	          XtSetValues (w, args, 2);
Packit b099d7
	        }
Packit b099d7
		else
Packit b099d7
		{
Packit b099d7
	          if (XmIsScrollBar(w))
Packit b099d7
		    XtSetArg (args[0], XmNtroughColor, (XtArgVal) select_ret);
Packit b099d7
	          else if (XmIsPushButton(w) || XmIsPushButtonGadget(w))
Packit b099d7
		    XtSetArg (args[0], XmNarmColor, (XtArgVal) select_ret);
Packit b099d7
	          XtSetValues (w, args, 1);
Packit b099d7
	        }
Packit b099d7
	    }
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  _XmAppUnlock(app);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7