[Date Prev][Date Next][Thread Prev][Thread Next][Thread Index]

[XaraXtreme-dev] Text rendering implementation (2)



Find attached below the first part of Kernel updates for text 
rendering.

Kernel/Makefile.am:
added gcache.cpp and fntcache.cpp to build list

Kernel/fontman.h:
enabled EnumAllFonts, converted string constant, fixed includes

Kernel/fontmap.cpp:
enabled functionality

Kernel/attrmgr.cpp:
disabled non-Unicode-safe Japanese default font fix

Martin
Index: Kernel/Makefile.am
===================================================================
--- Kernel/Makefile.am	(Revision 746)
+++ Kernel/Makefile.am	(Arbeitskopie)
@@ -20,6 +20,7 @@
 	doccomp.cpp doccoord.cpp docrect.cpp document.cpp docview.cpp dumbnode.cpp \
 	exphint.cpp extender.cpp fillattr.cpp fillramp.cpp fillval.cpp filters.cpp \
 	filtrmgr.cpp fontcomp.cpp fontlist.cpp fontman.cpp fracfill.cpp fthrattr.cpp \
+        gcache.cpp fntcache.cpp \
 	fttyplis.cpp gadget.cpp gblend.cpp genv.cpp gla.cpp gmould.cpp \
 	grid.cpp group.cpp guides.cpp gwinding.cpp hittest.cpp hotkeys.cpp impbmp.cpp \
 	impcol.cpp impstr.cpp infocomp.cpp insertnd.cpp invalid.cpp isetattr.cpp \
Index: Kernel/fontman.h
===================================================================
--- Kernel/fontman.h	(Revision 746)
+++ Kernel/fontman.h	(Arbeitskopie)
@@ -105,10 +105,10 @@
 
 #include "list.h"
 #include "listitem.h"
-//#include "fontbase.h"
-#include "ccpanose.h"
+#include "fontbase.h"
+// #include "ccpanose.h" - included in fontbase.h
 
-#define DEFAULTFONTNAME "Times New Roman"
+#define DEFAULTFONTNAME _T("Times New Roman")
 #define DEFAULTHANDLE	0
 #define ILLEGALFHANDLE	0x7FFF
 #define FIRSTFONTHANDLE 1
@@ -314,8 +314,6 @@
 
 ********************************************************************************************/
 
-PORTNOTE("other","Removed EnumAllFonts - derived from OILEnumFonts")
-#ifndef EXCLUDE_FROM_XARALX
 class EnumAllFonts : public OILEnumFonts
 {
 	CC_DECLARE_DYNCREATE( EnumAllFonts )
@@ -323,7 +321,6 @@
 	public:
 		EnumAllFonts() {};
 		virtual BOOL NewFont(FontClass Class, ENUMLOGFONT FAR* lpelf);
-}; */
-#endif
+};
 
 #endif
Index: Kernel/fontman.cpp
===================================================================
--- Kernel/fontman.cpp	(Revision 746)
+++ Kernel/fontman.cpp	(Arbeitskopie)
@@ -101,7 +101,7 @@
 */
 
 #include "camtypes.h"
-//#include "fontbase.h"
+// #include "fontbase.h" - included in fontman.h
 #include "fontman.h"
 #include "errors.h"
 #include "txtattr.h"
@@ -111,11 +111,9 @@
 
 CC_IMPLEMENT_DYNCREATE( CachedFontItem, ListItem )
 CC_IMPLEMENT_DYNCREATE( FontManager, CCObject )
-PORTNOTE("text","Removed EnumAllFonts impl.")
-#ifndef EXCLUDE_FROM_XARALX
 CC_IMPLEMENT_DYNCREATE( EnumAllFonts, OILEnumFonts )
-#endif
 
+
 // Declare smart memory handling in Debug builds
 #define new CAM_DEBUG_NEW     
 
