This is MiscLineWrapper.h in view mode; [Download] [Up]
#ifndef __MiscLineWrapper_h
#define __MiscLineWrapper_h
#ifdef __GNUC__
#pragma interface
#endif
//=============================================================================
//
// Copyright (C) 1996-1997 by Paul S. McCarthy and Eric Sunshine.
// Written by Paul S. McCarthy and Eric Sunshine.
// All Rights Reserved.
//
// This notice may not be removed from this source code.
//
// This object is included in the MiscKit by permission from the authors
// and its use is governed by the MiscKit license, found in the file
// "License.rtf" in the MiscKit distribution. Please refer to that file
// for a list of all applicable permissions and restrictions.
//
//=============================================================================
//-----------------------------------------------------------------------------
// MiscLineWrapper.h
//
// A C++ object for calculating line breaks in text.
//
// NOTE *PARTIAL*
// "Partial" lines are lines that do not fit completely within the
// height of the drawing rectangle. For example, if you have 3 lines
// of text, but the drawing rectangle is only 2.5 lines tall, the
// third line of text is a partial line. The caller can decide
// whether or not to draw these partial lines. Default behavior draws
// partial lines.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: MiscLineWrapper.h,v 1.2 96/12/30 03:11:26 sunshine Exp $
// $Log: MiscLineWrapper.h,v $
// Revision 1.2 96/12/30 03:11:26 sunshine
// v104.1: Ported to OPENSTEP 4.1 (gamma).
//
// Revision 1.1 96/08/30 14:56:41 sunshine
// A C++ object for calculating line breaks in text.
//-----------------------------------------------------------------------------
#include <bool.h>
extern "Objective-C" {
#import <AppKit/NSFont.h>
#import <Foundation/NSGeometry.h> // NSRect
}
extern "C" {
#include <limits.h> // INT_MAX
}
class MiscLineWrapper
{
public:
int const MAX_TEXT_LENGTH = (INT_MAX / 2);
static float const DEFAULT_LEFT_MARGIN;
static float const DEFAULT_TOP_MARGIN;
static float const DEFAULT_RIGHT_MARGIN;
static float const DEFAULT_BOTTOM_MARGIN;
struct Line
{
float width;
int start;
int len;
};
private:
int text_len;
int text_max;
char* text;
NSFont* font;
int alignment;
int num_lines;
int max_lines;
Line* lines;
NSRect rect;
float left_margin;
float top_margin;
float right_margin;
float bottom_margin;
float ascender;
float descender;
float line_height;
bool char_wrap;
bool no_partial; // NOTE *PARTIAL*
bool needs_wrap;
MiscLineWrapper( MiscLineWrapper const& ) {} // No copy constructor.
void operator=( MiscLineWrapper const& ) {} // No assign operator.
void do_wrap();
void wrap_segment( int seg_start, int seg_end );
float calc_width( int start_pos, int lim ) const;
bool width_check() const;
bool has_tabs( Line const& line ) const;
void draw( float x, float y, int start, int len );
void draw_tabs( float x, float y, Line const& line );
public:
MiscLineWrapper();
~MiscLineWrapper();
void setText( NSString* );
void setFont( NSFont* );
void setRect( NSRect );
void setLeftMargin( float );
void setTopMargin( float );
void setRightMargin( float );
void setBottomMargin( float );
void setAlignment( int );
void setCharWrap( bool );
void setNoPartialLines( bool b ) { no_partial = b; }
char const* getText() const { return text; }
NSFont* getFont() const { return font; }
NSRect const& getRect() const { return rect; }
float getLeftMargin() const { return left_margin; }
float getTopMargin() const { return top_margin; }
float getRightMargin() const { return right_margin; }
float getBottomMargin() const { return bottom_margin; }
int getAlignment() const { return alignment; }
bool getCharWrap() const { return char_wrap; }
bool getNoPartialLines() const { return no_partial; }
bool needsWrap() const { return needs_wrap; }
int numLines() const { return num_lines; }
Line const& lineAt( int i ) const { return lines[i]; }
void wrap();
void draw();
void dump() const;
};
#endif // __MiscLineWrapper_h
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.