Blame tests/Auto/lib/Create/geometry/GetGeometry.c

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
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: GetGeometry.c /main/8 1995/07/14 10:58:40 drk $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/***********************************************************************
Packit b099d7
  	@(#)GetGeometry.c	1.8.1.1	Date:1/22/91
Packit b099d7
  	Author: TAT
Packit b099d7
	History:
Packit b099d7
            05/21/90 SJS add to sccs
Packit b099d7
            06/22/90 SJS do not get geometry of widgets that are
Packit b099d7
                         being destroyed. (Send back 0 geo)
Packit b099d7
            07/20/90 PSN Fixed geometry calculation for XmRowColumn parenatage
Packit b099d7
	Calls:
Packit b099d7
Packit b099d7
	Summary:
Packit b099d7
            Returns the specified widget's position and size on the screen.    
Packit b099d7
           
Packit b099d7
            INPUTS:
Packit b099d7
                widget
Packit b099d7
        
Packit b099d7
            OUTPUTS:
Packit b099d7
                x,y           - position of widget relative to root window in
Packit b099d7
                                pixels
Packit b099d7
                width,height  - size of widget in pixels
Packit b099d7
Packit b099d7
            RETURNS:
Packit b099d7
                nothing
Packit b099d7
************************************************************************/
Packit b099d7
Packit b099d7
Packit b099d7
#include <AutoMessages.h>
Packit b099d7
#include "mvslib.h"
Packit b099d7
Packit b099d7
void mvsGetWidgetGeometry(widget,x,y,width,height,border_width)
Packit b099d7
Widget widget;
Packit b099d7
int *x, *y, *width, *height, *border_width;
Packit b099d7
{
Packit b099d7
    Window window;
Packit b099d7
    MvsWidgetInfoRecord *w_info;
Packit b099d7
    int window_x, window_y, tmp_x, tmp_y;
Packit b099d7
    Position g_x,g_y;
Packit b099d7
    Dimension g_h, g_w, g_bw;
Packit b099d7
    unsigned char g_unit_type;
Packit b099d7
    Arg args[8];
Packit b099d7
    int n=0;
Packit b099d7
    int being_destroyed;
Packit b099d7
    Window root_return,child_return;
Packit b099d7
    unsigned int tmp_d;
Packit b099d7
Packit b099d7
    if (widget == NULL) {
Packit b099d7
        AutoMessage(_AutoMessages[WARNMSG61]);
Packit b099d7
        return;
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
        window = XtWindowOfObject(widget);
Packit b099d7
Packit b099d7
    w_info = mvsWidgetToWidgetInfo(widget);
Packit b099d7
    if(w_info == NULL)
Packit b099d7
        being_destroyed = False; /* The widget is just being created and is
Packit b099d7
                                    not in our hierarchy yet */
Packit b099d7
    else
Packit b099d7
        being_destroyed = w_info->being_destroyed;
Packit b099d7
    
Packit b099d7
    if(!being_destroyed && XtIsRealized(widget)) {
Packit b099d7
        if (!XGetGeometry(mvsDisplay,window,&root_return,&tmp_x, &tmp_y,
Packit b099d7
                          (unsigned int *)width, (unsigned int *)height,
Packit b099d7
                          (unsigned int *)border_width,
Packit b099d7
                          (unsigned int *) &tmp_d)) {
Packit b099d7
            AutoError(_AutoMessages[WARNMSG62]);
Packit b099d7
            
Packit b099d7
        }
Packit b099d7
Packit b099d7
        window_x = 0;
Packit b099d7
        window_y = 0;
Packit b099d7
Packit b099d7
        if( !(XtIsWidget(widget)) ) {  /* Is this a Gadget? */
Packit b099d7
            XtSetArg(args[n], XmNheight, &g_h); n++;
Packit b099d7
            XtSetArg(args[n], XmNwidth, &g_w); n++;
Packit b099d7
            XtSetArg(args[n], XmNx, &g_x); n++;
Packit b099d7
            XtSetArg(args[n], XmNy, &g_y); n++;
Packit b099d7
            XtSetArg(args[n], XmNborderWidth, &g_bw); n++;
Packit b099d7
	    XtSetArg(args[n], XmNunitType, &g_unit_type); n++;
Packit b099d7
            XtGetValues(widget, args, n);
Packit b099d7
Packit b099d7
/* Automation Added - get proper value in pixels */
Packit b099d7
Packit b099d7
	    g_h = XmConvertUnits
Packit b099d7
			(widget, XmVERTICAL, g_unit_type, g_h, XmPIXELS);
Packit b099d7
	    g_y = XmConvertUnits
Packit b099d7
			(widget, XmVERTICAL, g_unit_type, g_y, XmPIXELS);
Packit b099d7
	    g_w = XmConvertUnits
Packit b099d7
			(widget, XmHORIZONTAL, g_unit_type, g_w, XmPIXELS);
Packit b099d7
	    g_x = XmConvertUnits
Packit b099d7
			(widget, XmHORIZONTAL, g_unit_type, g_x, XmPIXELS);
Packit b099d7
	    g_bw = XmConvertUnits
Packit b099d7
			(widget, XmHORIZONTAL, g_unit_type, g_bw, XmPIXELS);
Packit b099d7
Packit b099d7
/* End Automation Added */
Packit b099d7
Packit b099d7
            window_x += (int)g_x;
Packit b099d7
            window_y += (int)g_y;
Packit b099d7
Packit b099d7
	    if (!mvsIsParentRowColumn(w_info)) {
Packit b099d7
	    /* This is not added because XmRowColumn adds entryBorder to its
Packit b099d7
	     * children, which is part of widget's window! - weard! */
Packit b099d7
            	window_x += *border_width;
Packit b099d7
            	window_y += *border_width;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
            *width = (int)g_w;
Packit b099d7
            *height = (int)g_h;
Packit b099d7
            *border_width = (int)g_bw;
Packit b099d7
        }
Packit b099d7
Packit b099d7
        if (!XTranslateCoordinates(mvsDisplay,window,
Packit b099d7
                                   DefaultRootWindow(mvsDisplay),
Packit b099d7
                                   window_x,window_y,x,y,&child_return)) {
Packit b099d7
            AutoMessage(_AutoMessages[WARNMSG63]);
Packit b099d7
            exit(-1);
Packit b099d7
        }
Packit b099d7
    }
Packit b099d7
    else {
Packit b099d7
        *x = *y = *width = *height = *border_width = 0;
Packit b099d7
    } /* End if(!being_destroyed) */
Packit b099d7
Packit b099d7
} /* End mvsGetWidgetGeometry() */