Author: mlytwyn
Date: Sat Jun 20 22:38:12 2015
New Revision: 38663

URL: http://svn.gna.org/viewcvs/gnustep?rev=38663&view=rev
Log:
Merge Source/NSBox.m

Modified:
    libs/gui/branches/gnustep_testplant_branch/Source/NSBox.m

Modified: libs/gui/branches/gnustep_testplant_branch/Source/NSBox.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/branches/gnustep_testplant_branch/Source/NSBox.m?rev=38663&r1=38662&r2=38663&view=diff
==============================================================================
--- libs/gui/branches/gnustep_testplant_branch/Source/NSBox.m   (original)
+++ libs/gui/branches/gnustep_testplant_branch/Source/NSBox.m   Sat Jun 20 
22:38:12 2015
@@ -3,7 +3,7 @@
    <abstract>Simple box view that can display a border and title
    </abstract>
 
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996-2015 Free Software Foundation, Inc.
 
    Author:  Scott Christley <[email protected]>
    Date: 1996
@@ -452,77 +452,31 @@
 //
 - (void) drawRect: (NSRect)rect
 {
-  NSColor *color;
-
   rect = NSIntersectionRect(_bounds, rect);
+
+  [[GSTheme theme] drawBoxInClipRect: rect
+                             boxType: _box_type
+                          borderType: _border_type
+                              inView: self];
+}
+
+- (BOOL) isOpaque
+{
+#if 1 //TESTPLANT-MAL-MERGE-06202015
+  // FIXME: Depends on theme; if always returning NO is a performance hit
+  // we can check if GSTheme is going to draw an old-style opaque box
+  // or not.
+  return NO;
+#else
   if (_box_type == NSBoxCustom)
     {
-      if (_transparent)
-        {
-          color = [NSColor clearColor];
-        }
-      else
-        {
-          color = _fill_color;
-        }
+      return !_transparent;
     }
   else
     {
-      color = [_window backgroundColor];
-    }
-  // Fill inside
-  [color set];
-  NSRectFill(rect);
-
-  // Draw border
-  switch (_border_type)
-    {
-      case NSNoBorder: 
-       break;
-      case NSLineBorder: 
-        if (_box_type == NSBoxCustom)
-          {
-            [_border_color set];
-            NSFrameRectWithWidth(_border_rect, _border_width);
-          }
-        else
-          {
-            [[NSColor controlDarkShadowColor] set];
-            NSFrameRect(_border_rect);
-          }
-       break;
-      case NSBezelBorder:
-       [[GSTheme theme] drawDarkBezel: _border_rect withClip: rect];
-       break;
-      case NSGrooveBorder: 
-       [[GSTheme theme] drawGroove: _border_rect withClip: rect];
-       break;
-    }
-
-  // Draw title
-  if (_title_position != NSNoTitle)
-    {
-      // If the title is on the border, clip a hole in the later 
-      if ((_border_type != NSNoBorder)
-       && ((_title_position == NSAtTop) || (_title_position == NSAtBottom)))
-        {
-          [color set];
-          NSRectFill(_title_rect);
-        }
-      [_cell drawWithFrame: _title_rect inView: self];
-    }
-}
-
-- (BOOL) isOpaque
-{
-  if (_box_type == NSBoxCustom)
-    {
-      return !_transparent;
-    }
-  else
-    {
       return YES;
     }
+#endif
 }
 
 - (NSColor*) fillColor
@@ -621,6 +575,10 @@
 
           [self setBorderType: borderType];
         }
+      else
+        {
+          _border_type = NSGrooveBorder;
+        }
       if ([aDecoder containsValueForKey: @"NSTitlePosition"])
         {
           NSTitlePosition titlePosition = [aDecoder decodeIntForKey: 
@@ -628,6 +586,10 @@
           
           [self setTitlePosition: titlePosition];
         }
+      else
+        {
+          _title_position = NSAtTop;
+        }
       if ([aDecoder containsValueForKey: @"NSTransparent"])
         {
           // On Apple this is always NO, we keep it for old GNUstep archives
@@ -647,12 +609,27 @@
           
           ASSIGN(_cell, titleCell);
         }
+      else
+        {
+          _cell = [[NSCell alloc] initTextCell: @"Title"];
+          [_cell setAlignment: NSCenterTextAlignment];
+          [_cell setBordered: NO];
+          [_cell setEditable: NO];
+          [self setTitleFont: [NSFont systemFontOfSize:
+                                        [NSFont smallSystemFontSize]]];
+        }
       if ([aDecoder containsValueForKey: @"NSContentView"])
         {
           NSView *contentView = [aDecoder decodeObjectForKey: 
@"NSContentView"];
 
           [self setContentView: contentView];
         }
+      else
+        {
+          NSView *cv = [NSView new];
+          [self setContentView: cv];
+          RELEASE(cv);
+    }
     }
   else
     {
@@ -694,6 +671,29 @@
   GSTheme      *theme = [GSTheme theme];
   NSRect r = NSZeroRect;
 
+  if (_box_type == NSBoxSeparator)
+    {
+      _title_rect = NSZeroRect;
+      _border_rect = _bounds;
+      if (_bounds.size.width > _bounds.size.height)
+       {
+         _border_rect.origin.y = (int)(_border_rect.size.height / 2);
+         _border_rect.size.height = 1;
+       }
+      else
+       {
+         _border_rect.origin.x = (int)(_border_rect.size.width / 2);
+         _border_rect.size.width = 1;
+       }
+      return r;
+    }                          
+
+  // Don't try to compute anything while the title cell hasn't been set.
+  if (_cell == nil)
+    {
+      return r;
+    }
+
   switch (_title_position)
     {
       case NSNoTitle: 
@@ -737,7 +737,7 @@
            - (2 * borderSize.height);
 
          // center the title cell
-         c = (_bounds.size.width - titleSize.width) / 2;
+         c = floor((_bounds.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = _bounds.origin.x + c;
          _title_rect.origin.y = _bounds.origin.y + _border_rect.size.height
@@ -773,7 +773,7 @@
          r.size.height -= titleSize.height + borderSize.height;
 
          // center the title cell
-         c = (_border_rect.size.width - titleSize.width) / 2;
+         c = floor((_border_rect.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = _border_rect.origin.x + c;
          _title_rect.origin.y
@@ -828,7 +828,7 @@
          //    r.size.height -= titleSize.height + borderSize.height;
 
          // center the title cell
-         c = (_border_rect.size.width - titleSize.width) / 2;
+         c = floor((_border_rect.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = _border_rect.origin.x + c;
          _title_rect.origin.y
@@ -885,7 +885,7 @@
          r.size.height -= (titleSize.height / 2) + borderSize.height;
          */
          // center the title cell
-         c = (_border_rect.size.width - titleSize.width) / 2;
+         c = floor((_border_rect.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = c;
          _title_rect.origin.y = 0;
@@ -919,7 +919,7 @@
            - (2 * borderSize.height);
 
          // center the title cell
-         c = (_border_rect.size.width - titleSize.width) / 2;
+         c = floor((_border_rect.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = c;
          _title_rect.origin.y = 0;
@@ -954,7 +954,7 @@
          r.size.height -= titleSize.height + borderSize.height;
 
          // center the title cell
-         c = (_border_rect.size.width - titleSize.width) / 2;
+         c = floor((_border_rect.size.width - titleSize.width) / 2);
          if (c < 0) c = 0;
          _title_rect.origin.x = _border_rect.origin.x + c;
          _title_rect.origin.y = _border_rect.origin.y + borderSize.height;


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to