ftp.nice.ch/pub/next/developer/resources/classes/misckit/MiscKit.1.10.0.s.gnutar.gz#/MiscKit/Palettes/MiscTableScroll/MiscLineWrapper.h

This is MiscLineWrapper.h in view mode; [Download] [Up]

#ifndef __MiscLineWrapper_h
#define __MiscLineWrapper_h
#ifdef __GNUC__
#pragma interface
#endif
//=============================================================================
//
//		Copyright (C) 1996 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.1 96/08/30 14:56:41 sunshine Exp $
// $Log:		MiscLineWrapper.h,v $
// 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/Font.h>
#import <appkit/graphics.h>				// NXRect
}
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;
		Font*	font;
		NXFontMetrics const* metrics;
		int		alignment;
		int		num_lines;
		int		max_lines;
		Line*	lines;
		NXRect	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( char const* );
		void			setFont( Font* );
		void			setRect( NXRect );
		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; }
		Font*			getFont() const			{ return font; }
		NXRect 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.