Logo Search packages:      
Sourcecode: etoile version File versions  Download package

NSWindow.m

#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>
#include "GSWindowDecorationView.h"
#include "GSDrawFunctions.h"
#include "GraphicToolbox.h"

#define TITLE_HEIGHT 20.0
#define RESIZE_HEIGHT 9.0

static NSDictionary *titleTextAttributes;
static NSColor *titleColor;

@implementation  GSStandardWindowDecorationView (theme)

-(void) updateRects
{
  NSImage* caps= [NSImage imageNamed: @"Window/Window-titlebar-caps.tiff"];
  if (hasTitleBar)
    titleBarRect = NSMakeRect(0.0, _frame.size.height - [caps size].height -1,
                              _frame.size.width, [caps size].height);
  if (hasResizeBar)
  {
    NSImage* resizeCaps = [NSImage imageNamed: @"Window/Window-resizebar-caps.tiff"];
    resizeBarRect = NSMakeRect(0.0, 0.0, _frame.size.width, [resizeCaps size].height);
  }
  else
  {
    NSImage* resizeCaps = [NSImage imageNamed: @"Window/Window-resizebar-caps-unselected.tiff"];
    resizeBarRect = NSMakeRect(0.0, 0.0, _frame.size.width, [resizeCaps size].height);
  }
    //resizeBarRect = NSMakeRect(0.0, 0.0, _frame.size.width, RESIZE_HEIGHT);

  if (hasCloseButton)
    {
      NSImage* imgCloseButton = [NSImage imageNamed: @"Window/Window-titlebar-closebutton.tiff"];
      float imgWidth = [imgCloseButton size].width;
      float imgHeight = [imgCloseButton size].height;
      float border = (titleBarRect.size.height - imgHeight)/2;
      closeButtonRect = NSMakeRect (
        _frame.size.width - imgWidth - border, 
      _frame.size.height - imgHeight - border - 1, 
      imgWidth, imgHeight); 
      [closeButton setFrame: closeButtonRect];
      [closeButton setImage: imgCloseButton];
    }
    [miniaturizeButton setImage: [NSImage imageNamed: @"Window/Window-titlebar-minimizebutton.tiff"]];

  if (hasMiniaturizeButton)
    {
      NSImage* imgMiniaturizeButton = [NSImage imageNamed: 
            @"Window/Window-titlebar-minimizebutton.tiff"];
      float imgWidth = [imgMiniaturizeButton size].width;
      float imgHeight = [imgMiniaturizeButton size].height;
      float border = ([caps size].height - imgHeight)/2;
      miniaturizeButtonRect = NSMakeRect (border,
        _frame.size.height - imgHeight - border - 1, 
      imgWidth, imgHeight); 
      [miniaturizeButton setFrame: miniaturizeButtonRect];
      [miniaturizeButton setImage: imgMiniaturizeButton];
    }
}

- (void) drawRect: (NSRect)rect
{
//    [[NSColor windowBackgroundColor] set];
//    NSRectFill (rect);
//          NSImage* caps= [NSImage imageNamed: @"Window/Window-titlebar-caps.tiff"];
    contentRect.origin.y -= 1;
    contentRect.size.height += 2;
    [THEME drawWindowBackground: contentRect on: self];
  //  titleBarRect.origin.x -= 1;
  if (hasTitleBar && NSIntersectsRect(rect, titleBarRect))
    {
  titleBarRect.size.height += 1;
      NSRectFillUsingOperation (titleBarRect, NSCompositeClear);
  titleBarRect.size.height -= 1;
//  titleBarRect.size.height = [caps size].height;
            NSLog (@"(1) inputState: %d", inputState);
      [self drawTitleBar];
    }

  //if (hasResizeBar && NSIntersectsRect(rect, resizeBarRect))
  //if (NSIntersectsRect(rect, resizeBarRect))
    {
      NSRectFillUsingOperation (resizeBarRect, NSCompositeClear);
      [self drawResizeBar];
    }
      /*
  if (hasResizeBar || hasTitleBar)
    {
      PSsetlinewidth(1.0);
      [[NSColor blackColor] set];
      if (NSMinX(rect) < 1.0)
        {
          PSmoveto(0.5, 0.0);
          PSlineto(0.5, _frame.size.height - titleBarRect.size.height);
          PSstroke();
        }
      if (NSMaxX(rect) > _frame.size.width - 1.0)
        {
          PSmoveto(_frame.size.width - 0.5, 0.0);
          PSlineto(_frame.size.width - 0.5, _frame.size.height - titleBarRect.size.height);
          PSstroke();
        }
      if (NSMaxY(rect) > _frame.size.height - 1.0)
        {
          PSmoveto(0.0, _frame.size.height - 0.5 - titleBarRect.size.height);
          PSlineto(_frame.size.width, _frame.size.height - 0.5 - titleBarRect.size.height);
          PSstroke();
        }
      if (NSMinY(rect) < 1.0)
        {
          PSmoveto(0.0, 0.5);
          PSlineto(_frame.size.width, 0.5);
          PSstroke();
        }
    }
      */
/*
      [super drawRect: rect];
*/
}

