Milán Major

netscape-revival

1 branch
Code

lib/mac/TX/QDTextRun.h

// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
//	
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ


#pragma once

#include "RunObject.h"
#include "Array.h"


//***************************************************************************************************

const ClassId kQDTextRunClassId = 'QDTx';

const AttrId kFontAttr = 'font';
const AttrId kFontSizeAttr = 'size';
const AttrId kFaceAttr = 'face';
const AttrId kForeColorAttr = 'klor';

//constants for message to UpdateAttribute
const long kForceScriptModif = 1 << 0; //for font
const long kAddSize = 1 << 1;

const long kToggleFace = 1 << 2;

const long kAddFace = 1 << 3;
const long kRemoveFace = 1 << 4;
//***************************************************************************************************

Fixed StdTxFixedMeas(short byteCount,const void *textAddr, Point numer, Point denom);

//***************************************************************************************************

class	CQDTextRun	:	public CRunObject {
	public:
		CQDTextRun();
		
		void	IQDTextRun();
		virtual CAttrObject* CreateNew() const;
		
		virtual ClassId GetClassId() const;
		
		Boolean IsTextRun() const;
		
		virtual void GetAttributes(CObjAttributes* attributes) const;
		
		virtual char GetRunDir() const;
		virtual Boolean Is2Bytes() const;
		virtual char GetRunScript() const;
		virtual void SetKeyScript() const;
		
		virtual void SaveRunEnv();
		virtual void SetRunEnv() const;
		
		virtual void SetDefaults(long message = 0);
	
		virtual Boolean FilterControlChar(unsigned char theKey) const;

		virtual void PixelToChar(const LineRunDisplayInfo&, Fixed pixel, TOffsetRange* charRange);
		
		virtual Fixed CharToPixel(const LineRunDisplayInfo&, short charOffset);
		
		virtual void Draw(const LineRunDisplayInfo&, Fixed runLeftEdge, const Rect& lineRect, short lineAscent);
		
		#ifdef txtnRulers
		virtual Fixed FullJustifPortion(const LineRunDisplayInfo&);
		#endif
		
		virtual Fixed MeasureWidth(const LineRunDisplayInfo&);
		
		virtual StyledLineBreakCode LineBreak(unsigned char* scriptRunChars, long scriptRunLen, long runOffset
																			, Fixed* widthAvail, Boolean forceBreak, long* breakLen);

		virtual void SetCursor(Point, const RunPositionInfo&) const; //set it to ibeam
				
	protected:
		char			fScript;
		short			fFont;
		long			fFace;
		RGBColor	fForeColor;	
		
		/*the lowest byte is reserved for the QD Style (bold, italic, ...), descendents can add more faces*/
		char fDirection;
		Boolean f2Bytes;
		short		fFontSize;

		virtual long GetAttributeFlags(AttrId theAttr) const;

		virtual void CalcHeightInfo(short* ascent, short* descent, short* leading); //override
		
		virtual Boolean EqualAttribute(AttrId theAttr, const void* valToCheck) const;
		//override, ¥any descendent should override, otherwise the result is always false
		
		virtual Boolean SetCommonAttribute(AttrId theAttr, const void* valToCheck); //override
		virtual void AttributeToBuffer(AttrId theAttr, void* attrBuffer) const; //override
		virtual void BufferToAttribute(AttrId theAttr, const void* attrBuffer); //override
		virtual void UpdateAttribute(AttrId theAttr, const void* srcAttr, long updateMessage
																, const void* continuousAttr = nil); //override
		//continuousAttr is used only if fFlags has the kToggleFace set

		virtual void AddFace(long faceToAdd, long* destFace);
		/*normally the result is (faceToAdd | destFace), but this methode is the place to check for exclusif faces
		(eg superScript-subScript, condensed-extended)
		*/
		
		void RemoveFace(long faceToRemove, long *destFace) const;
};