Button_Rect

Beschreibung

Diese Klasse erzeugt Button in rechteckiger Form. Dabei können die Ecken auch abgerundet sein.

Beispielbilder

Diese Bilder dienen nur der Veranschaulichung, wie Objekte dieser Klasse aussehen können.

../_images/button_rect-ex-1.jpg
new Button_Rect("", COLOR_GREEN + COLOR_RED, 2, 4, TML_empty_switch)
../_images/button_rect-ex-2.jpg
new Button_Rect("Hello World", COLOR_BLUE, 2, 12, TML_empty_button)

Funktionen

RectButton (const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value)

RectButton (const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value))

RectButton (const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value)

RectButton (const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

RectButton (const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value)

RectButton (const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

RectButton (const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value)

RectButton (const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

~RectButton ()

void

draw () override

uint16_t

getHeight ()

uint16_t

getWidth ()

bool

checkSize () override

Variablen und Konstanten

const „Color

color

Item*

itemOn

Item*

itemOff

const uint8_t

borderRadius

const uint8_t

borderSize

Funktionen Beschreibung

RectButton(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value):
2    Button(button_callback, value),
3    color(color),
4    itemOn(Display::createItem(itemOn, color.getItemColor())),
5    itemOff(Display::createItem(itemOff, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Button (keinen Switch) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Item für die aktivierte (itemOn) und deaktivierte (itemOff) Form des Buttons, eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Button Callback Funktion (button_callback) (siehe button_callback), sowie dem value, der angibt, ob der Button aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit itemOn und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit ItemOff und color.getItemColor().

RectButton(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value):
2    Button(button_callback, longpress_callback, value),
3    color(color),
4    itemOn(Display::createItem(itemOn, color.getItemColor())),
5    itemOff(Display::createItem(itemOff, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Button (keinen Switch) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Item für die aktivierte (itemOn) und deaktivierte (itemOff) Form des Buttons, eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Button Callback Funktion (button_callback) (siehe button_callback), eine Longpress Callback Funktion (longpress_callback) (siehe longpress_callback), sowie dem value, der angibt, ob der Button aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit itemOn und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit ItemOff und color.getItemColor().

RectButton(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value):
2    Button(switch_callback, value),
3    color(color),
4    itemOn(Display::createItem(itemOn, color.getItemColor())),
5    itemOff(Display::createItem(itemOff, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Switch (keinen Button) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Item für die aktivierte (itemOn) und deaktivierte (itemOff) Form des Switches, eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Switch Callback Funktion (switch_callback) (siehe switch_callback), sowie dem value, der angibt, ob der Switch aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit itemOn und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit ItemOff und color.getItemColor().

RectButton(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* itemOn, const char* itemOff, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value):
2    Button(switch_callback, longpress_callback, value),
3    color(color),
4    itemOn(Display::createItem(itemOn, color.getItemColor())),
5    itemOff(Display::createItem(itemOff, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Switch (keinen Button) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Item für die aktivierte (itemOn) und deaktivierte (itemOff) Form des Switches, eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Switch Callback Funktion (switch_callback) (siehe switch_callback), eine Longpress Callback Funktion (longpress_callback) (siehe longpress_callback), sowie dem value, der angibt, ob der Button aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit itemOn und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit ItemOff und color.getItemColor().

RectButton(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, ExternalButtonValue* const value):
2    Button(button_callback, value),
3    color(color),
4    itemOn(Display::createItem(item, color.getItemColor())),
5    itemOff(Display::createItem(item, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Button (keinen Switch) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Items, welche für sowohl die aktivierte und deaktivierte Form des Buttons verwendet wird (item), eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Button Callback Funktion (button_callback) (siehe button_callback), sowie dem value, der angibt, ob der Button aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit item und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit item und color.getItemColor().

RectButton(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void()> button_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value):
2    Button(button_callback, longpress_callback, value),
3    color(color),
4    itemOn(Display::createItem(item, color.getItemColor())),
5    itemOff(Display::createItem(item, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Button (keinen Switch) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Items, welche für sowohl die aktivierte und deaktivierte Form des Buttons verwendet wird (item), eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Button Callback Funktion (button_callback) (siehe button_callback), eine Longpress Callback Funktion (longpress_callback) (siehe longpress_callback), sowie dem value, der angibt, ob der Button aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit item und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit Item und color.getItemColor().

RectButton(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, ExternalButtonValue* const value):
2    Button(switch_callback, value),
3    color(color),
4    itemOn(Display::createItem(item, color.getItemColor())),
5    itemOff(Display::createItem(item, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Switch (keinen Button) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Items, welche für sowohl die aktivierte und deaktivierte Form des Switches verwendet wird (item), eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Switch Callback Funktion (switch_callback) (siehe switch_callback), sowie dem value, der angibt, ob der Switch aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit item und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit Item und color.getItemColor().

RectButton(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value)

1Button_Rect::Button_Rect(const char* item, const Color& color, const uint8_t borderSize, const uint8_t borderRadius, const std::function<void(bool)> switch_callback, const std::function<void()> longpress_callback, ExternalButtonValue* const value):
2    Button(switch_callback, longpress_callback, value),
3    color(color),
4    itemOn(Display::createItem(item, color.getItemColor())),
5    itemOff(Display::createItem(item, color.getSecondaryItemColor())),
6    borderRadius(borderRadius),
7    borderSize(borderSize)
8    {}

Diese Funktion ist ein Konstruktor, der einen eckigen Switch (keinen Button) erzeugt. Als Parameter nimmt der Konstruktor einen String für ein Erzeugung eines Items, welche für sowohl die aktivierte und deaktivierte Form des Switches verwendet wird (item), eine Farbe (color), die Breite der Umrandung (borderSize), den gewünschten Krümmungsradius der Ecken (borderRadius), eine Switch Callback Funktion (switch_callback) (siehe switch_callback), eine Longpress Callback Funktion (longpress_callback) (siehe longpress_callback), sowie dem value, der angibt, ob der Switch aktiviert ist oder nicht.

In der Initialisierungsliste wird zum einen dieser Button Konstruktor aufgerufen, zum anderen erfolgt die Initialisierung von color, borderRadius und borderSize mit den korrespondierenden Parametern. Für die Initialisierung von itemOn erfolgt ein Funktionsaufruf von createItem mit item und color.getItemColor() und für itemOff erfolgt ebenfalls ein Funktionsaufruf von createItem, aber diesmal mit Item und color.getItemColor().

~RectButton()

1Button_Rect::~Button_Rect() {
2    delete itemOn;
3    delete itemOff;
4}

Dieser Destruktor löscht die itemOn und itemOff Objekte und gibt den allokierten Speicherplatz wieder frei.

void draw() override

 1void Button_Rect::draw() {
 2    if (value){
 3        display->rect_center(posX + sizeX/2, posY + sizeY/2, sizeX - t, sizeY - t, borderSize, borderRadius, color.getBorderColor(), color);
 4        
 5        if (externalValue && externalValue->hasItemOn()) display->drawItem(posX + sizeX/2, posY + sizeY/2, externalValue->getItemOn());
 6        else display->drawItem(posX + sizeX/2, posY + sizeY/2, itemOn);
 7
 8    } else {
 9        display->rect_center(posX + sizeX/2, posY + sizeY/2, sizeX - t, sizeY - t, borderSize, borderRadius, color.getSecondaryBorderColor(), color.getSecondaryColor());
10        
11        if (externalValue && externalValue->hasItemOff()) display->drawItem(posX + sizeX/2, posY + sizeY/2, externalValue->getItemOff());
12        else display->drawItem(posX + sizeX/2, posY + sizeY/2, itemOff);
13    }
14}

Diese Funktion zeichnet Objekte der Button_Rect Klasse auf display.

    if (value){

Dafür wird zuerst geprüft, ob value true ist, also ob der Button sich im angeschalteten Zustand befindet.

        display->rect_center(posX + sizeX/2, posY + sizeY/2, sizeX - t, sizeY - t, borderSize, borderRadius, color.getBorderColor(), color);
        
        if (externalValue && externalValue->hasItemOn()) display->drawItem(posX + sizeX/2, posY + sizeY/2, externalValue->getItemOn());
        else display->drawItem(posX + sizeX/2, posY + sizeY/2, itemOn);

Wenn ja, wird mit auf dem display die rect_center Funktion aufgerufen und die Grundform des Button_Rect Objektes gezeichnet. Sollte zudem ein externalValue mit einem Item (hasItemOn) existieren, so wird das itemOn des externalValue mit drawItem gezeichnet. Andernfalls wird das itemOn des Objektes gezeichnet auf das Rechteck gezeichnet.

    } else {
        display->rect_center(posX + sizeX/2, posY + sizeY/2, sizeX - t, sizeY - t, borderSize, borderRadius, color.getSecondaryBorderColor(), color.getSecondaryColor());
        
        if (externalValue && externalValue->hasItemOff()) display->drawItem(posX + sizeX/2, posY + sizeY/2, externalValue->getItemOff());
        else display->drawItem(posX + sizeX/2, posY + sizeY/2, itemOff);
    }

Ist value hingegen false, wird der Button in seinem asugeschalteten Zustand gezeichnet. Der Ablauf ist ähnlich wie im vorherigen Absatz.

uint16_t getHeight()

1uint16_t Button_Rect::getHeight(){
2    return sizeX;
3}

Gibt sizeX aus.

uint16_t getWidth()

1uint16_t Button_Rect::getWidth(){
2    return sizeY;
3}

Gibt sizeY aus.

bool checkSize(uint16_t sizeX, uint16_t sizeY, uint8_t rotation) override

1bool Button_Rect::checkSize(uint16_t sizeX, uint16_t sizeY, uint8_t rotation) {
2    // TODO: anpassen
3    const uint8_t offset = t - borderSize*2;
4    itemOn->setResolution(sizeX - offset, sizeY - offset);
5    itemOff->setResolution(sizeX - offset, sizeY - offset);
6    return sizeX > 30 && sizeY > 30;
7}

Diese Funktion überprüft, ob Objekte der Button_Rect Klasse zeichenbar sind, oder zu klein sind, um sie anzuzeigen. Außerdem legt sie Auflösung bzw. Größe von itemOn und itemOff auf dem Objekt fest. Die Parameter der Funktion sind die Höhe (sizeY) und Breite des Objektes (sizeX).

    const uint8_t offset = t - borderSize*2;

Dafür wird zuerst ein offset berechnet, welcher den Abstand zwischen den Items itemOn und itemOff zur Umrandung des Objektes festlegt.

    itemOn->setResolution(sizeX - offset, sizeY - offset);
    itemOff->setResolution(sizeX - offset, sizeY - offset);

Mithilfe von offset wird nun die Auflösung der beiden Items durch den Funktionsaufruf von itemsetresolution bestimmt.

    return sizeX > 30 && sizeY > 30;

Sollte jedoch sizeX > 30 && sizeY > 30 nicht gelten, so ist das Objekt nicht groß genug, um es auf dem Display anzuzeigen. Die Funktion gibt false zurück.

Variablen und Konstanten Beschreibung

const Color color

Die Farbe (Color) des Objektes.

Item* itemOn

Das Item (Item), das auf dem Objekt im angeschalteten Zustand angezeigt wird.

Item* itemOff

Das Item (Item), das auf dem Objekt im ausgeschalteten Zustand angezeigt wird.

const uint8_t borderRadius

Gibt den Krümmungsgrad der Ecken des Rechteckes (also der Grundform des Objeketes) an.

const uint8_t borderSize

Gibt an, wie dick die Umrandung ist.