Add Bluetooth status icon to reader status bar
Display a Bluetooth icon in the status bar when BLE is connected. Also optimize memory management by lending the framebuffer instead of immediately tearing down BLE when heap is low, allowing BLE to remain active during rendering.
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "I18n.h"
|
||||
#include "RecentBooksStore.h"
|
||||
#include "components/icons/bluetooth.h"
|
||||
#include "components/UITheme.h"
|
||||
#include "components/icons/bookmark.h"
|
||||
#include "fontIds.h"
|
||||
@@ -23,8 +24,10 @@ constexpr int homeMarginTop = 30;
|
||||
constexpr int subtitleY = 738;
|
||||
constexpr int bookmarkStatusIconWidth = 16;
|
||||
constexpr int bookmarkStatusIconHeight = 14;
|
||||
constexpr int bookmarkStatusIconGap = 4;
|
||||
constexpr int bookmarkStatusIconTopCrop = 2;
|
||||
constexpr int bluetoothStatusIconWidth = 16;
|
||||
constexpr int bluetoothStatusIconHeight = 16;
|
||||
constexpr int statusIconGap = 4;
|
||||
|
||||
bool statusBarTextLaneVisible() {
|
||||
return SETTINGS.statusBarChapterPageCount || SETTINGS.statusBarBookProgressPercentage ||
|
||||
@@ -43,6 +46,17 @@ void drawBookmarkStatusIcon(const GfxRenderer& renderer, const int x, const int
|
||||
}
|
||||
}
|
||||
|
||||
void drawBluetoothStatusIcon(const GfxRenderer& renderer, const int x, const int y) {
|
||||
constexpr int bytesPerRow = bluetoothStatusIconWidth / 8;
|
||||
for (int row = 0; row < bluetoothStatusIconHeight; ++row) {
|
||||
for (int col = 0; col < bluetoothStatusIconWidth; ++col) {
|
||||
const uint8_t byte = BluetoothStatusIcon[row * bytesPerRow + col / 8];
|
||||
const uint8_t mask = 1U << (7 - (col % 8));
|
||||
renderer.drawPixel(x + col, y + row, (byte & mask) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void BaseTheme::drawBatteryOutline(const GfxRenderer& renderer, int x, int y, int battWidth, int rectHeight) {
|
||||
@@ -749,7 +763,8 @@ void BaseTheme::fillPopupProgress(const GfxRenderer& renderer, const Rect& layou
|
||||
|
||||
void BaseTheme::drawStatusBar(GfxRenderer& renderer, const float bookProgress, const int currentPage,
|
||||
const int pageCount, std::string title, const int paddingBottom, const int textYOffset,
|
||||
const bool fillMargin, const bool isPageBookmarked, const bool pageCountEstimated) const {
|
||||
const bool fillMargin, const bool isPageBookmarked, const bool pageCountEstimated,
|
||||
const bool bluetoothConnected) const {
|
||||
auto metrics = UITheme::getInstance().getMetrics();
|
||||
int orientedMarginTop, orientedMarginRight, orientedMarginBottom, orientedMarginLeft;
|
||||
renderer.getOrientedViewableTRBL(&orientedMarginTop, &orientedMarginRight, &orientedMarginBottom,
|
||||
@@ -845,9 +860,17 @@ void BaseTheme::drawStatusBar(GfxRenderer& renderer, const float bookProgress, c
|
||||
}
|
||||
}
|
||||
|
||||
// Draw Bookmark
|
||||
// Draw status icons
|
||||
if (showStatusBarTextLane && bluetoothConnected) {
|
||||
const int bluetoothGap = leftClusterWidth > 0 ? statusIconGap : 0;
|
||||
const int bluetoothX = leftClusterX + leftClusterWidth + bluetoothGap;
|
||||
const int bluetoothY = textY + 3;
|
||||
drawBluetoothStatusIcon(renderer, bluetoothX, bluetoothY);
|
||||
leftClusterWidth += bluetoothStatusIconWidth + bluetoothGap;
|
||||
}
|
||||
|
||||
if (showStatusBarTextLane && isPageBookmarked) {
|
||||
const int bookmarkGap = leftClusterWidth > 0 ? bookmarkStatusIconGap : 0;
|
||||
const int bookmarkGap = leftClusterWidth > 0 ? statusIconGap : 0;
|
||||
const int bookmarkX = leftClusterX + leftClusterWidth + bookmarkGap;
|
||||
const int bookmarkY = textY + 5;
|
||||
drawBookmarkStatusIcon(renderer, bookmarkX, bookmarkY);
|
||||
|
||||
Reference in New Issue
Block a user