@@ -222,10 +220,8 @@
 
 OUTLINETEXTMETRIC* CachedFontItem::GetOutlineTextMetric()
 {
-	PORTNOTETRACE("text","CachedFontItem::GetOutlineTextMetric - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
-	ERROR2IF(pFontClass==NULL, NULL, "this.pFontClass==NULL.")
-	ERROR2IF(pEnumLogFont==NULL, NULL, "this.pEnumLogFont==NULL.")
+	ERROR2IF(pFontClass==NULL, NULL, "this.pFontClass==NULL.");
+	ERROR2IF(pEnumLogFont==NULL, NULL, "this.pEnumLogFont==NULL.");
 
 	if (pOutlineTextMetric==NULL)
 	{
@@ -236,8 +232,6 @@
 
 	// return the result.
 	return pOutlineTextMetric;
-#endif
-	return NULL;
 }
 
 /********************************************************************************************
@@ -337,13 +331,13 @@
 
 BOOL CachedFontItem::IsFullyCached()
 {
-	PORTNOTETRACE("text","CachedFontItem::IsFullyCached - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
-	TRACE( _T("Warning - CachedFontItem::IsFullyCached called") );
+	PORTNOTE("text","CachedFontItem::IsFullyCached - do nothing");
+#ifndef DISABLE_TEXT_RENDERING
+	TRACEUSER("wuerthne", _T("CachedFontItem::IsFullyCached called") );
 	ERROR2IF(pFontClass==NULL, FALSE, "A CachedFontItem structure exists without a FontClass!!!");
 	return (pEnumLogFont!=NULL);
 #else
-	return true;
+	return TRUE;
 #endif
 }
 
@@ -385,8 +379,6 @@
 
 void CachedFontItem::Dump()
 {
-	PORTNOTETRACE("text","CachedFontItem::Dump - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 #ifdef _DEBUG
 	ERROR3IF(pFontClass==NULL, "A CachedFontItem structure exists without a FontClass!!!");
 	TRACE( _T("Font item:\n Handle = %d\n"),Handle);
@@ -401,7 +393,6 @@
 	}
 	pFontClass->Dump();
 #endif
-#endif
 }
 
 
@@ -493,12 +484,7 @@
 
 BOOL FontManager::LegalFontClass(INT32 Class, FontClass& RealClass)
 {
-	PORTNOTETRACE("text","FontManager::LegalFontClass - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	return OILFontMan::LegalFontClass(Class, RealClass);
-#else
-	return false;
-#endif
 }
 
 
@@ -606,11 +592,7 @@
 	if (pItem==NULL)
 		return NULL;
 
-	PORTNOTETRACE("text","FontManager::AddFont - removed CreateNewFont call");
-	FontBase* pClass = NULL;
-#ifndef EXCLUDE_FROM_XARALX
 	FontBase* pClass = OILFontMan::CreateNewFont(fclass,Name);
-#endif
 	if (pClass==NULL)
 	{
 		delete pItem;
@@ -1181,8 +1163,6 @@
 
 ********************************************************************************************/
 
-PORTNOTE("text","Remove references to CCPanose")
-#ifndef EXCLUDE_FROM_XARALX
 WORD FontManager::FindClosestFont(const CCPanose &PanoseNumber)
 {
 	// check, is this a 'simple' panose number with just Weight and Letterform components?
@@ -1205,71 +1185,72 @@
 		FindClosestFontHandle = ILLEGALFHANDLE;
 		FindClosestPanoseNumber = PanoseNumber;
 		FindClosestDistance = 0xffffffff;
-		FindClosestTypeFaceName = "";
+		FindClosestTypeFaceName = _T("");
 		FindClosestFontClass = FC_UNDEFINED;
 
 		// normalise the panose number.
 		FindClosestPanoseNumber.BodgeToNormal();
 
 		// choose whichever panose font matching algorithm you require:
-
+PORTNOTE("text","TrueType/Win specific code removed")
+#ifndef EXCLUDE_FROM_XARALX
 		// quick - just checks the seven fonts from the Microsoft(tm) Web Font Pack(tm)
-		// return FindClosestFontQuick(PanoseNumber);
+		return FindClosestFontQuick(PanoseNumber);
+#endif
 
 		// full - checks all the fonts installed on the machine.
 		return FindClosestFontFull(PanoseNumber);
 	}
 } 
 
+PORTNOTE("text","TrueType/Win specific code removed")
+#ifndef EXCLUDE_FROM_XARALX
 WORD FontManager::FindClosestFontQuick(const CCPanose &PanoseNumber)
 {
 	WORD MyFontHandle;
 	String_64 MyFontName;
 
 	// try "Arial"
-	MyFontName = "Arial";
+	MyFontName = _T("Arial");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Arial Black"
-	MyFontName = "Arial Black";
+	MyFontName = _T("Arial Black");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Comic Sans"
-	MyFontName = "Comic Sans";
+	MyFontName = _T("Comic Sans");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Courier New"
-	MyFontName = "Courier New";
+	MyFontName = _T("Courier New");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Impact"
-	MyFontName = "Impact";
+	MyFontName = _T("Impact");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Times New Roman"
-	MyFontName = "Times New Roman";
+	MyFontName = _T("Times New Roman");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	// try "Verdana"
-	MyFontName = "Verdana";
+	MyFontName = _T("Verdana");
 	MyFontHandle = CacheNamedFont(&MyFontName, FC_TRUETYPE);
 	FindClosestFontQuickTry(MyFontHandle);
 
 	return FindClosestFontHandle;
 } 
-#endif
 
 
 BOOL FontManager::FindClosestFontQuickTry(WORD MyFontHandle)
 {
-	PORTNOTETRACE("text","FontManager::FindClosestFontQuickTry - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	OUTLINETEXTMETRIC *pOutlineTextMetric = GetOutlineTextMetric(MyFontHandle);
 
 	if (pOutlineTextMetric!=NULL)
@@ -1288,13 +1269,9 @@
 	}
 
 	return TRUE;
-#else
-	return FALSE;
-#endif
 }
+#endif
 
-PORTNOTE("text","Remove references to CCPanose")
-#ifndef EXCLUDE_FROM_XARALX
 WORD FontManager::FindClosestFontFull(const CCPanose &PanoseNumber)
 {
 	WORD MyFontHandle;
@@ -1326,12 +1303,10 @@
 	// return with this font handle
 	return MyFontHandle;
 }
-#endif
 
 BOOL FontManager::FindClosestFontFullTry(FontClass Class, String_64 *pTypeFaceName, ENUMLOGFONT *pEnumLogFont)
 {
 	PORTNOTETRACE("text","FontManager::FindClosestFontFullTry - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	ERROR2IF(pEnumLogFont==NULL, FALSE, "FindClosestTry called with pEnumLogFont==NULL.");
 
 	OUTLINETEXTMETRIC *pOutlineTextMetric;
@@ -1359,9 +1334,6 @@
 	}
 	
 	return TRUE;
-#else
-	return FALSE;
-#endif
 }
 
 /********************************************************************************************
@@ -1374,10 +1346,7 @@
 
 void FontManager::InvalidateCharMetrics()
 {
-PORTNOTE("text","Removed FontMetricsCache usage")
-#ifndef EXCLUDE_FROM_XARALX
 	FontMetricsCache::InvalidateCharMetrics();
-#endif
 }
 
 /********************************************************************************************
@@ -1396,12 +1365,7 @@
 
 BOOL FontManager::GetCharMetrics(CNativeDC* pDC, WCHAR ch, CharDescription& FontDesc, CharMetrics* pCharMetrics)
 {
-PORTNOTE("text","Removed FontMetricsCache usage")
-#ifndef EXCLUDE_FROM_XARALX
 	return FontMetricsCache::GetCharMetrics(pDC, ch, FontDesc, pCharMetrics);
-#else
-	return false;
-#endif
 }
 
 /********************************************************************************************
@@ -1419,13 +1383,8 @@
 
 MILLIPOINT FontManager::GetCharsKerning(CNativeDC* pDC, WCHAR chLeft, WCHAR chRight, CharDescription& FontDesc)
 {
-	PORTNOTETRACE("text","FontManager::GetCharsKerning - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
-	TRACE( _T("Warning - FontManager::GetCharsKerning called\n") );
+	// TRACEUSER("wuerthne", _T("FontManager::GetCharsKerning called\n") );
 	return FontKerningPairsCache::GetCharsKerning(pDC, chLeft, chRight, FontDesc);
-#else
-	return MILLIPOINT(0);
-#endif
 }
 
 /********************************************************************************************
@@ -1458,8 +1417,6 @@
 	ERROR2IF(ppVerbs==NULL,FALSE,"FontManager::GetCharPath ppVerbs==NULL");
 	ERROR2IF(pNumCoords==NULL,FALSE,"FontManager::GetCharPath pNumCoords==NULL");
 
-	PORTNOTETRACE("text","FontManager::GetCharPath - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	CachedFontItem* pItem = GetFont(ChDesc.GetTypefaceHandle());
 	if (pItem==NULL)
 		return FALSE;
@@ -1472,9 +1429,6 @@
 		pItem->SetIsCorrupt(TRUE);
 
 	return Success;
-#else
-	return false;
-#endif
 }
 
 /********************************************************************************************
@@ -1494,8 +1448,8 @@
 
 BOOL FontManager::CacheDefaultFont()
 {
-	PORTNOTETRACE("text","FontManager::CacheDefaultFont - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
+	PORTNOTE("text","FontManager::CacheDefaultFont - do nothing");
+#ifndef DISABLE_TEXT_RENDERING
 	if (DefaultFontItem.pFontClass!=NULL)
 	{
 		ERROR3("CacheDefaultFont called but a default font is already resident");
@@ -1618,13 +1572,7 @@
 
 BOOL FontManager::TempCacheNamedFont(String_64* pFontName, FontClass Class, INT32 Pass)
 {
-	// Sticks the font in a temporary cache
-	PORTNOTETRACE("text","FontManager::TempCacheNamedFont - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	return (OILFontMan::CacheNamedFont(pFontName, Class, Pass));
-#else
-	return true;
-#endif
 }
 
 /********************************************************************************************
@@ -1687,12 +1635,9 @@
 
 void FontManager::RefreshCache()
 {
-	PORTNOTETRACE("text","FontManager::RefreshCache - do nothing");
-#ifndef EXCLUDE_FROM_XARALX
 	InvalidateCache();
 	OILFontMan::ValidateCache();
 	ResetDefaultFont();
-#endif
 }
 
 /********************************************************************************************
@@ -2209,9 +2154,6 @@
 	return Flags;
 }
 
-PORTNOTE("text","Removed EnumAllFonts")
-#ifndef EXCLUDE_FROM_XARALX
-
 /********************************************************************************************
 
 >	virtual BOOL EnumAllFonts::NewFont(FontClass Class, ENUMLOGFONT FAR* lpelf)
@@ -2230,5 +2172,3 @@
 	// dont enumerate any more please.
 	return FALSE;
 }
-
-#endif
Index: Kernel/attrmgr.cpp
===================================================================
--- Kernel/attrmgr.cpp	(Revision 746)
+++ Kernel/attrmgr.cpp	(Arbeitskopie)
@@ -695,6 +695,8 @@
 	if (FntAttr == NULL)
 		return FALSE; 
 
+	PORTNOTETRACE("text", "Japanese default font disabled");
+#ifndef EXCLUDE_FROM_XARALX
 	// If we are in Japan we don't want Times to be the current font
 	if (UnicodeManager::IsDBCSOS())
 	{
@@ -705,6 +707,7 @@
 		FONTMANAGER->CacheNamedFont(&FontName, FC_UNDEFINED);
 		FntAttr->Value.HTypeface = FONTMANAGER->GetFontHandle(&FontName, FC_UNDEFINED);
 	}
+#endif
 
 	UpdateCurrentAttribute(CC_RUNTIME_CLASS(BaseTextClass), FntAttr, FALSE, TRUE);