mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-07-19 04:24:05 -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.
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include "EinkMessage.hpp"
|
|
#include "ImageMessage.hpp"
|
|
|
|
namespace service::eink
|
|
{
|
|
ImageMessage::ImageMessage(int contextId, ::gui::Context *context, ::gui::RefreshModes refreshMode)
|
|
: contextId{contextId}, context{context}, refreshMode{refreshMode}
|
|
{}
|
|
|
|
auto ImageMessage::getContext() noexcept -> ::gui::Context *
|
|
{
|
|
return context;
|
|
}
|
|
|
|
auto ImageMessage::getRefreshMode() const noexcept -> ::gui::RefreshModes
|
|
{
|
|
return refreshMode;
|
|
}
|
|
|
|
auto ImageMessage::getContextId() const noexcept -> int
|
|
{
|
|
return contextId;
|
|
}
|
|
|
|
ImageDisplayedNotification::ImageDisplayedNotification(int contextId) : contextId{contextId}
|
|
{}
|
|
|
|
auto ImageDisplayedNotification::getContextId() const noexcept -> int
|
|
{
|
|
return contextId;
|
|
}
|
|
|
|
RefreshMessage::RefreshMessage(int contextId,
|
|
hal::eink::EinkFrame refreshFrame,
|
|
hal::eink::EinkRefreshMode refreshMode,
|
|
const std::string &originalSender)
|
|
: contextId(contextId), refreshFrame(refreshFrame), refreshMode(refreshMode), originalSender(originalSender)
|
|
{}
|
|
|
|
auto RefreshMessage::getContextId() const noexcept -> int
|
|
{
|
|
return contextId;
|
|
}
|
|
auto RefreshMessage::getRefreshFrame() noexcept -> hal::eink::EinkFrame
|
|
{
|
|
return refreshFrame;
|
|
}
|
|
auto RefreshMessage::getRefreshMode() const noexcept -> hal::eink::EinkRefreshMode
|
|
{
|
|
return refreshMode;
|
|
}
|
|
auto RefreshMessage::getOriginalSender() const noexcept -> const std::string &
|
|
{
|
|
return originalSender;
|
|
}
|
|
|
|
} // namespace service::eink
|