From 8b758027469920e554ce0f17fb5648cc5efe8252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 20 Sep 2018 17:21:34 +0200 Subject: [PATCH] [calculation] Don't recompute HistoryViewCell layout if same calculation --- apps/calculation/calculation.cpp | 5 +++++ apps/calculation/calculation.h | 1 + apps/calculation/history_view_cell.cpp | 5 +++++ apps/calculation/history_view_cell.h | 1 + 4 files changed, 12 insertions(+) diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index f056918b1..a1fe11bb1 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -21,6 +21,11 @@ Calculation::Calculation() : { } +bool Calculation::operator==(const Calculation& c) { + return strcmp(m_inputText, c.m_inputText) == 0 + && strcmp(m_approximateOutputText, c.m_approximateOutputText) == 0; +} + void Calculation::reset() { m_inputText[0] = 0; m_exactOutputText[0] = 0; diff --git a/apps/calculation/calculation.h b/apps/calculation/calculation.h index 1f9b112ea..95b10336c 100644 --- a/apps/calculation/calculation.h +++ b/apps/calculation/calculation.h @@ -16,6 +16,7 @@ public: Equal }; Calculation(); + bool operator==(const Calculation& c); /* c.reset() is the equivalent of c = Calculation() without copy assingment. */ void reset(); void setContent(const char * c, Poincare::Context * context, Poincare::Expression ansExpression); diff --git a/apps/calculation/history_view_cell.cpp b/apps/calculation/history_view_cell.cpp index 2162786b5..3db472b29 100644 --- a/apps/calculation/history_view_cell.cpp +++ b/apps/calculation/history_view_cell.cpp @@ -9,6 +9,7 @@ namespace Calculation { HistoryViewCell::HistoryViewCell(Responder * parentResponder) : Responder(parentResponder), + m_calculation(nullptr), m_inputLayout(), m_exactOutputLayout(), m_approximateOutputLayout(), @@ -94,6 +95,10 @@ void HistoryViewCell::layoutSubviews() { } void HistoryViewCell::setCalculation(Calculation * calculation) { + if (m_calculation != nullptr && *calculation == *m_calculation) { + return; + } + m_calculation = calculation; m_inputLayout = calculation->createInputLayout(); m_inputView.setLayout(m_inputLayout); App * calculationApp = (App *)app(); diff --git a/apps/calculation/history_view_cell.h b/apps/calculation/history_view_cell.h index 401c3ebf4..0892cba9b 100644 --- a/apps/calculation/history_view_cell.h +++ b/apps/calculation/history_view_cell.h @@ -36,6 +36,7 @@ public: Shared::ScrollableExactApproximateExpressionsView * outputView(); private: constexpr static KDCoordinate k_resultWidth = 80; + Calculation * m_calculation; Poincare::Layout m_inputLayout; Poincare::Layout m_exactOutputLayout; Poincare::Layout m_approximateOutputLayout;