This is PXKActionCell.m in view mode; [Download] [Up]
/*
PXKActionCell.m
NSActionCell for GNUstep GUI X/DPS Backend
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Pascal Forget <pascal@wsc.com>
Date: October 1995
This file is part of the GNUstep GUI X/DPS Backend.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
If you are interested in a warranty or support for this source code,
contact Scott Christley <scottc@net-community.com> for more information.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <gnustep/xdps/PXKActionCell.h>
#include <gnustep/xdps/PXKApplication.h>
#include <gnustep/xdps/PXKView.h>
#include <gnustep/xdps/PXKCell.h>
@implementation PXKActionCell
- (void)drawTextInRect:(NSRect)frame;
{
/* Goofy implementation for testing only */
int len1;
int width;
int font_height;
int alignment = 0;
XFontStruct *win_font;
#if 0
fprintf(stdout, "Cell text frame: %d %d %d %d\n",
frame.origin.x, frame.origin.y,
frame.size.width, frame.size.height);
#endif
(void)load_font(&win_font);
/* need length for both XTextWidth and XDrawString */
len1 = [[self stringValue] length];
/* get string widths for centering */
width = XTextWidth(win_font, [[self stringValue] cString], len1);
font_height = win_font->ascent + win_font->descent;
/*
* Wipe out the contents of the window by filling its
* area with the backGroundColor (defined in NSView.h)
*/
if ([self isOpaque]) {
XFillRectangle(pxkDisplay, [(PXKView *)control_view xWindow],
pxkLightgrayGC,
frame.origin.x+2, frame.origin.y+2,
frame.size.width-4, frame.size.height-4);
}
if((alignment == NSLeftTextAlignment) && (width < frame.size.width)) {
XDrawString(pxkDisplay, [(PXKView *)control_view xWindow],
pxkBlackGC,
frame.origin.x + 5,
frame.origin.y + font_height,
[[self stringValue] cString], len1);
} else if((alignment == NSRightTextAlignment)
&& ((width+5)<frame.size.width)) {
XDrawString(pxkDisplay, [(PXKView *)control_view xWindow],
pxkBlackGC,
frame.origin.x + frame.size.width - 5 - width,
frame.origin.y + font_height,
[[self stringValue] cString], len1);
} else {
if (width > (frame.size.width-4)) {
XDrawString(pxkDisplay, [(PXKView *)control_view xWindow],
pxkBlackGC,
frame.origin.x + frame.size.width - width-5,
frame.origin.y + font_height,
[[self stringValue] cString], len1);
} else {
/* output text, centered on each line */
XDrawString(pxkDisplay, [(PXKView *)control_view xWindow],
pxkBlackGC,
frame.origin.x + (frame.size.width - width-6)/2,
frame.origin.y + font_height,
[[self stringValue] cString], len1);
}
}
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
{
control_view = controlView;
if ([self image]) {
[(PXKCell *)self drawImage];
}
if ([self stringValue]) {
[self drawTextInRect:[self titleRectForBounds:cellFrame]];
}
}
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView;
{
control_view = controlView;
[(PXKCell *)self drawBorder];
[self drawInteriorWithFrame:cellFrame inView:controlView];
}
- (NSRect)titleRectForBounds:(NSRect)theRect;
{
#if 0
fprintf(stdout, "Cell titleRectForBounds: %d %d %d %d\n",
theRect.origin.x, theRect.origin.y,
theRect.size.width, theRect.size.height);
#endif
/* Goofy implementation for testing only */
return theRect;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.