mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[escher] Add a class BurgerMenuView
This commit is contained in:
@@ -5,6 +5,7 @@ escher_src += $(addprefix escher/src/,\
|
||||
app.cpp \
|
||||
bank_view_controller.cpp \
|
||||
buffer_text_view.cpp \
|
||||
burger_menu_view.cpp \
|
||||
button.cpp \
|
||||
button_row_controller.cpp \
|
||||
chevron_view.cpp \
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <escher/alternate_empty_view_delegate.h>
|
||||
#include <escher/bank_view_controller.h>
|
||||
#include <escher/buffer_text_view.h>
|
||||
#include <escher/burger_menu_view.h>
|
||||
#include <escher/button.h>
|
||||
#include <escher/button_row_controller.h>
|
||||
#include <escher/chevron_view.h>
|
||||
|
||||
17
escher/include/escher/burger_menu_view.h
Normal file
17
escher/include/escher/burger_menu_view.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef ESCHER_BURGER_MENU_VIEW_H
|
||||
#define ESCHER_BURGER_MENU_VIEW_H
|
||||
|
||||
#include <escher/view.h>
|
||||
|
||||
class BurgerMenuView : public View {
|
||||
public:
|
||||
BurgerMenuView() : m_backgroundColor(KDColorWhite) {}
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
KDSize minimalSizeForOptimalDisplay() const override;
|
||||
void setBackgroundColor(KDColor color);
|
||||
constexpr static KDCoordinate k_burgerSize = 13;
|
||||
private:
|
||||
KDColor m_backgroundColor;
|
||||
};
|
||||
|
||||
#endif
|
||||
55
escher/src/burger_menu_view.cpp
Normal file
55
escher/src/burger_menu_view.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#include <escher/burger_menu_view.h>
|
||||
#include <kandinsky/color.h>
|
||||
|
||||
const uint8_t sBurgerMask[BurgerMenuView::k_burgerSize][BurgerMenuView::k_burgerSize] = {
|
||||
{0xFF, 0xFF, 0xFF, 0xE0, 0xA5, 0x83, 0x76, 0x83, 0xA5, 0xE0, 0xFF, 0xFF, 0xFF},
|
||||
{0xFF, 0xFD, 0xAF, 0x84, 0xC8, 0xF0, 0xFC, 0xF0, 0xC8, 0x84, 0xAF, 0xFC, 0xFF},
|
||||
{0xFF, 0xAC, 0x9C, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x9C, 0xAC, 0xFF},
|
||||
{0xE1, 0x86, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x86, 0xE1},
|
||||
{0xA6, 0xC8, 0xFF, 0xFF, 0x73, 0x73, 0x73, 0x73, 0x73, 0xFF, 0xFF, 0xC8, 0xA5},
|
||||
{0x81, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x82},
|
||||
{0x73, 0xFC, 0xFF, 0xFF, 0x73, 0x73, 0x73, 0x73, 0x73, 0xFF, 0xFF, 0xFC, 0x76},
|
||||
{0x81, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x82},
|
||||
{0xA5, 0xC8, 0xFF, 0xFF, 0x73, 0x73, 0x73, 0x73, 0x73, 0xFF, 0xFF, 0xC8, 0xA5},
|
||||
{0xE0, 0x87, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x86, 0xE0},
|
||||
{0xFF, 0xB0, 0x9D, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x9D, 0xB0, 0xFF},
|
||||
{0xFF, 0xFC, 0xAF, 0x85, 0xC8, 0xF0, 0xFC, 0xF0, 0xC8, 0x85, 0xAF, 0xFC, 0xFF},
|
||||
{0xFF, 0xFF, 0xFF, 0xE0, 0xA5, 0x82, 0x76, 0x82, 0xA5, 0xE0, 0xFF, 0xFF, 0xFF}
|
||||
};
|
||||
|
||||
const uint8_t sCircleMask[BurgerMenuView::k_burgerSize][BurgerMenuView::k_burgerSize] = {
|
||||
{0xFF, 0xFE, 0xDD, 0x94, 0x4E, 0x1D, 0x03, 0x03, 0x1D, 0x4E, 0x94, 0xDD, 0xFE},
|
||||
{0xFF, 0xDD, 0x7D, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x7D, 0xDD},
|
||||
{0xF2, 0x94, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x94},
|
||||
{0xCC, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E},
|
||||
{0xA5, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D},
|
||||
{0x91, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03},
|
||||
{0x91, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03},
|
||||
{0xA5, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D},
|
||||
{0xCC, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E},
|
||||
{0xF2, 0x94, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x94},
|
||||
{0xFF, 0xDD, 0x7D, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x7D, 0xDD},
|
||||
{0xFF, 0xFE, 0xDD, 0x94, 0x4E, 0x1D, 0x03, 0x03, 0x1D, 0x4E, 0x94, 0xDD, 0xFE},
|
||||
{0xFF, 0xFF, 0xFF, 0xF2, 0xCC, 0xA5, 0x91, 0x91, 0xA4, 0xCC, 0xF2, 0xFF, 0xFF}
|
||||
};
|
||||
|
||||
KDColor sBurgerWorkingBuffer[BurgerMenuView::k_burgerSize*BurgerMenuView::k_burgerSize];
|
||||
|
||||
void BurgerMenuView::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
/* Draw the burger vertically and horizontally centered in the view. */
|
||||
KDCoordinate widthCenter = bounds().width()/2;
|
||||
KDCoordinate heightCenter = bounds().height()/2;
|
||||
KDCoordinate burgerHalfSize = k_burgerSize/2;
|
||||
KDRect frame(widthCenter - burgerHalfSize, heightCenter - burgerHalfSize, k_burgerSize, k_burgerSize);
|
||||
ctx->blendRectWithMask(frame, m_backgroundColor, (const uint8_t *)sCircleMask, sBurgerWorkingBuffer);
|
||||
ctx->blendRectWithMask(frame, KDColorBlack, (const uint8_t *)sBurgerMask, sBurgerWorkingBuffer);
|
||||
}
|
||||
|
||||
KDSize BurgerMenuView::minimalSizeForOptimalDisplay() const {
|
||||
return KDSize(k_burgerSize, k_burgerSize);
|
||||
}
|
||||
|
||||
void BurgerMenuView::setBackgroundColor(KDColor color) {
|
||||
m_backgroundColor = color;
|
||||
markRectAsDirty(bounds());
|
||||
}
|
||||
Reference in New Issue
Block a user