LayoutP.h
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * $XConsortium: LayoutP.h,v 1.2 92/01/22 18:03:08 keith Exp $
  3.  *
  4.  * Copyright 1991 Massachusetts Institute of Technology
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and its
  7.  * documentation for any purpose is hereby granted without fee, provided that
  8.  * the above copyright notice appear in all copies and that both that
  9.  * copyright notice and this permission notice appear in supporting
  10.  * documentation, and that the name of M.I.T. not be used in advertising or
  11.  * publicity pertaining to distribution of the software without specific,
  12.  * written prior permission.  M.I.T. makes no representations about the
  13.  * suitability of this software for any purpose.  It is provided "as is"
  14.  * without express or implied warranty.
  15.  *
  16.  * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  17.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
  18.  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  19.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  20.  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
  21.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  22.  *
  23.  * Author:  Keith Packard, MIT X Consortium
  24.  */
  25. #ifndef _XawLayoutP_h
  26. #define _XawLayoutP_h
  27. #if defined(LAYOUT)
  28. # include "Layout.h"
  29. #else
  30. # include <X11/Xaw3d/Layout.h>
  31. #endif
  32. #include <X11/ConstrainP.h>
  33. #ifdef MOTIF
  34. # include "Xm/ManagerP.h"
  35. #endif
  36. #define GlueEqual(a,b) ((a).order == (b).order && (a).value == (b).value)
  37. #define AddGlue(r,a,b) if (a.order == b.order) { 
  38.     r.order = a.order; 
  39.     r.value = a.value + b.value; 
  40. } else { 
  41.     if (a.order > b.order) 
  42. r = a; 
  43.     else 
  44. r = b; 
  45. }
  46. #define MinGlue(r,a,b) if (a.order == b.order) { 
  47.     r.order = a.order; 
  48.     if (a.value > b.value) 
  49. r.value = b.value; 
  50.     else 
  51. r.value = a.value; 
  52. } else { 
  53.     if (a.order > b.order) 
  54. r = b; 
  55.     else 
  56. r = a; 
  57. }
  58. #define SubGlue(r,a,b) if (a.order == b.order) { 
  59.     r.order = a.order; 
  60.     r.value = a.value - b.value; 
  61. } else { 
  62.     if (a.order > b.order) 
  63. r = a; 
  64.     else { 
  65. r.order = b.order; 
  66. r.value = -b.value; 
  67.     } 
  68. }
  69. #define ZeroGlue(g) ((g).value = 0, (g).order = 0, (g).expr = 0)
  70. #define IsZeroGlue(g) ((g).value == 0)
  71. #define QuarkToWidget(l,q)  XtNameToWidget((Widget) l, 
  72.    (char *) XrmQuarkToString(q));
  73.    
  74. typedef enum _BoxType { BoxBox, WidgetBox, GlueBox, VariableBox } BoxType;
  75.     
  76. typedef enum _LayoutDirection {
  77.     LayoutHorizontal = 0, LayoutVertical = 1
  78. } LayoutDirection;
  79. typedef enum _Operator {
  80.     Plus, Minus, Times, Divide, Percent
  81. } Operator;
  82. typedef enum _ExprType {
  83.     Constant,
  84.     Binary,
  85.     Unary,
  86.     Width,
  87.     Height,
  88.     Variable
  89. } ExprType;
  90. typedef struct _Expr *ExprPtr;
  91. typedef struct _Expr {
  92.     ExprType type;
  93.     union {
  94. double     constant;
  95. struct {
  96.     Operator op;
  97.     ExprPtr left, right;
  98. } binary;
  99. struct {
  100.     Operator    op;
  101.     ExprPtr down;
  102. } unary;
  103. XrmQuark    width;
  104. XrmQuark    height;
  105. XrmQuark    variable;
  106.     } u;
  107. } ExprRec;
  108. typedef struct _Glue {
  109.     int order;
  110.     double value;
  111.     ExprPtr expr;
  112. } GlueRec, *GluePtr;
  113. typedef struct _BoxParams {
  114.     GlueRec stretch[2];
  115.     GlueRec shrink[2];
  116. } BoxParamsRec, *BoxParamsPtr;
  117. typedef struct _Box *BoxPtr;
  118. typedef BoxPtr LayoutPtr;
  119. typedef struct _Box {
  120.     BoxPtr     nextSibling;
  121.     BoxPtr     parent;
  122.     BoxParamsRec    params;
  123.     int     size[2];
  124.     int     natural[2];
  125.     BoxType     type;
  126.     union {
  127. struct {
  128.     BoxPtr     firstChild;
  129.     LayoutDirection dir;
  130. } box;
  131. struct {
  132.     XrmQuark     quark;
  133.     Widget     widget;
  134. } widget;
  135. struct {
  136.     ExprPtr     expr;
  137. } glue;
  138. struct {
  139.     XrmQuark     quark;
  140.     ExprPtr     expr;
  141. } variable;
  142.     } u;
  143. } LBoxRec; /* this conflicted with Box's BoxRec, besides, it's not used anywhere */
  144. typedef struct _SubInfo {
  145.     int     naturalSize[2];
  146.     int     naturalBw;
  147. } SubInfoRec, *SubInfoPtr;
  148. /* #define New(t) (t *) malloc(sizeof (t)) */
  149. #define New(t)      (t *) XtCalloc(1,sizeof (t))
  150. #define Dispose(p)  XtFree((char *) p)
  151. #define Some(t,n)   (t*) XtMalloc(sizeof(t) * n)
  152. #define More(p,t,n) ((p)? (t *) XtRealloc((char *) p, sizeof(t)*n):Some(t,n)
  153. /*********************************************************************
  154.  *
  155.  * Layout Widget Private Data
  156.  *
  157.  *********************************************************************/
  158. /* New fields for the Layout widget class record */
  159. typedef struct _LayoutClassPart {
  160.     int foo; /* keep compiler happy. */
  161. } LayoutClassPart;
  162. /* Full Class record declaration */
  163. typedef struct _LayoutClassRec {
  164.     CoreClassPart       core_class;
  165.     CompositeClassPart  composite_class;
  166.     ConstraintClassPart constraint_class;
  167. #ifdef MOTIF
  168.     XmManagerClassPart  manager_class;
  169. #endif
  170.     LayoutClassPart     layout_class;
  171. } LayoutClassRec;
  172. extern LayoutClassRec layoutClassRec;
  173. typedef struct _LayoutConstraintsRec {
  174. #ifdef MOTIF
  175.     XmManagerConstraintPart  manager;
  176. #endif
  177.     SubInfoRec layout;
  178. } LayoutConstraintsRec, *LayoutConstraints;
  179. #define SubInfo(w)  (&(((LayoutConstraints) (w)->core.constraints)->layout))
  180. /* New Fields for the Layout widget record */
  181. typedef struct {
  182.     /* resources */
  183.     LayoutPtr layout;
  184.     Boolean debug;
  185. } LayoutPart;
  186. /**************************************************************************
  187.  *
  188.  * Full instance record declaration
  189.  *
  190.  **************************************************************************/
  191. typedef struct _LayoutRec {
  192.     CorePart       core;
  193.     CompositePart  composite;
  194.     ConstraintPart constraint;
  195. #ifdef MOTIF
  196.     XmManagerPart  manager;
  197. #endif    
  198.     LayoutPart     layout;
  199. } LayoutRec;
  200. #endif