mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-20 15:07:17 -04:00
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.
34 lines
775 B
C++
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 */
|