home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / tkstep0.3b3 / tkstep0 / tkstep / tkMenu.c.diff < prev    next >
Encoding:
Text File  |  1996-07-08  |  9.8 KB  |  298 lines

  1. --- ../tk4.1/generic/tkMenu.c    Wed Mar 27 14:53:39 1996
  2. +++ tkMenu.c    Mon Jul  8 19:24:12 1996
  3. @@ -14,7 +14,11 @@
  4.   *
  5.   * SCCS: @(#) tkMenu.c 1.102 96/03/26 16:07:08
  6.   */
  7. -
  8. +/*
  9. + * TkSTEP modifications Copyright
  10. + * by Alfredo K. Kojima 
  11. + */ 
  12.  #include "tkPort.h"
  13.  #include "default.h"
  14.  #include "tkInt.h"
  15. @@ -403,8 +407,8 @@
  16.   * Various geometry definitions:
  17.   */
  18.  
  19. -#define CASCADE_ARROW_HEIGHT 10
  20. -#define CASCADE_ARROW_WIDTH 8
  21. +#define CASCADE_ARROW_HEIGHT 8
  22. +#define CASCADE_ARROW_WIDTH 7
  23.  #define DECORATION_BORDER_WIDTH 2
  24.  #define MARGIN_WIDTH 2
  25.  
  26. @@ -1636,7 +1640,7 @@
  27.          maxAccelWidth = width;
  28.      }
  29.      if (mePtr->type == SEPARATOR_ENTRY) {
  30. -        mePtr->height = 8;
  31. +        mePtr->height = 0; /*8;*/
  32.      }
  33.      if (mePtr->type == TEAROFF_ENTRY) {
  34.          mePtr->height = 12;
  35. @@ -1679,6 +1683,7 @@
  36.      if (height <= 0) {
  37.      height = 1;
  38.      }
  39. +    width+=2;
  40.      if ((width != Tk_ReqWidth(menuPtr->tkwin)) ||
  41.          (height != Tk_ReqHeight(menuPtr->tkwin))) {
  42.      Tk_GeometryRequest(menuPtr->tkwin, width, height);
  43. @@ -1724,13 +1729,33 @@
  44.      XFontStruct *fontPtr;
  45.      int index, baseline, strictMotif, leftEdge, y,  height;
  46.      GC gc;
  47. -    XPoint points[3];
  48.  
  49.      menuPtr->flags &= ~REDRAW_PENDING;
  50.      if ((menuPtr->tkwin == NULL) || !Tk_IsMapped(tkwin)) {
  51.      return;
  52.      }
  53.  
  54. +    /* 
  55. +     * Draw Window border before
  56. +     */
  57. +    if (menuPtr->transient) {    
  58. +    Tk_Draw3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin),
  59. +        menuPtr->border, 0, 0, Tk_Width(tkwin), Tk_Height(tkwin),
  60. +        menuPtr->borderWidth, menuPtr->relief);
  61. +    } else {
  62. +    XDrawLine(menuPtr->display, Tk_WindowId(tkwin), 
  63. +            Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_LIGHT_GC),
  64. +            0,0, Tk_Width(tkwin)-1, 0);
  65. +    XDrawLine(menuPtr->display, Tk_WindowId(tkwin), 
  66. +            Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_LIGHT_GC),
  67. +            0, 0, 0, Tk_Height(tkwin));
  68. +    XDrawLine(menuPtr->display, Tk_WindowId(tkwin), 
  69. +            Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_DARK_GC),
  70. +            Tk_Width(tkwin)-1, 0, Tk_Width(tkwin)-1, Tk_Height(tkwin));
  71. +    XDrawLine(menuPtr->display, Tk_WindowId(tkwin),
  72. +              Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_DARK_GC),
  73. +          0, Tk_Height(tkwin), Tk_Width(tkwin)-1, Tk_Height(tkwin));
  74. +    }    
  75.      /*
  76.       * Loop through all of the entries, drawing them one at a time.
  77.       */
  78. @@ -1740,11 +1765,32 @@
  79.          + menuPtr->activeBorderWidth;
  80.      for (index = 0; index < menuPtr->numEntries; index++) {
  81.      mePtr = menuPtr->entries[index];
  82. -    if (!(mePtr->flags & ENTRY_NEEDS_REDISPLAY)) {
  83. +    if (mePtr->type==SEPARATOR_ENTRY) {
  84. +        continue;
  85. +    }    
  86. +    /* 
  87. +     * Draw top and bottom part of entry bevel 
  88. +     */
  89. +    if (index!=0) {
  90. +        XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  91. +        Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border,
  92. +        TK_3D_LIGHT_GC), 0, mePtr->y, Tk_Width(tkwin)-2, mePtr->y);
  93. +    }
  94. +    if (index<menuPtr->numEntries-1) {        
  95. +        XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  96. +              Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border,
  97. +        TK_3D_DARK_GC), 0, mePtr->y+mePtr->height-2, Tk_Width(tkwin)-1,
  98. +        mePtr->y+mePtr->height-2);
  99. +        XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  100. +        Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border,
  101. +        TK_3D_DARK2_GC), 0, mePtr->y+mePtr->height-1,Tk_Width(tkwin),
  102. +        mePtr->y+mePtr->height-1);
  103. +    }
  104. +    
  105. +    if (!(mePtr->flags & ENTRY_NEEDS_REDISPLAY)) {        
  106.          continue;
  107.      }
  108.      mePtr->flags &= ~ENTRY_NEEDS_REDISPLAY;
  109. -
  110.      /*
  111.       * Background.
  112.       */
  113. @@ -1753,25 +1799,22 @@
  114.      if (bgBorder == NULL) {
  115.          bgBorder = menuPtr->border;
  116.      }
  117. -    if (strictMotif) {
  118. -        activeBorder = bgBorder;
  119. -    } else {
  120. -        activeBorder = mePtr->activeBorder;
  121. -        if (activeBorder == NULL) {
  122. -        activeBorder = menuPtr->activeBorder;
  123. -        }
  124. +    activeBorder = mePtr->activeBorder;
  125. +    if (activeBorder == NULL) {
  126. +        activeBorder = menuPtr->activeBorder;
  127.      }
  128. +    
  129.      if (mePtr->state == tkActiveUid) {
  130. -        bgBorder = activeBorder;
  131. -        Tk_Fill3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin),
  132. -            bgBorder, menuPtr->borderWidth, mePtr->y,
  133. -            Tk_Width(tkwin) - 2*menuPtr->borderWidth, mePtr->height,
  134. -            menuPtr->activeBorderWidth, TK_RELIEF_RAISED);
  135. +        XFillRectangle(menuPtr->display, Tk_WindowId(tkwin),
  136. +            Tk_3DBorderGC(tkwin,activeBorder,TK_3D_FLAT_GC), 
  137. +            menuPtr->borderWidth-1, mePtr->y+1,
  138. +            Tk_Width(tkwin)-2*menuPtr->borderWidth+1, mePtr->height-3);
  139. +            
  140.      } else {
  141. -        Tk_Fill3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin),
  142. -            bgBorder, menuPtr->borderWidth, mePtr->y,
  143. -            Tk_Width(tkwin) - 2*menuPtr->borderWidth, mePtr->height,
  144. -            0, TK_RELIEF_FLAT);
  145. +        XFillRectangle(menuPtr->display, Tk_WindowId(tkwin),
  146. +            Tk_3DBorderGC(tkwin,bgBorder,TK_3D_FLAT_GC), 
  147. +            menuPtr->borderWidth-1, mePtr->y+1,
  148. +            Tk_Width(tkwin)-2*menuPtr->borderWidth+1, mePtr->height-3);
  149.      }
  150.  
  151.      /*
  152. @@ -1798,6 +1841,7 @@
  153.          }
  154.      }
  155.  
  156. +    
  157.      /*
  158.       * Draw label or bitmap or image for entry.
  159.       */
  160. @@ -1851,18 +1895,23 @@
  161.       */
  162.  
  163.      if (mePtr->type == CASCADE_ENTRY) {
  164. -        points[0].x = Tk_Width(tkwin) - menuPtr->borderWidth
  165. +        int x,u;
  166. +
  167. +        x = Tk_Width(tkwin) - menuPtr->borderWidth 
  168.              - menuPtr->activeBorderWidth - MARGIN_WIDTH
  169.              - CASCADE_ARROW_WIDTH;
  170. -        points[0].y = mePtr->y + (mePtr->height - CASCADE_ARROW_HEIGHT)/2;
  171. -        points[1].x = points[0].x;
  172. -        points[1].y = points[0].y + CASCADE_ARROW_HEIGHT;
  173. -        points[2].x = points[0].x + CASCADE_ARROW_WIDTH;
  174. -        points[2].y = points[0].y + CASCADE_ARROW_HEIGHT/2;
  175. -        Tk_Fill3DPolygon(menuPtr->tkwin, Tk_WindowId(tkwin), activeBorder,
  176. -            points, 3, DECORATION_BORDER_WIDTH,
  177. -            (menuPtr->postedCascade == mePtr) ? TK_RELIEF_SUNKEN
  178. -            : TK_RELIEF_RAISED);
  179. +        y = mePtr->y + (mePtr->height - CASCADE_ARROW_HEIGHT)/2;
  180. +          XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  181. +            Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border, 
  182. +            TK_3D_DARK2_GC), x, y, x, y+CASCADE_ARROW_HEIGHT);
  183. +        XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  184. +            Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border, 
  185. +            TK_3D_DARK_GC), x, y, x+CASCADE_ARROW_WIDTH, 
  186. +            y+CASCADE_ARROW_HEIGHT/2);
  187. +        XDrawLine(menuPtr->display, Tk_WindowId(menuPtr->tkwin),
  188. +            Tk_3DBorderGC(menuPtr->tkwin, menuPtr->border, 
  189. +            TK_3D_LIGHT_GC), x, y+CASCADE_ARROW_HEIGHT, 
  190. +            x+CASCADE_ARROW_WIDTH, y+CASCADE_ARROW_HEIGHT/2);
  191.      } else if (mePtr->accel != NULL) {
  192.          TkDisplayChars(menuPtr->display, Tk_WindowId(tkwin), gc,
  193.              fontPtr, mePtr->accel, mePtr->accelLength,
  194. @@ -1887,13 +1936,13 @@
  195.          y = mePtr->y + (mePtr->height - dim)/2;
  196.          Tk_Fill3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin),
  197.              menuPtr->border, x, y, dim, dim,
  198. -            DECORATION_BORDER_WIDTH, TK_RELIEF_SUNKEN);
  199. +            DECORATION_BORDER_WIDTH, TK_RELIEF_RAISED);
  200.          x += DECORATION_BORDER_WIDTH;
  201.          y += DECORATION_BORDER_WIDTH;
  202.          dim -= 2*DECORATION_BORDER_WIDTH;
  203.          if ((dim > 0) && (mePtr->flags & ENTRY_SELECTED)) {
  204. -        XFillRectangle(menuPtr->display, Tk_WindowId(tkwin), gc,
  205. -            x, y, (unsigned int) dim, (unsigned int) dim);
  206. +        Tk_DrawCheckMark(menuPtr->display, tkwin, Tk_WindowId(tkwin),
  207. +            x, y-3, menuPtr->border);
  208.          }
  209.      }
  210.  
  211. @@ -1902,47 +1951,29 @@
  212.       */
  213.  
  214.      if ((mePtr->type == RADIO_BUTTON_ENTRY) && mePtr->indicatorOn) {
  215. -        XPoint points[4];
  216.          int radius;
  217. +        int x, y;
  218.  
  219. -        radius = mePtr->indicatorDiameter/2;
  220. -        points[0].x = menuPtr->borderWidth + menuPtr->activeBorderWidth
  221. +        radius = mePtr->indicatorDiameter/2-1;
  222. +        x = menuPtr->borderWidth + menuPtr->activeBorderWidth
  223.              + (menuPtr->indicatorSpace - mePtr->indicatorDiameter)/2;
  224. -        points[0].y = mePtr->y + (mePtr->height)/2;
  225. -        points[1].x = points[0].x + radius;
  226. -        points[1].y = points[0].y + radius;
  227. -        points[2].x = points[1].x + radius;
  228. -        points[2].y = points[0].y;
  229. -        points[3].x = points[1].x;
  230. -        points[3].y = points[0].y - radius;
  231. +        y = mePtr->y + (mePtr->height-mePtr->indicatorDiameter)/2;
  232. +        Tk_Draw3DCircle(menuPtr->display, tkwin, Tk_WindowId(tkwin),
  233. +        x, y, menuPtr->borderWidth, radius, TK_RELIEF_SUNKEN,
  234. +        menuPtr->border);
  235.          if (mePtr->flags & ENTRY_SELECTED) {
  236. -        XFillPolygon(menuPtr->display, Tk_WindowId(tkwin), gc,
  237. -            points, 4, Convex, CoordModeOrigin);
  238. +        gc = Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_LIGHT_GC);
  239. +        XFillArc(menuPtr->display, Tk_WindowId(tkwin), gc, 
  240. +             x+menuPtr->borderWidth, y+menuPtr->borderWidth, 
  241. +             radius*2-menuPtr->borderWidth-1,
  242. +             radius*2-menuPtr->borderWidth-1,0,360*64);
  243.          } else {
  244. -        Tk_Fill3DPolygon(menuPtr->tkwin, Tk_WindowId(tkwin),
  245. -            menuPtr->border, points, 4, DECORATION_BORDER_WIDTH,
  246. -            TK_RELIEF_FLAT);
  247. -        }
  248. -        Tk_Draw3DPolygon(menuPtr->tkwin, Tk_WindowId(tkwin),
  249. -            menuPtr->border, points, 4, DECORATION_BORDER_WIDTH,
  250. -            TK_RELIEF_SUNKEN);
  251. -    }
  252. -
  253. -    /*
  254. -     * Draw separator.
  255. -     */
  256. -
  257. -    if (mePtr->type == SEPARATOR_ENTRY) {
  258. -        XPoint points[2];
  259. -        int margin;
  260. -
  261. -        margin = (fontPtr->ascent + fontPtr->descent)/2;
  262. -        points[0].x = 0;
  263. -        points[0].y = mePtr->y + mePtr->height/2;
  264. -        points[1].x = Tk_Width(tkwin) - 1;
  265. -        points[1].y = points[0].y;
  266. -        Tk_Draw3DPolygon(menuPtr->tkwin, Tk_WindowId(tkwin),
  267. -            menuPtr->border, points, 2, 1, TK_RELIEF_RAISED);
  268. +        gc = Tk_3DBorderGC(tkwin, menuPtr->border, TK_3D_FLAT_GC);
  269. +        XFillArc(menuPtr->display, Tk_WindowId(tkwin), gc, 
  270. +             x+menuPtr->borderWidth, y+menuPtr->borderWidth, 
  271. +             radius*2-menuPtr->borderWidth-1,
  272. +             radius*2-menuPtr->borderWidth-1,0,360*64);
  273. +        }        
  274.      }
  275.  
  276.      /*
  277. @@ -1955,7 +1986,7 @@
  278.  
  279.          margin = (fontPtr->ascent + fontPtr->descent)/2;
  280.          points[0].x = 0;
  281. -        points[0].y = mePtr->y + mePtr->height/2;
  282. +        points[0].y = mePtr->y + mePtr->height/2-1;
  283.          points[1].y = points[0].y;
  284.          width = 6;
  285.          maxX  = Tk_Width(tkwin) - 1;
  286. @@ -2004,9 +2035,7 @@
  287.          height, 0, TK_RELIEF_FLAT);
  288.      }
  289.  
  290. -    Tk_Draw3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin),
  291. -        menuPtr->border, 0, 0, Tk_Width(tkwin), Tk_Height(tkwin),
  292. -        menuPtr->borderWidth, menuPtr->relief);
  293. +
  294.  }
  295.  
  296.  /*
  297.