You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kbruch/src/fractionbasewidget.cpp

169 lines
5.2 KiB

/***************************************************************************
fractionbasewidget.cpp - base fraction painting
-------------------
begin : 2004/05/30
copyright : (C) 2004 by Sebastian Stein
email : seb.kde@hpfsc.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "fractionbasewidget.h"
#include "fractionbasewidget.moc"
/* these includes are needed for KDE support */
#include <tdeglobalsettings.h>
/* these includes are needed for TQt support */
#include <tqpainter.h>
#include "settingsclass.h"
FractionBaseWidget::FractionBaseWidget(TQWidget * parent, const char * name) :
TQWidget(parent, name)
{
#ifdef DEBUG
kdDebug() << "constructor FractionBaseWidget" << endl;
#endif
// set colors and font used for task displaying
setColorAndFont();
}
FractionBaseWidget::~FractionBaseWidget()
{
#ifdef DEBUG
kdDebug() << "destructor FractionBaseWidget" << endl;
#endif
}
void FractionBaseWidget::updateAndRepaint()
{
setColorAndFont();
update();
}
void FractionBaseWidget::paintRatio(TQPainter & paint, ratio tmp_ratio, int & x_pos, TQFontMetrics & fm, bool show_mixed, bool addMargin)
{
TQPen pen = paint.pen(); // get the pen
int fontHeight = fm.lineSpacing(); // get the font height
int int_numerator, int_denominator, int_mixed;
TQString str_numerator, str_denominator;
TQString str_mixed;
int fontWidth; // to store the width of the last thing painted
int tmp_int;
// check if we have to show the ratio as mixed number
// 11 1
// if yes, -- becomes 2 -
// 5 5
int_numerator = tmp_ratio.numerator();
int_denominator = tmp_ratio.denominator();
if (show_mixed == true && TQABS(int_numerator) >= TQABS(int_denominator))
{
// calculate the mixed number
int_mixed = int(int_numerator / int_denominator);
// the negative sign is in front of the mixed number
int_numerator = TQABS(int_numerator);
int_denominator = TQABS(int_denominator);
// we have to reduce the numerator by the mixed number * denominator
int_numerator = int_numerator % int_denominator;
// now we can convert the numbers into strings for painting
str_mixed.setNum(int_mixed);
str_numerator.setNum(int_numerator);
str_denominator.setNum(int_denominator);
// paint the front part of the mixed number
paintMiddle(paint, str_mixed, x_pos, fm, m_colorNumber);
} else {
// don't show the ratio as mixed number
str_numerator.setNum(int_numerator);
str_denominator.setNum(int_denominator);
} // if (show_mixed == true && TQABS(int_numerator) > TQABS(int_denominator))
// get the text width of the current ratio
fontWidth = fm.width(str_numerator);
tmp_int = fm.width(str_denominator);
if (tmp_int > fontWidth)
fontWidth = tmp_int;
// show numerator and denominator in m_colorNumber
pen.setColor(m_colorNumber);
paint.setPen(pen);
// make sure we don't display something like: 0
// 7 -
// 3
if (! (int_numerator == 0 && show_mixed == true) )
{
// paint the numerator
paint.drawText(x_pos, 0, fontWidth, fontHeight, AlignCenter, str_numerator);
// paint the fraction line between numerator and denominator
paint.fillRect(x_pos, fontHeight + 4, fontWidth, 2, m_colorLine);
// paint the denominator
paint.drawText(x_pos, fontHeight + 10, fontWidth, fontHeight, AlignCenter, str_denominator);
// move the x position to the right by adding the width used for painting
// the ratio and a margin
x_pos += fontWidth;
if (addMargin == true)
x_pos += _MARGIN_X;
}
return;
}
void FractionBaseWidget::paintMiddle(TQPainter & paint, const TQString& paint_str, int & x_pos, TQFontMetrics & fm, TQColor color, bool addMargin)
{
// get the pen, font height and font width
TQPen pen = paint.pen();
int fontHeight = fm.lineSpacing();
int fontWidth = fm.width(paint_str);
// paint the string
pen.setColor(color);
paint.setPen(pen);
paint.drawText(x_pos, fontHeight + 5 - fontHeight / 2, fontWidth, fontHeight, AlignCenter, paint_str);
// move the x position to the right by adding the width used for
// painting the string and a margin
x_pos += fontWidth;
if (addMargin == true)
x_pos += _MARGIN_X;
return;
}
void FractionBaseWidget::setColorAndFont()
{
/* set colors */
m_colorNumber = SettingsClass::numberColor();
m_colorLine = SettingsClass::fractionBarColor();
m_colorOperation = SettingsClass::operationColor();
/* set font */
m_font = SettingsClass::taskFont();
// repaint
update();
return;
}