Files
MuditaOS/module-gui/gui/core/Renderer.cpp
Adam Wulkiewicz 49bbaf51a0 [MOS-550] Improve refresh of the display
1. Implement partial refresh.
2. Implement refresh canceling mechanism.
3. Refactor some parts of the gui and display code.

ad 1.
- Detect parts of the screen changed since last update and merge them
  into bigger regions. These regions defines parts of the context sent
  to the display.
- Refresh the region covering all of the parts since this is the most
  time consuming part and the size of the refreshed region doesn't
  change the time much.
- Refresh the whole screen if deep refresh is requested and previously
  fast refresh was used. This is needed to prevent unwanted artifacts
  in some cases.

ad 2.
- Separate display update and refresh logic.
- Divide image display message handling into two handlers, one updating
  and other one refreshing the screen.
- Add cancel refresh message and use it to cancel refresh during update.
- Store sum of refresh regions gathered during updates to refresh them
  all at once at the end.
2022-10-11 20:00:33 +02:00

34 lines
775 B
C++

// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
// for memset
#include "Renderer.hpp"
#include "Context.hpp"
// renderer
#include "renderers/PixelRenderer.hpp"
namespace gui
{
void Renderer::changeColorScheme(const std::unique_ptr<ColorScheme> &scheme) const
{
renderer::PixelRenderer::updateColorScheme(scheme);
}
void Renderer::render(Context *ctx, const std::list<std::unique_ptr<DrawCommand>> &commands) const
{
if (ctx == nullptr) {
return;
}
for (auto &cmd : commands) {
if (cmd == nullptr) {
continue;
}
cmd->draw(ctx);
}
}
} /* namespace gui */