-(void) drawTitleBar
{
static const NSRectEdge edges = {NSMinXEdge, NSMaxYEdge,
                            NSMaxXEdge, NSMinYEdge};
  float grays =
    {{NSLightGray, NSLightGray, NSDarkGray, NSDarkGray},
    {NSWhite, NSWhite, NSDarkGray, NSDarkGray},
    {NSLightGray, NSLightGray, NSBlack, NSBlack}};
  NSRect workRect;
NSString *title = [window title];
NSColorList* colorList = [NSColorList colorListNamed: @"System"];

  /*
  Draw the black border towards the rest of the window. (The outer black
  border is drawn in -drawRect: since it might be drawn even if we don't have
  a title bar.
  */
  //[[NSColor blackColor] set];
//[[NSColor redColor] set];
  [[NSColor windowBackgroundColor] set];

//  PSmoveto(0, NSMinY(titleBarRect) + 0.5);
//  PSrlineto(titleBarRect.size.width, 0);
//  PSstroke();

  /*
  Draw the button-like border.
  */
  workRect = titleBarRect;
  //workRect.origin.x += 1;
  //workRect.origin.y += 1;
  //workRect.size.width -= 2;
  //workRect.size.height -= 2;

  //workRect = NSDrawTiledRects(workRect, workRect, edges, grays[inputState], 4);
 
  /*
  Draw the background.
  */
  [titleColor set];
  //NSRectFill(workRect);

  /* Draw the title. */
  if (isTitled)
    {
      NSSize titleSize;
    
/*
      if (hasMiniaturizeButton)
      {
        workRect.origin.x += 17;
        workRect.size.width -= 17;
      }
      if (hasCloseButton)
      {
        workRect.size.width -= 17;
      }

*/

      [closeButton setBordered: NO];
      [miniaturizeButton setBordered: NO];

      if (inputState)
      {
            [GraphicToolbox drawButton: workRect
            withCaps: [NSImage imageNamed: @"Window/Window-titlebar-caps-unselected.tiff"]
            filledWith: [NSImage imageNamed: @"Window/Window-titlebar-fill-unselected.tiff"]];
      }
      else
      {
            [GraphicToolbox drawButton: workRect
            withCaps: [NSImage imageNamed: @"Window/Window-titlebar-caps.tiff"]
            filledWith: [NSImage imageNamed: @"Window/Window-titlebar-fill.tiff"]];
      }
/*
      NSRect outlineRect = workRect;
      //outlineRect.origin.x += 1;
      //outlineRect.size.width -= 2;
      ////outlineRect.origin.y -= 1;
      //outlineRect.size.height -= 1;
      NSBezierPath* outlinePath = [NSBezierPath bezierPath];
      [outlinePath appendBezierPathWithTopRoundedCorners: outlineRect withRadius: 8.0];
      [[NSColor blackColor] set];

      NSBezierPath* path = [NSBezierPath bezierPath];
      [path appendBezierPathWithTopRoundedCorners: outlineRect withRadius: 8.0];
      [[NSColor colorWithCalibratedRed: 0.7 green: 0.7 blue: 0.75 alpha: 1.0] set];
      NSColor* start = [NSColor colorWithCalibratedRed: 0.8 green: 0.8 blue: 0.8 alpha: 1.0];
      NSColor* end   = [NSColor colorWithCalibratedRed: 1.0 green: 1.0 blue: 1.0 alpha: 1.0];
      
      NSGraphicsContext *ctxt = GSCurrentContext();
      DPSgsave (ctxt);
      [path addClip];
      [THEME drawVerticalGradient: start to: end frame: workRect];
      DPSgrestore (ctxt);
      [outlinePath setLineWidth: 1.5];
      [[NSColor windowBackgroundColor] set];
      [outlinePath stroke];
      [[NSColor colorWithCalibratedRed: 0.3 green: 0.3 blue: 0.4 alpha: 1.0] set];
      [[NSColor blackColor] set];
      [outlinePath stroke];
      //[path fill];
  */

      NSMutableParagraphStyle* p;
      p = [NSMutableParagraphStyle defaultParagraphStyle];
      [p setLineBreakMode: NSLineBreakByClipping];

      titleTextAttributes = [[NSMutableDictionary alloc]
            initWithObjectsAndKeys:
                  [NSFont titleBarFontOfSize: 0], NSFontAttributeName,
                  [NSColor selectedTitlebarTextColor], NSForegroundColorAttributeName,
                  p, NSParagraphStyleAttributeName,
                  nil];
      titleTextAttributes = [[NSMutableDictionary alloc]
            initWithObjectsAndKeys:
                  [NSFont titleBarFontOfSize: 0], NSFontAttributeName,
                  [NSColor titlebarTextColor], NSForegroundColorAttributeName,
                  p, NSParagraphStyleAttributeName,
                  nil];
      titleTextAttributes = [[NSMutableDictionary alloc]
            initWithObjectsAndKeys:
                  [NSFont titleBarFontOfSize: 0], NSFontAttributeName,
                  [NSColor titlebarTextColor], NSForegroundColorAttributeName,
                  p, NSParagraphStyleAttributeName,
                  nil];

      titleSize = [title sizeWithAttributes: titleTextAttributes];
      if (titleSize.width <= workRect.size.width)
      workRect.origin.x += NSMidX(workRect) - titleSize.width / 2;
      workRect.origin.y = NSMidY(workRect) - titleSize.height / 2;
      workRect.size.height = titleSize.height;
      [title drawInRect: workRect
       withAttributes: titleTextAttributes];
    }
}

