File: [Development] / inventor / libSoXt / src / viewers / SoXtBitmapButton.c++ (download)
Revision 1.3, Sat Oct 14 10:46:09 2000 UTC (17 years ago) by jlim
Branch: MAIN
CVS Tags: release-2_1_5-9, release-2_1_5-8, release-2_1_5-10, HEAD Changes since 1.2: +2 -2
lines
Fixed Bug 22, removed dependence on POSIX_SOURCE and _XOPEN_SOURCE, conform to
ANSI 'for' scoping rules (Bug 7), added proper type casts, replaced bcopy()
with memcpy(), and eliminated warnings about implicit function definitions.
|
/*
*
* Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* Further, this software is distributed without any warranty that it is
* free of the rightful claim of any third person regarding infringement
* or the like. Any license provided herein, whether implied or
* otherwise, applies only to this software file. Patent licenses, if
* any, provided herein do not apply to combinations of this program with
* other software, or any other product whatsoever.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
* Mountain View, CA 94043, or:
*
* http://www.sgi.com
*
* For further information regarding this notice, see:
*
* http://oss.sgi.com/projects/GenInfo/NoticeExplan/
*
*/
/*
* Copyright (C) 1992 Silicon Graphics, Inc.
*
_______________________________________________________________________
______________ S I L I C O N G R A P H I C S I N C . ____________
|
| $Revision: 1.3 $
|
| Classes:
| SoXtBitmapButton
|
| Author(s) : Alain Dumesny
|
|
______________ S I L I C O N G R A P H I C S I N C . ____________
_______________________________________________________________________
*/
#include <inttypes.h>
#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h>
#include "SoXtBitmapButton.h"
#define SCREEN(w) XScreenNumberOfScreen( XtScreen(w) )
////////////////////////////////////////////////////////////////////////
//
// Constructor
//
SoXtBitmapButton::SoXtBitmapButton(Widget parent, SbBool canSelect)
//
////////////////////////////////////////////////////////////////////////
{
selectFlag = FALSE;
selectable = canSelect;
normalPixmap = selectPixmap = 0;
// Create the push button
Arg args[8];
int n = 0;
XtSetArg(args[n], XmNmarginHeight, 0); n++;
XtSetArg(args[n], XmNmarginWidth, 0); n++;
XtSetArg(args[n], XmNshadowThickness, 2); n++;
XtSetArg(args[n], XmNhighlightThickness, 0); n++;
#ifndef __sgi
XtSetArg(args[n], XmNtraversalOn, False); n++;
#endif // !__sgi
widget = XmCreatePushButtonGadget(parent, NULL, args, n);
}
////////////////////////////////////////////////////////////////////////
//
// Destructor
//
SoXtBitmapButton::~SoXtBitmapButton()
//
////////////////////////////////////////////////////////////////////////
{
//??? destroy the widget?
}
////////////////////////////////////////////////////////////////////////
//
// Highlight the pixmap button.
//
// Usage: public
//
void
SoXtBitmapButton::select(SbBool flag)
//
////////////////////////////////////////////////////////////////////////
{
if (selectFlag == flag || ! selectable)
return;
selectFlag = flag;
XtVaSetValues(widget, XmNlabelPixmap,
selectFlag ? selectPixmap : normalPixmap, NULL);
}
////////////////////////////////////////////////////////////////////////
//
// This routine builds the pixmaps (label pixmap and arm pixmap).
//
// Usage: public
//
void
SoXtBitmapButton::setIcon(char *icon, int width, int height)
//
////////////////////////////////////////////////////////////////////////
{
Display *display = XtDisplay(XtParent(widget));
Drawable d = RootWindow(display, SCREEN( XtParent(widget) ));
Pixel fg, bg, hl;
int depth;
XtVaGetValues( XtParent(widget), XtNdepth, &depth, NULL );
// get the color of the push buttons
// ??? the foreground and background color have to be
// ??? taken from the parent widget because we are using
// ??? Gadget push buttons (not Widget push buttons)
Arg args[8];
int n = 0;
XtSetArg(args[n], XmNforeground, &fg); n++;
XtSetArg(args[n], XmNbackground, &bg); n++;
XtSetArg(args[n], XmNtopShadowColor, &hl); n++; //??? highlight color
XtGetValues(XtParent(widget), args, n);
// free the old pixmaps
if (normalPixmap)
XFreePixmap(display, normalPixmap);
if (selectPixmap)
XFreePixmap(display, selectPixmap);
normalPixmap = selectPixmap = 0;
// create the pixmaps from the bitmap data (depth 1).
normalPixmap = XCreatePixmapFromBitmapData(display, d,
icon, width, height, fg, bg, depth);
if (selectable)
selectPixmap = XCreatePixmapFromBitmapData(display, d,
icon, width, height, fg, hl, depth);
// now assign the pixmaps
n = 0;
XtSetArg(args[n], XmNlabelType, XmPIXMAP); n++;
XtSetArg(args[n], XmNlabelPixmap,
selectFlag ? selectPixmap : normalPixmap); n++;
XtSetValues(widget, args, n);
}
#undef SCREEN