Added a new compact result display mode

This commit is contained in:
0b101
2020-02-21 16:08:55 -06:00
committed by EmilieNumworks
parent 67fc7502e2
commit b48d3d6e4a
6 changed files with 51 additions and 21 deletions

View File

@@ -134,6 +134,10 @@ KDCoordinate Calculation::height(Context * context, bool expanded, bool allExpre
// Get input height
Layout inputLayout = createInputLayout();
KDCoordinate inputHeight = inputLayout.layoutSize().height();
KDCoordinate inputWidth = inputLayout.layoutSize().width();
float singleMargin = 2 * Metric::CommonSmallMargin;
float doubleMargin = 4 * Metric::CommonSmallMargin;
bool singleLine = false;
KDCoordinate inputBaseline = inputLayout.baseline();
// Get exact output height if needed
@@ -155,11 +159,18 @@ KDCoordinate Calculation::height(Context * context, bool expanded, bool allExpre
if (displayOutput(context) == DisplayOutput::ExactOnly) {
KDCoordinate exactOutputHeight = exactLayout.layoutSize().height();
if (allExpressionsInline) {
KDCoordinate exactOutputWidth = exactLayout.layoutSize().width();
singleLine = exactOutputWidth + inputWidth < maxWidth - 2;
if (singleLine && !allExpressionsInline) {
KDCoordinate exactOutputBaseline = exactLayout.baseline();
result = std::max(inputBaseline, exactOutputBaseline) + std::max(inputHeight - inputBaseline, exactOutputHeight-exactOutputBaseline);
result = std::max(inputBaseline, exactOutputBaseline) + std::max(inputHeight - inputBaseline, exactOutputHeight-exactOutputBaseline) + singleMargin;
} else {
result = inputHeight+exactOutputHeight;
if (allExpressionsInline) {
KDCoordinate exactOutputBaseline = exactLayout.baseline();
result = std::max(inputBaseline, exactOutputBaseline) + std::max(inputHeight - inputBaseline, exactOutputHeight-exactOutputBaseline);
} else {
result = inputHeight + exactOutputHeight + doubleMargin;
}
}
} else {
bool couldNotCreateApproximateLayout = false;
@@ -181,23 +192,37 @@ KDCoordinate Calculation::height(Context * context, bool expanded, bool allExpre
}
KDCoordinate approximateOutputHeight = approximateLayout.layoutSize().height();
KDCoordinate approximateOutputWidth = approximateLayout.layoutSize().width();
singleLine = approximateOutputWidth + inputWidth < maxWidth;
if (displayOutput(context) == DisplayOutput::ApproximateOnly || (!expanded && displayOutput(context) == DisplayOutput::ExactAndApproximateToggle)) {
if (allExpressionsInline) {
if (singleLine && !allExpressionsInline) {
KDCoordinate approximateOutputBaseline = approximateLayout.baseline();
result = std::max(inputBaseline, approximateOutputBaseline) + std::max(inputHeight - inputBaseline, approximateOutputHeight-approximateOutputBaseline);
result = std::max(inputBaseline, approximateOutputBaseline) + std::max(inputHeight - inputBaseline, approximateOutputHeight-approximateOutputBaseline) + singleMargin;
} else {
result = inputHeight+approximateOutputHeight;
if (allExpressionsInline) {
KDCoordinate approximateOutputBaseline = approximateLayout.baseline();
result = std::max(inputBaseline, approximateOutputBaseline) + std::max(inputHeight - inputBaseline, approximateOutputHeight-approximateOutputBaseline);
} else {
result = inputHeight + approximateOutputHeight + doubleMargin;
}
}
} else {
assert(displayOutput(context) == DisplayOutput::ExactAndApproximate || (displayOutput(context) == DisplayOutput::ExactAndApproximateToggle && expanded));
KDCoordinate exactOutputHeight = exactLayout.layoutSize().height();
KDCoordinate exactOutputBaseline = exactLayout.baseline();
KDCoordinate exactOutputWidth = exactLayout.layoutSize().width();
KDCoordinate approximateOutputWidth = approximateLayout.layoutSize().width();
singleLine = exactOutputWidth + approximateOutputWidth + inputWidth < maxWidth - 30; // the 30 represents the = sign (example: sin(30))
KDCoordinate approximateOutputBaseline = approximateLayout.baseline();
if (allExpressionsInline) {
result = std::max(inputBaseline, std::max(exactOutputBaseline, approximateOutputBaseline)) + std::max(inputHeight - inputBaseline, std::max(exactOutputHeight - exactOutputBaseline, approximateOutputHeight-approximateOutputBaseline));
if (singleLine && !allExpressionsInline) {
result = std::max(inputBaseline, std::max(exactOutputBaseline, approximateOutputBaseline)) + std::max(inputHeight - inputBaseline, std::max(exactOutputHeight - exactOutputBaseline, approximateOutputHeight-approximateOutputBaseline)) + singleMargin;
} else {
KDCoordinate outputHeight = std::max(exactOutputBaseline, approximateOutputBaseline) + std::max(exactOutputHeight-exactOutputBaseline, approximateOutputHeight-approximateOutputBaseline);
result = inputHeight + outputHeight;
if (allExpressionsInline) {
result = std::max(inputBaseline, std::max(exactOutputBaseline, approximateOutputBaseline)) + std::max(inputHeight - inputBaseline, std::max(exactOutputHeight - exactOutputBaseline, approximateOutputHeight-approximateOutputBaseline));
} else {
KDCoordinate outputHeight = std::max(exactOutputBaseline, approximateOutputBaseline) + std::max(exactOutputHeight-exactOutputBaseline, approximateOutputHeight-approximateOutputBaseline);
result = inputHeight + outputHeight + doubleMargin;
}
}
}
}

View File

@@ -95,6 +95,7 @@ public:
// Additional Information
AdditionalInformationType additionalInformationType(Poincare::Context * context);
private:
static constexpr int maxWidth = Ion::Display::Width - (Metric::CommonSmallMargin * 2) - Metric::EllipsisCellWidth - 48; // 48 is the difference history_view_cell's width and calculation's
static constexpr int k_numberOfExpressions = 4;
static constexpr KDCoordinate k_heightComputationFailureHeight = 50;
static constexpr const char * k_maximalIntegerWithAdditionalInformation = "10000000000000000";

View File

@@ -208,7 +208,7 @@ KDCoordinate HistoryController::rowHeight(int j) {
return 0;
}
Shared::ExpiringPointer<Calculation> calculation = calculationAtIndex(j);
return calculation->height(App::app()->localContext(), j == selectedRow() && selectedSubviewType() == SubviewType::Output) + 4 * Metric::CommonSmallMargin;
return calculation->height(App::app()->localContext(), j == selectedRow() && selectedSubviewType() == SubviewType::Output);
}
int HistoryController::typeAtLocation(int i, int j) {

View File

@@ -38,7 +38,7 @@ private:
CalculationSelectableTableView * selectableTableView();
bool calculationAtIndexToggles(int index);
void historyViewCellDidChangeSelection(HistoryViewCell ** cell, HistoryViewCell ** previousCell, int previousSelectedCellX, int previousSelectedCellY, SubviewType type, SubviewType previousType) override;
constexpr static int k_maxNumberOfDisplayedRows = 5;
constexpr static int k_maxNumberOfDisplayedRows = 8;
CalculationSelectableTableView m_selectableTableView;
HistoryViewCell m_calculationHistory[k_maxNumberOfDisplayedRows];
CalculationStore * m_calculationStore;

View File

@@ -178,18 +178,22 @@ void HistoryViewCell::layoutSubviews(bool force) {
m_ellipsis.setFrame(KDRectZero, force); // Required to mark previous rect as dirty
}
KDSize inputSize = m_inputView.minimalSizeForOptimalDisplay();
KDSize outputSize = m_scrollableOutputView.minimalSizeForOptimalDisplay();
int singleLine = outputSize.width() + inputSize.width() < Ion::Display::Width - (Metric::CommonSmallMargin * 2) - Metric::EllipsisCellWidth;
int inputHeight = (singleLine && inputSize.height() < outputSize.height()) ? (outputSize.height() - inputSize.height()) : 0;
m_inputView.setFrame(KDRect(
0, 0,
0,
inputHeight,
std::min(maxFrameWidth, inputSize.width()),
inputSize.height()),
force);
KDSize outputSize = m_scrollableOutputView.minimalSizeForOptimalDisplay();
int outputHeight = singleLine ? std::max(0, inputSize.height() - outputSize.height()) / 2 + std::max(0, (inputSize.height() - outputSize.height()) / 2) + 1 : inputSize.height();
m_scrollableOutputView.setFrame(KDRect(
std::max(0, maxFrameWidth - outputSize.width()),
inputSize.height(),
std::min(maxFrameWidth, outputSize.width()),
outputSize.height()),
force);
std::max(0, maxFrameWidth - outputSize.width()),
outputHeight,
std::min(maxFrameWidth, outputSize.width()),
outputSize.height()),
force);
}
void HistoryViewCell::resetMemoization() {

View File

@@ -10,8 +10,8 @@ public:
constexpr static KDCoordinate CommonRightMargin = 20;
constexpr static KDCoordinate CommonTopMargin = 15;
constexpr static KDCoordinate CommonBottomMargin = 15;
constexpr static KDCoordinate CommonLargeMargin = 10;
constexpr static KDCoordinate CommonSmallMargin = 5;
constexpr static KDCoordinate CommonLargeMargin = 12;
constexpr static KDCoordinate CommonSmallMargin = 12;
constexpr static KDCoordinate TitleBarExternHorizontalMargin = 5;
constexpr static KDCoordinate TitleBarHeight = 18;
constexpr static KDCoordinate ParameterCellHeight = 35;