-(void) drawResizeBar
{
      if (hasResizeBar)
      {
            NSLog (@"(2) inputState: %d", inputState);
            if (inputState == 0)
            {
                        NSLog (@"(2) unselected resizebar");
                        [GraphicToolbox drawButton: resizeBarRect
                              withCaps: [NSImage imageNamed: @"Window/Window-resizebar-caps-unselected.tiff"]
                              filledWith: [NSImage imageNamed: @"Window/Window-resizebar-fill-unselected.tiff"]];
            }
            else
            {
                        NSLog (@"(2) selected resizebar");
                        [GraphicToolbox drawButton: resizeBarRect
                              withCaps: [NSImage imageNamed: @"Window/Window-resizebar-caps.tiff"]
                              filledWith: [NSImage imageNamed: @"Window/Window-resizebar-fill.tiff"]];
            }
      }
      else
      {
            [GraphicToolbox drawButton: resizeBarRect
                  withCaps: [NSImage imageNamed: @"Window/Window-resizebar-caps-unselected.tiff"]
                  filledWith: [NSImage imageNamed: @"Window/Window-resizebar-fill-unselected.tiff"]];
      }
            /*
  [[NSColor lightGrayColor] set];
  [[NSColor windowBackgroundColor] set];
  PSrectfill(1.0, 1.0, resizeBarRect.size.width - 2.0, RESIZE_HEIGHT - 3.0);

  PSsetlinewidth(1.0);

//  [[NSColor blackColor] set];
  [[NSColor darkGrayColor] set];
  PSmoveto(0.0, 0.5);
  PSlineto(resizeBarRect.size.width, 0.5);
  PSstroke();

  [[NSColor darkGrayColor] set];
  PSmoveto(1.0, RESIZE_HEIGHT - 0.5);
  PSlineto(resizeBarRect.size.width - 1.0, RESIZE_HEIGHT - 0.5);
  PSstroke();

//  [[NSColor whiteColor] set];
  PSmoveto(1.0, RESIZE_HEIGHT - 1.5);
  PSlineto(resizeBarRect.size.width - 1.0, RESIZE_HEIGHT - 1.5);
  PSstroke();

  // Only draw the notches if there's enough space. 
  if (resizeBarRect.size.width < 30 * 2)
    return;

  [[NSColor darkGrayColor] set];
  PSmoveto(27.5, 1.0);
  PSlineto(27.5, RESIZE_HEIGHT - 2.0);
  PSmoveto(resizeBarRect.size.width - 28.5, 1.0);
  PSlineto(resizeBarRect.size.width - 28.5, RESIZE_HEIGHT - 2.0);
  PSstroke();

//  [[NSColor whiteColor] set];
  PSmoveto(28.5, 1.0);
  PSlineto(28.5, RESIZE_HEIGHT - 2.0);
  PSmoveto(resizeBarRect.size.width - 27.5, 1.0);
  PSlineto(resizeBarRect.size.width - 27.5, RESIZE_HEIGHT - 2.0);
  PSstroke();
  */
}
@end

Generated by  Doxygen 1.6.0   Back to index