mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
60 lines
2.3 KiB
C++
60 lines
2.3 KiB
C++
#include "function_title_cell.h"
|
|
#include <assert.h>
|
|
#include <algorithm>
|
|
|
|
namespace Shared {
|
|
|
|
void FunctionTitleCell::setOrientation(Orientation orientation) {
|
|
m_orientation = orientation;
|
|
reloadCell();
|
|
}
|
|
|
|
void FunctionTitleCell::setColor(KDColor color) {
|
|
m_functionColor = color;
|
|
reloadCell();
|
|
}
|
|
|
|
void FunctionTitleCell::setBaseline(KDCoordinate baseline) {
|
|
if (m_baseline != baseline) {
|
|
m_baseline = baseline;
|
|
reloadCell();
|
|
}
|
|
}
|
|
|
|
void FunctionTitleCell::drawRect(KDContext * ctx, KDRect rect) const {
|
|
if (m_orientation == Orientation::VerticalIndicator){
|
|
KDColor separatorColor = m_even ? Palette::BackgroundApps : Palette::BackgroundHard;
|
|
KDColor backgroundColor = m_even ? Palette::BackgroundHard : Palette::BackgroundApps;
|
|
// Draw the color indicator
|
|
ctx->fillRect(KDRect(0, 0, k_colorIndicatorThickness, bounds().height()), m_functionColor);
|
|
// Draw the horizontal separator
|
|
ctx->fillRect(KDRect(k_colorIndicatorThickness, bounds().height()-k_separatorThickness, bounds().width()-k_colorIndicatorThickness, k_separatorThickness), separatorColor);
|
|
// Draw some background
|
|
ctx->fillRect(KDRect(bounds().width() - k_equalWidthWithMargins, 0, k_equalWidthWithMargins, bounds().height()-k_separatorThickness), backgroundColor);
|
|
// Draw '='
|
|
KDPoint p = KDPoint(bounds().width() - k_equalWidthWithMargins, m_baseline - font()->glyphSize().height()/2 - 1); // -1 is visually needed
|
|
ctx->drawString("=", p, font(), m_functionColor, backgroundColor);
|
|
} else {
|
|
// Draw the color indicator
|
|
ctx->fillRect(KDRect(0, 0, bounds().width(), k_colorIndicatorThickness), m_functionColor);
|
|
}
|
|
}
|
|
|
|
KDRect FunctionTitleCell::subviewFrame() const {
|
|
if (m_orientation == Orientation::VerticalIndicator) {
|
|
return KDRect(k_colorIndicatorThickness, 0, bounds().width() - k_colorIndicatorThickness - k_equalWidthWithMargins, bounds().height()-k_separatorThickness);
|
|
}
|
|
return KDRect(0, k_colorIndicatorThickness, bounds().width(), bounds().height()-k_colorIndicatorThickness);
|
|
}
|
|
|
|
float FunctionTitleCell::verticalAlignment() const {
|
|
assert(m_orientation == Orientation::VerticalIndicator);
|
|
return std::max(
|
|
0.0f,
|
|
std::min(
|
|
1.0f,
|
|
m_baseline < 0 ? 0.5f : verticalAlignmentGivenExpressionBaselineAndRowHeight(m_baseline, subviewFrame().height())));
|
|
}
|
|
|
|
}
|