summaryrefslogtreecommitdiffstats
path: root/lib/kformula/fontstyle.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kformula/fontstyle.cc')
-rw-r--r--lib/kformula/fontstyle.cc891
1 files changed, 0 insertions, 891 deletions
diff --git a/lib/kformula/fontstyle.cc b/lib/kformula/fontstyle.cc
deleted file mode 100644
index 32479b0f..00000000
--- a/lib/kformula/fontstyle.cc
+++ /dev/null
@@ -1,891 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2003 Ulrich Kuettler <ulrich.kuettler@gmx.de>
- Copyright (C) 2006 Alfredo Beaumont Sainz <alfredo.beaumont@gmail.com>
-
- 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.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
-*/
-
-#include <tqpainter.h>
-#include <tqpen.h>
-#include <tqfontdatabase.h>
-#include <tqapplication.h>
-
-#include <kstaticdeleter.h>
-#include <tdelocale.h>
-#include <kstandarddirs.h>
-#include <tdeio/netaccess.h>
-#include <tdeio/job.h>
-#include <tdemessagebox.h>
-
-#include "fontstyle.h"
-
-
-KFORMULA_NAMESPACE_BEGIN
-
-#include "unicodetable.cc"
-
-bool FontStyle::m_installed = false;
-
-bool FontStyle::init( ContextStyle* style, bool install )
-{
- if (!m_installed && install)
- installFonts();
- m_symbolTable.init( style->getMathFont() );
-
- return true;
-}
-
-// Cache the family list from TQFontDatabase after fixing it up (no foundry, lowercase)
-class FontList {
-public:
- FontList() {
- TQFontDatabase db;
- const TQStringList lst = db.families();
- for ( TQStringList::const_iterator it = lst.begin(), end = lst.end() ; it != end ; ++it ) {
- const TQString name = *it;
- int i = name.find('[');
- TQString family = name;
- // Remove foundry
- if ( i > -1 ) {
- const int li = name.findRev(']');
- if (i < li) {
- if (name[i - 1] == ' ')
- i--;
- family = name.left(i);
- }
- }
- m_fontNames.append( family.lower() );
- }
- }
- bool hasFont( const TQString& fontName ) const {
- return m_fontNames.find( fontName ) != m_fontNames.end();
- }
- TQStringList m_fontNames;
-};
-static FontList* s_fontList = 0;
-static KStaticDeleter<FontList> s_fontList_sd;
-
-void FontStyle::testFont( TQStringList& missing, const TQString& fontName ) {
- if ( !s_fontList )
- s_fontList_sd.setObject( s_fontList, new FontList() );
- if ( !s_fontList->hasFont( fontName ) ) {
- kdWarning(39001) << "Font '" << fontName << "' not found" << endl;
- missing.append( fontName );
- }
-}
-
-
-TQStringList FontStyle::missingFonts( bool install )
-{
- if (!m_installed && install)
- installFonts();
-
- TQStringList missing = missingFontsInternal();
- return missing;
-}
-
-TQStringList FontStyle::missingFontsInternal()
-{
- TQStringList missing;
-
- testFont( missing, "cmex10" );
- testFont( missing, "arev sans");
-
- return missing;
-}
-
-void FontStyle::installFonts()
-{
- if (m_installed)
- return;
- TQStringList missing = missingFontsInternal();
- if (!missing.isEmpty())
- {
- TQStringList urlList;
- for (TQStringList::iterator it = missing.begin(); it != missing.end(); ++it)
- {
- if ( *it == "arev sans" ) {
- if (!TDEIO::NetAccess::exists("fonts:/Personal/Arev.ttf", true, NULL))
- urlList.append(locate("data", "kformula/fonts/Arev.ttf"));
- if (!TDEIO::NetAccess::exists("fonts:/Personal/ArevIt.ttf", true, NULL))
- urlList.append(locate("data", "kformula/fonts/ArevIt.ttf"));
- if (!TDEIO::NetAccess::exists("fonts:/Personal/ArevBd.ttf", true, NULL))
- urlList.append(locate("data", "kformula/fonts/ArevBd.ttf"));
- if (!TDEIO::NetAccess::exists("fonts:/Personal/ArevBI.ttf", true, NULL))
- urlList.append(locate("data", "kformula/fonts/ArevBI.ttf"));
- }
- else {
- if (!TDEIO::NetAccess::exists("fonts:/Personal/" + *it + ".ttf", true, NULL))
- urlList.append(locate("data", "kformula/fonts/" + *it + ".ttf"));
- }
- }
- TDEIO::copy(urlList, "fonts:/Personal/", false);
- KMessageBox::information(tqApp->mainWidget(),
- i18n("Some fonts have been installed to assure that symbols in formulas are properly visualized. You must restart the application in order so that changes take effect"));
- }
- m_installed = true;
-}
-
-Artwork* FontStyle::createArtwork( SymbolType type ) const
-{
- return new Artwork( type );
-}
-
-// We claim that all chars come from the same font.
-// It's up to the font tables to ensure this.
-const TQChar leftRoundBracket[] = {
- 0x30, // uppercorner
- 0x40, // lowercorner
- 0x42 // line
-};
-const TQChar leftSquareBracket[] = {
- 0x32, // uppercorner
- 0x34, // lowercorner
- 0x36 // line
-};
-const TQChar leftCurlyBracket[] = {
- 0x38, // uppercorner
- 0x3A, // lowercorner
- 0x3E, // line
- 0x3C // middle
-};
-
-const TQChar leftLineBracket[] = {
- 0x36, // line
- 0x36, // line
- 0x36 // line
-};
-const TQChar rightLineBracket[] = {
- 0x37, // line
- 0x37, // line
- 0x37 // line
-};
-
-const TQChar rightRoundBracket[] = {
- 0x31, // uppercorner
- 0x41, // lowercorner
- 0x43 // line
-};
-const TQChar rightSquareBracket[] = {
- 0x33, // uppercorner
- 0x35, // lowercorner
- 0x37 // line
-};
-const TQChar rightCurlyBracket[] = {
- 0x39, // uppercorner
- 0x3B, // lowercorner
- 0x3E, // line
- 0x3D // middle
-};
-
-
-static const char cmex_LeftSquareBracket = 163;
-static const char cmex_RightSquareBracket = 164;
-static const char cmex_LeftCurlyBracket = 169;
-static const char cmex_RightCurlyBracket = 170;
-static const char cmex_LeftCornerBracket = 173;
-static const char cmex_RightCornerBracket = 174;
-static const char cmex_LeftRoundBracket = 161;
-static const char cmex_RightRoundBracket = 162;
-static const char cmex_SlashBracket = 177;
-static const char cmex_BackSlashBracket = 178;
-//static const char cmex_LeftLineBracket = 0x4b;
-//static const char cmex_RightLineBracket = 0x4b;
-
-// use the big symbols here
-static const char cmex_Int = 90;
-static const char cmex_Sum = 88;
-static const char cmex_Prod = 89;
-
-
-// cmex is a special font with symbols in four sizes.
-static short cmex_nextchar( short ch )
-{
- switch ( ch ) {
- case 161: return 179;
- case 162: return 180;
- case 163: return 104;
- case 164: return 105;
- case 169: return 110;
- case 170: return 111;
- case 165: return 106;
- case 166: return 107;
- case 167: return 108;
- case 168: return 109;
- case 173: return 68;
- case 174: return 69;
- case 177: return 46;
- case 178: return 47;
-
- case 179: return 181;
- case 180: return 182;
- case 104: return 183;
- case 105: return 184;
- case 110: return 189;
- case 111: return 190;
- case 106: return 185;
- case 107: return 186;
- case 108: return 187;
- case 109: return 188;
- case 68: return 191;
- case 69: return 192;
- case 46: return 193;
- case 47: return 194;
-
- case 181: return 195;
- case 182: return 33;
- case 183: return 34;
- case 184: return 35;
- case 189: return 40;
- case 190: return 41;
- case 185: return 36;
- case 186: return 37;
- case 187: return 38;
- case 188: return 39;
- case 191: return 42;
- case 192: return 43;
- case 193: return 44;
- case 194: return 45;
- }
- return 0;
-}
-
-bool Artwork::calcCMDelimiterSize( const ContextStyle& context,
- uchar c,
- luPt fontSize,
- luPt parentSize )
-{
- TQFont f( "cmex10" );
- f.setPointSizeFloat( context.layoutUnitPtToPt( fontSize ) );
- TQFontMetrics fm( f );
-
- for ( char i=1; c != 0; ++i ) {
- LuPixelRect bound = fm.boundingRect( c );
-
- luPt height = context.ptToLayoutUnitPt( bound.height() );
- if ( height >= parentSize ) {
- luPt width = context.ptToLayoutUnitPt( fm.width( c ) );
- luPt baseline = context.ptToLayoutUnitPt( -bound.top() );
-
- cmChar = c;
-
- setHeight( height );
- setWidth( width );
- setBaseline( baseline );
-
- return true;
- }
- c = cmex_nextchar( c );
- }
-
- // Build it up from pieces.
- return false;
-}
-
-
-void Artwork::calcLargest( const ContextStyle& context,
- uchar c, luPt fontSize )
-{
- TQFont f( "cmex10" );
- f.setPointSizeFloat( context.layoutUnitPtToPt( fontSize ) );
- TQFontMetrics fm( f );
-
- cmChar = c;
- for ( ;; ) {
- c = cmex_nextchar( c );
- if ( c == 0 ) {
- break;
- }
- cmChar = c;
- }
-
- LuPixelRect bound = fm.boundingRect( cmChar );
-
- luPt height = context.ptToLayoutUnitPt( bound.height() );
- luPt width = context.ptToLayoutUnitPt( fm.width( cmChar ) );
- luPt baseline = context.ptToLayoutUnitPt( -bound.top() );
-
- setHeight( height );
- setWidth( width );
- setBaseline( baseline );
-}
-
-
-void Artwork::drawCMDelimiter( TQPainter& painter, const ContextStyle& style,
- luPixel x, luPixel y,
- luPt height )
-{
- TQFont f( "cmex10" );
- f.setPointSizeFloat( style.layoutUnitToFontSize( height, false ) );
-
- painter.setFont( f );
- painter.drawText( style.layoutUnitToPixelX( x ),
- style.layoutUnitToPixelY( y + getBaseline() ),
- TQString( TQChar( cmChar ) ) );
-
- // Debug
-#if 0
- TQFontMetrics fm( f );
- LuPixelRect bound = fm.boundingRect( cmChar );
- painter.setBrush(TQt::NoBrush);
- painter.setPen(TQt::green);
- painter.drawRect( style.layoutUnitToPixelX( x ),
- style.layoutUnitToPixelY( y ),
- fm.width( cmChar ),
- bound.height() );
-#endif
-}
-
-
-Artwork::Artwork(SymbolType t)
- : baseline( -1 ), type(t)
-{
-}
-
-
-void Artwork::calcSizes( const ContextStyle& style,
- ContextStyle::TextStyle tstyle,
- double factor,
- luPt parentSize )
-{
- setBaseline( -1 );
- cmChar = -1;
- luPt mySize = style.getAdjustedSize( tstyle, factor );
- switch (getType()) {
- case LeftSquareBracket:
- if ( calcCMDelimiterSize( style, cmex_LeftSquareBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcRoundBracket( style, leftSquareBracket, parentSize, mySize );
- break;
- case RightSquareBracket:
- if ( calcCMDelimiterSize( style, cmex_RightSquareBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcRoundBracket( style, rightSquareBracket, parentSize, mySize );
- break;
- case LeftLineBracket:
- calcRoundBracket( style, leftLineBracket, parentSize, mySize );
- setWidth( getWidth()/2 );
- break;
- case RightLineBracket:
- calcRoundBracket( style, rightLineBracket, parentSize, mySize );
- setWidth( getWidth()/2 );
- break;
- case SlashBracket:
- if ( calcCMDelimiterSize( style, cmex_SlashBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcLargest( style, cmex_SlashBracket, mySize );
- break;
- case BackSlashBracket:
- if ( calcCMDelimiterSize( style, cmex_BackSlashBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcLargest( style, cmex_BackSlashBracket, mySize );
- break;
- case LeftCornerBracket:
- if ( calcCMDelimiterSize( style, cmex_LeftCornerBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcLargest( style, cmex_LeftCornerBracket, mySize );
- break;
- case RightCornerBracket:
- if ( calcCMDelimiterSize( style, cmex_RightCornerBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcLargest( style, cmex_RightCornerBracket, mySize );
- break;
- case LeftRoundBracket:
- if ( calcCMDelimiterSize( style, cmex_LeftRoundBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcRoundBracket( style, leftRoundBracket, parentSize, mySize );
- break;
- case RightRoundBracket:
- if ( calcCMDelimiterSize( style, cmex_RightRoundBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcRoundBracket( style, rightRoundBracket, parentSize, mySize );
- break;
- case EmptyBracket:
- setHeight(parentSize);
- //setWidth(style.getEmptyRectWidth());
- setWidth(0);
- break;
- case LeftCurlyBracket:
- if ( calcCMDelimiterSize( style, cmex_LeftCurlyBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcCurlyBracket( style, leftCurlyBracket, parentSize, mySize );
- break;
- case RightCurlyBracket:
- if ( calcCMDelimiterSize( style, cmex_RightCurlyBracket,
- mySize, parentSize ) ) {
- return;
- }
- calcCurlyBracket( style, rightCurlyBracket, parentSize, mySize );
- break;
- case Integral:
- calcCharSize( style, style.getBracketFont(), mySize, cmex_Int );
- break;
- case Sum:
- calcCharSize( style, style.getBracketFont(), mySize, cmex_Sum );
- break;
- case Product:
- calcCharSize( style, style.getBracketFont(), mySize, cmex_Prod );
- break;
- }
-}
-
-void Artwork::calcSizes( const ContextStyle& style,
- ContextStyle::TextStyle tstyle,
- double factor )
-{
- luPt mySize = style.getAdjustedSize( tstyle, factor );
- switch (type) {
- case LeftSquareBracket:
- calcCharSize(style, mySize, leftSquareBracketChar);
- break;
- case RightSquareBracket:
- calcCharSize(style, mySize, rightSquareBracketChar);
- break;
- case LeftLineBracket:
- case RightLineBracket:
- calcCharSize(style, mySize, verticalLineChar);
- break;
- case SlashBracket:
- calcCharSize(style, mySize, slashChar);
- break;
- case BackSlashBracket:
- calcCharSize(style, mySize, backSlashChar);
- break;
- case LeftCornerBracket:
- calcCharSize(style, mySize, leftAngleBracketChar);
- break;
- case RightCornerBracket:
- calcCharSize(style, mySize, rightAngleBracketChar);
- break;
- case LeftRoundBracket:
- calcCharSize(style, mySize, leftParenthesisChar);
- break;
- case RightRoundBracket:
- calcCharSize(style, mySize, rightParenthesisChar);
- break;
- case EmptyBracket:
- //calcCharSize(style, mySize, spaceChar);
- setHeight(0);
- //setWidth(style.getEmptyRectWidth());
- setWidth(0);
- break;
- case LeftCurlyBracket:
- calcCharSize(style, mySize, leftCurlyBracketChar);
- break;
- case RightCurlyBracket:
- calcCharSize(style, mySize, rightCurlyBracketChar);
- break;
- case Integral:
- case Sum:
- case Product:
- break;
- }
-}
-
-
-void Artwork::draw(TQPainter& painter, const LuPixelRect& /*r*/,
- const ContextStyle& context, ContextStyle::TextStyle tstyle,
- StyleAttributes& style, const LuPixelPoint& parentOrigin)
-{
- luPt mySize = context.getAdjustedSize( tstyle, style.sizeFactor() );
- luPixel myX = parentOrigin.x() + getX();
- luPixel myY = parentOrigin.y() + getY();
- /*
- if ( !LuPixelRect( myX, myY, getWidth(), getHeight() ).intersects( r ) )
- return;
- */
-
- painter.setPen(context.getDefaultColor());
-
- switch (type) {
- case LeftSquareBracket:
- drawCharacter(painter, context, myX, myY, mySize, leftSquareBracketChar);
- break;
- case RightSquareBracket:
- drawCharacter(painter, context, myX, myY, mySize, rightSquareBracketChar);
- break;
- case LeftCurlyBracket:
- drawCharacter(painter, context, myX, myY, mySize, leftCurlyBracketChar);
- break;
- case RightCurlyBracket:
- drawCharacter(painter, context, myX, myY, mySize, rightCurlyBracketChar);
- break;
- case LeftLineBracket:
- case RightLineBracket:
- drawCharacter(painter, context, myX, myY, mySize, verticalLineChar);
- break;
- case SlashBracket:
- drawCharacter(painter, context, myX, myY, mySize, slashChar);
- break;
- case BackSlashBracket:
- drawCharacter(painter, context, myX, myY, mySize, backSlashChar);
- break;
- case LeftCornerBracket:
- drawCharacter(painter, context, myX, myY, mySize, leftAngleBracketChar);
- break;
- case RightCornerBracket:
- drawCharacter(painter, context, myX, myY, mySize, rightAngleBracketChar);
- break;
- case LeftRoundBracket:
- drawCharacter(painter, context, myX, myY, mySize, leftParenthesisChar);
- break;
- case RightRoundBracket:
- drawCharacter(painter, context, myX, myY, mySize, rightParenthesisChar);
- break;
- case EmptyBracket:
- break;
- case Integral:
- case Sum:
- case Product:
- break;
- }
-}
-
-void Artwork::draw(TQPainter& painter, const LuPixelRect& ,
- const ContextStyle& context, ContextStyle::TextStyle tstyle,
- StyleAttributes& style, luPt , const LuPixelPoint& origin)
-{
- luPt mySize = context.getAdjustedSize( tstyle, style.sizeFactor() );
- luPixel myX = origin.x() + getX();
- luPixel myY = origin.y() + getY();
- /*
- if ( !LuPixelRect( myX, myY, getWidth(), getHeight() ).intersects( r ) )
- return;
- */
-
- painter.setPen(context.getDefaultColor());
-
- switch (getType()) {
- case LeftSquareBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigRoundBracket( painter, context, leftSquareBracket, myX, myY, mySize );
- }
- break;
- case RightSquareBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigRoundBracket( painter, context, rightSquareBracket, myX, myY, mySize );
- }
- break;
- case LeftCurlyBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigCurlyBracket( painter, context, leftCurlyBracket, myX, myY, mySize );
- }
- break;
- case RightCurlyBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigCurlyBracket( painter, context, rightCurlyBracket, myX, myY, mySize );
- }
- break;
- case LeftLineBracket: {
- luPixel halfWidth = getWidth()/2;
- drawBigRoundBracket( painter, context, leftLineBracket,
- myX-halfWidth, myY, mySize );
- }
- break;
- case RightLineBracket: {
- luPixel halfWidth = getWidth()/2;
- drawBigRoundBracket( painter, context, rightLineBracket,
- myX-halfWidth, myY, mySize );
- }
- break;
- case SlashBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- break;
- case BackSlashBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- break;
- case LeftCornerBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else drawCharacter(painter, context, myX, myY, mySize, leftAngleBracketChar);
- break;
- case RightCornerBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else drawCharacter(painter, context, myX, myY, mySize, rightAngleBracketChar);
- break;
- case LeftRoundBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigRoundBracket( painter, context, leftRoundBracket, myX, myY, mySize );
- }
- break;
- case RightRoundBracket:
- if ( cmChar != -1 ) {
- drawCMDelimiter( painter, context, myX, myY, mySize );
- }
- else {
- drawBigRoundBracket( painter, context, rightRoundBracket, myX, myY, mySize );
- }
- break;
- case EmptyBracket:
- break;
- case Integral:
- drawCharacter(painter, context, TQFont( "cmex10" ), myX, myY, mySize, cmex_Int);
- break;
- case Sum:
- drawCharacter(painter, context, TQFont( "cmex10" ), myX, myY, mySize, cmex_Sum);
- break;
- case Product:
- drawCharacter(painter, context, TQFont( "cmex10" ), myX, myY, mySize, cmex_Prod);
- break;
- }
-
- // debug
-// painter.setBrush(TQt::NoBrush);
-// painter.setPen(TQt::green);
-// painter.drawRect( context.layoutUnitToPixelX( myX ),
-// context.layoutUnitToPixelY( myY ),
-// context.layoutUnitToPixelX( getWidth() ),
-// context.layoutUnitToPixelY( getHeight() ) );
-}
-
-void Artwork::calcCharSize( const ContextStyle& style, luPt height, TQChar ch )
-{
- calcCharSize( style, style.getMathFont(), height, ch );
-}
-
-
-void Artwork::drawCharacter( TQPainter& painter, const ContextStyle& style,
- luPixel x, luPixel y,
- luPt height, TQChar ch )
-{
- drawCharacter( painter, style, style.getMathFont(), x, y, height, ch );
-}
-
-
-void Artwork::calcCharSize( const ContextStyle& style, TQFont f,
- luPt height, TQChar c )
-{
- f.setPointSizeFloat( style.layoutUnitPtToPt( height ) );
- //f.setPointSize( height );
- TQFontMetrics fm(f);
- setWidth( style.ptToLayoutUnitPt( fm.width( c ) ) );
- LuPixelRect bound = fm.boundingRect( c );
- setHeight( style.ptToLayoutUnitPt( bound.height() ) );
- setBaseline( style.ptToLayoutUnitPt( -bound.top() ) );
-}
-
-
-void Artwork::drawCharacter( TQPainter& painter, const ContextStyle& style,
- TQFont f,
- luPixel x, luPixel y, luPt height, uchar c )
-{
- f.setPointSizeFloat( style.layoutUnitToFontSize( height, false ) );
-
- painter.setFont( f );
- painter.drawText( style.layoutUnitToPixelX( x ),
- style.layoutUnitToPixelY( y+getBaseline() ),
- TQString( TQChar( c ) ) );
-}
-
-
-void Artwork::calcRoundBracket( const ContextStyle& style, const TQChar chars[],
- luPt height, luPt charHeight )
-{
- uchar uppercorner = chars[0];
- uchar lowercorner = chars[1];
- //uchar line = style.symbolTable().character( chars[2] );
-
- TQFont f = style.getBracketFont();
- f.setPointSizeFloat( style.layoutUnitPtToPt( charHeight ) );
- TQFontMetrics fm( f );
- LuPtRect upperBound = fm.boundingRect( uppercorner );
- LuPtRect lowerBound = fm.boundingRect( lowercorner );
- //LuPtRect lineBound = fm.boundingRect( line );
-
- setWidth( style.ptToLayoutUnitPt( fm.width( TQChar( uppercorner ) ) ) );
- luPt edgeHeight = style.ptToLayoutUnitPt( upperBound.height()+lowerBound.height() );
- //luPt lineHeight = style.ptToLayoutUnitPt( lineBound.height() );
-
- //setHeight( edgeHeight + ( ( height-edgeHeight-1 ) / lineHeight + 1 ) * lineHeight );
- setHeight( TQMAX( edgeHeight, height ) );
-}
-
-void Artwork::drawBigRoundBracket( TQPainter& p, const ContextStyle& style, const TQChar chars[],
- luPixel x, luPixel y, luPt charHeight )
-{
- uchar uppercorner = chars[0];
- uchar lowercorner = chars[1];
- uchar line = chars[2];
-
- TQFont f = style.getBracketFont();
- f.setPointSizeFloat( style.layoutUnitToFontSize( charHeight, false ) );
- p.setFont(f);
-
- TQFontMetrics fm(f);
- TQRect upperBound = fm.boundingRect(uppercorner);
- TQRect lowerBound = fm.boundingRect(lowercorner);
- TQRect lineBound = fm.boundingRect(line);
-
- pixel ptX = style.layoutUnitToPixelX( x );
- pixel ptY = style.layoutUnitToPixelY( y );
- pixel height = style.layoutUnitToPixelY( getHeight() );
-
-// p.setPen( TQt::red );
-// //p.drawRect( ptX, ptY, upperBound.width(), upperBound.height() + lowerBound.height() );
-// p.drawRect( ptX, ptY, style.layoutUnitToPixelX( getWidth() ),
-// style.layoutUnitToPixelY( getHeight() ) );
-
-// p.setPen( TQt::black );
- p.drawText( ptX, ptY-upperBound.top(), TQString( TQChar( uppercorner ) ) );
- p.drawText( ptX, ptY+height-lowerBound.top()-lowerBound.height(),
- TQString( TQChar( lowercorner ) ) );
-
- // for printing
- //pt safety = lineBound.height() / 10.0;
- pixel safety = 0;
-
- pixel gap = height - upperBound.height() - lowerBound.height();
- pixel lineHeight = lineBound.height() - safety;
- int lineCount = tqRound( static_cast<double>( gap ) / lineHeight );
- pixel start = upperBound.height()-lineBound.top() - safety;
-
- for (int i = 0; i < lineCount; i++) {
- p.drawText( ptX, ptY+start+i*lineHeight, TQString(TQChar(line)));
- }
- pixel remaining = gap - lineCount*lineHeight;
- pixel dist = ( lineHeight - remaining ) / 2;
- p.drawText( ptX, ptY+height-upperBound.height()+dist-lineBound.height()-lineBound.top(),
- TQString( TQChar( line ) ) );
-}
-
-void Artwork::calcCurlyBracket( const ContextStyle& style, const TQChar chars[],
- luPt height, luPt charHeight )
-{
- uchar uppercorner = chars[0];
- uchar lowercorner = chars[1];
- //uchar line = style.symbolTable().character( chars[2] );
- uchar middle = chars[3];
-
- TQFont f = style.getBracketFont();
- f.setPointSizeFloat( style.layoutUnitPtToPt( charHeight ) );
- TQFontMetrics fm( f );
- LuPtRect upperBound = fm.boundingRect( uppercorner );
- LuPtRect lowerBound = fm.boundingRect( lowercorner );
- //LuPtRect lineBound = fm.boundingRect( line );
- LuPtRect middleBound = fm.boundingRect( middle );
-
- setWidth( style.ptToLayoutUnitPt( fm.width( TQChar( uppercorner ) ) ) );
- luPt edgeHeight = style.ptToLayoutUnitPt( upperBound.height()+
- lowerBound.height()+
- middleBound.height() );
- //luPt lineHeight = style.ptToLayoutUnitPt( lineBound.height() );
-
- //setHeight( edgeHeight + ( ( height-edgeHeight-1 ) / lineHeight + 1 ) * lineHeight );
- setHeight( TQMAX( edgeHeight, height ) );
-}
-
-void Artwork::drawBigCurlyBracket( TQPainter& p, const ContextStyle& style, const TQChar chars[],
- luPixel x, luPixel y, luPt charHeight )
-{
- //TQFont f = style.getSymbolFont();
- TQFont f = style.getBracketFont();
- f.setPointSizeFloat( style.layoutUnitToFontSize( charHeight, false ) );
- p.setFont(f);
-
- uchar uppercorner = chars[0];
- uchar lowercorner = chars[1];
- uchar line = chars[2];
- uchar middle = chars[3];
-
- TQFontMetrics fm(p.fontMetrics());
- TQRect upperBound = fm.boundingRect(uppercorner);
- TQRect lowerBound = fm.boundingRect(lowercorner);
- TQRect middleBound = fm.boundingRect(middle);
- TQRect lineBound = fm.boundingRect(line);
-
- pixel ptX = style.layoutUnitToPixelX( x );
- pixel ptY = style.layoutUnitToPixelY( y );
- pixel height = style.layoutUnitToPixelY( getHeight() );
-
- //p.setPen(TQt::gray);
- //p.drawRect(x, y, upperBound.width() + offset, height);
-
- p.drawText( ptX, ptY-upperBound.top(), TQString( TQChar( uppercorner ) ) );
- p.drawText( ptX, ptY+(height-middleBound.height())/2-middleBound.top(),
- TQString( TQChar( middle ) ) );
- p.drawText( ptX, ptY+height-lowerBound.top()-lowerBound.height(),
- TQString( TQChar( lowercorner ) ) );
-
- // for printing
- // If the world was perfect and the urw-symbol font correct
- // this could be 0.
- //lu safety = lineBound.height() / 10;
- pixel safety = 0;
-
- pixel lineHeight = lineBound.height() - safety;
- pixel gap = height/2 - upperBound.height() - middleBound.height() / 2;
-
- if (gap > 0) {
- TQString ch = TQString(TQChar(line));
- int lineCount = tqRound( gap / lineHeight ) + 1;
-
- pixel start = (height - middleBound.height()) / 2 + safety;
- for (int i = 0; i < lineCount; i++) {
- p.drawText( ptX, ptY-lineBound.top()+TQMAX( start-(i+1)*lineHeight,
- upperBound.width() ),
- ch );
- }
-
- start = (height + middleBound.height()) / 2 - safety;
- for (int i = 0; i < lineCount; i++) {
- p.drawText( ptX, ptY-lineBound.top()+TQMIN( start+i*lineHeight,
- height-upperBound.width()-lineBound.height() ),
- ch );
- }
- }
-}
-
-KFORMULA_NAMESPACE_END