# Input

## Mus

For å finne ut hvor i vinduet musen befinner seg brukes det `get_mouse_coordinates()` funksjonen:

    TDT4102::Point TDT4102::AnimationWindow::get_mouse_coordinates();

Merk at `TDT4102::AnimationWindow::` betyr at funksjonen er et medlemsfunksjon av `TDT4102::AnimationWindow` klassen. Funksjonen returnerer en instans av `TDT4102::Point` som representerer koordinatene hvor musen peker til relativ til øverst venstre hjørnet av vinduet (akkurat det samme koordinatsystem som brukes til tegning). Her er et eksempel som visualiserer koordinatene musene peker på:

    #include "AnimationWindow.h"

    int main() {
        TDT4102::AnimationWindow window;

        while(!window.should_close()) {
            TDT4102::Point mouseCoordinates = window.get_mouse_coordinates();

            std::string coordinateText = std::to_string(mouseCoordinates.x) + ", " + std::to_string(mouseCoordinates.y);
            window.draw_text(mouseCoordinates, coordinateText);

            window.next_frame();
        }

        return 0;
    }

Du kan sjekke om høyre eller venstre musetast er trykket ned med:

    bool TDT4102::AnimationWindow::is_left_mouse_button_down() const;
    bool TDT4102::AnimationWindow::is_right_mouse_button_down() const;

Funksjonen returnerer `true` dersom musetasten er nede.

Scrollhjulet kan leses ved å kalle:

    float TDT4102::AnimationWindow::get_delta_mouse_wheel() const;

Den returnerer hvor mange linjer brukeren har scrollet siden siste gang funksjonen ble kallet. Hvordan den oppfører seg er litt forskjellig mellom operativsystemer, men stort sett måles returverdien av funksjonen i antall tekstlinjer som ble scrollet.

## Tastatur

For å benytte deg av tastaturet kan du bruke `is_key_down()` funksjonen:

    bool TDT4102::AnimationWindow::is_key_down(KeyboardKey key) const;

`is_key_down()` funksjonen tar inn en tast på tastaturet som parameter, og returnerer `true` når tasten holdes ned, og ellers `false`. Tasten defineres som et verdi av `KeyboardKey`. For eksempel, her brukes R tasten å endre fargen på et rektangel:

    #include "AnimationWindow.h"

    int main() {
        TDT4102::AnimationWindow window;

        while(!window.should_close()) {
            bool rKeyIsPressed = window.is_key_down(KeyboardKey::R);

            if(rKeyIsPressed) {
                window.draw_rectangle({100, 100}, 100, 100, TDT4102::Color::red);
            } else {
                window.draw_rectangle({100, 100}, 100, 100, TDT4102::Color::dark_green);
            }

            window.next_frame();
        }

        return 0;
    }

### Alle tastene som finnes i KeyboardKey

Det finnes mange forskjellige taster som kan brukes i programmet. Her er et oversikt over alle. Merk at ikke alle tastatur har hver av disse tilgjengelig (for eksempel, mange tastatur på bærbare maskiner har ingen numpad).

Tast | KeyboardKey verdi
Bokstavtaster | `KeyboardKey::A` til `KeyboardKey::Z`
Norske bokstavtaster | `KeyboardKey::AA` `KeyBoardKey::AE` `KeyboardKey::OO`
Talltaster | `KeyboardKey::KEY_0` til `KeyboardKey::KEY_9`
Numpad: talltaster | `KeyboardKey::NUMPAD_0` til `KeyboardKey::NUMPAD_9`
Numpad: spesialtaster | `KeyboardKey::NUMPAD_COMMA` `KeyboardKey::NUMPAD_SLASH` `KeyboardKey::NUMPAD_ASTERISK` `KeyboardKey::NUMPAD_MINUS` `KeyboardKey::NUMPAD_PLUS` `KeyboardKey::NUMPAD_ENTER` `KeyboardKey::NUMPAD_PERIOD` `KeyboardKey::NUMPAD_EQUALS`
Piltaster | `KeyboardKey::LEFT` `KeyboardKey::UP` `KeyboardKey::RIGHT` `KeyboardKey::DOWN`
Shift | `KeyboardKey::LEFT_SHIFT` `KeyboardKey::RIGHT_SHIFT`
Ctrl | `KeyboardKey::LEFT_CTRL` `KeyboardKey::RIGHT_CTRL`
Windows tast Cmd (på Mac) | `KeyboardKey::SUPER_LEFT` `KeyboardKey::SUPER_RIGHT`
Alt | `KeyboardKey::LEFT_ALT` `KeyboardKey::RIGHT_ALT`
Page Up/Down | `KeyboardKey::PAGE_UP` `KeyboardKey::PAGE_DOWN`
Funksjonstastene | `KeyboardKey::F1` til `KeyboardKey::F24`
< > | `KeyboardKey::LESS_THAN` `KeyboardKey::GREATER_THAN`
{ } | `KeyboardKey::LEFT_PAREN` `KeyboardKey::RIGHT_PAREN`
[ ] | `KeyboardKey::LEFT_BRACKET` `KeyboardKey::RIGHT_BRACKET`
Backspace | `KeyboardKey::BACKSPACE`
Tab | `KeyboardKey::TAB`
Enter | `KeyboardKey::ENTER`
Escape | `KeyboardKey::ESCAPE`
Mellomrom | `KeyboardKey::SPACE`
Home | `KeyboardKey::HOME`
End | `KeyboardKey::END`
Printscreen | `KeyboardKey::PRINT_SCREEN`
Insert | `KeyboardKey::INSERT`
Menu | `KeyboardKey::MENU`
Delete | `KeyboardKey::DELETE`
_ | `KeyboardKey::UNDERSCORE`
& | `KeyboardKey::AMPERSAND`
* | `KeyboardKey::ASTERISK`
@ | `KeyboardKey::AT`
^ | `KeyboardKey::CARET`
: | `KeyboardKey::COLON`
$ | `KeyboardKey::DOLLAR`
! | `KeyboardKey::EXCLAMATION_MARK`
# | `KeyboardKey::HASH`
% | `KeyboardKey::PERCENT`
' | `KeyboardKey::QUOTE`
" | `KeyboardKey::DOUBLE_QUOTE`
+ | `KeyboardKey::PLUS`
; | `KeyboardKey::SEMICOLON`
. | `KeyboardKey::PERIOD`
- | `KeyboardKey::MINUS`
= | `KeyboardKey::EQUALS`
\ | `KeyboardKey::BACKSLASH`
` | `KeyboardKey::GRAVE`
, | `KeyboardKey::COMMA`
/ | `KeyboardKey::SLASH`
? | `KeyboardKey::QUESTION_MARK`
Pause | `KeyboardKey::PAUSE`
Scroll lock | `KeyboardKey::SCROLL_LOCK`
Caps lock | `KeyboardKey::CAPS_LOCK`
Num lock | `KeyboardKey::NUM_LOCK`
Media tastene | `KeyboardKey::AUDIO_MUTE` `KeyboardKey::AUDIO_NEXT` `KeyboardKey::AUDIO_PLAY` `KeyboardKey::AUDIO_PREV` `KeyboardKey::AUDIO_STOP` `KeyboardKey::AUDIO_VOLUME_UP` `KeyboardKey::AUDIO_VOLUME_DOWN`