Skip to content
Snippets Groups Projects
Commit d180b4ae authored by bartvbl's avatar bartvbl
Browse files

Various changes

parent d09fe103
Branches
No related tags found
No related merge requests found
Pipeline #185751 passed
...@@ -25,16 +25,42 @@ int main() ...@@ -25,16 +25,42 @@ int main()
} }
``` ```
Det er to nye funksjoner som brukes i dette eksemplet: Det er to nye funksjoner som brukes i dette eksempelet:
* `bool AnimationWindow::should_close()`: Returnerer `false` fram til brukeren lukker vinduet, og deretter `true`. `while`-løkken sørger for at programmet fortsetter fram til den er avsluttet. * `bool AnimationWindow::should_close()`: Returnerer `false` fram til brukeren lukker vinduet, og deretter `true`. `while`-løkken sørger for at programmet fortsetter fram til den er avsluttet.
* `void AnimationWindow::next_frame()`: * `void AnimationWindow::next_frame()`: Funksjonen gjør flere operasjoner:
1. Bildet du har tegnet blir vist på skjermen
2. Blidet blir tømmet slik at du kan tegne neste bildet i animasjonen
3. Venter litt slik at vinduet ikke tegner flere enn 60 bilder per sekund
<img src="../../images/animation_1.png" alt="Bilde som viser en kurve tegnet med draw_arc funksjonen og endret farge" style="max-width:600px; width:100%;"/> <img src="../../images/animation_1.png" alt="Bilde som viser en kurve tegnet med draw_arc funksjonen og endret farge" style="max-width:600px; width:100%;"/>
Siden det nå er mulig å tegne flere bilder på rad kan vi prøve å lage en enkel animasjon, for eksempel en firkant som beveger mot høyre siden av skjermen. Vi gjør dette ved å øke x-koordinatet hver gang vi tegner et nytt bilde:
```c++
#include "std_lib_facilities.h"
#include "AnimationWindow.h"
int main()
{
AnimationWindow window;
int xPosition = 0;
while(!window.should_close()) {
xPosition = xPosition + 2;
Point position {xPosition, 100};
window.draw_rectangle(position, 100, 100);
window.next_frame();
}
return 0;
}
```
Merk at hele bildet må tegnes på nytt etter hver gang `next_frame()` funksjonen blir kallet. Det er ikke mulig å beholde en del av bildet og tegne bare det som endrer seg.
Eksemplet er litt Når du kjører eksempelet forsvinner firkanten etterhvert. Vi kan løse dette ved å legge til et if setning:
```c++ ```c++
#include "std_lib_facilities.h" #include "std_lib_facilities.h"
...@@ -59,3 +85,31 @@ int main() ...@@ -59,3 +85,31 @@ int main()
return 0; return 0;
} }
``` ```
Og for moro skyld kan vi sørge for at den bare flytter seg når mellomrom på tastaturen holdes ned (du finner mer informasjon om dette på input siden):
```c++
#include "std_lib_facilities.h"
#include "AnimationWindow.h"
int main()
{
AnimationWindow window;
int xPosition = 0;
while(!window.should_close()) {
if(window.is_key_down(KeyboardKey::SPACE)) {
xPosition = xPosition + 2;
}
if(xPosition > 200) {
xPosition = 0;
}
Point position {xPosition, 100};
window.draw_rectangle(position, 100, 100);
window.next_frame();
}
return 0;
}
```
\ No newline at end of file
# Grafiske Brukergrensesnitt (GUI) # Grafiske Brukergrensesnitt (GUI)
Grafiske brukergrensesnitt
## Konstruksjon av grafiske grensesnitt ## Konstruksjon av grafiske grensesnitt
## Callback ## Callback
...@@ -10,14 +12,79 @@ Et «callback» er en funksjon som kalles etter en spesifikk hendelse har inntru ...@@ -10,14 +12,79 @@ Et «callback» er en funksjon som kalles etter en spesifikk hendelse har inntru
## GUI Elementer ## GUI Elementer
Hver GUI element som kan brukes i en AnimationWindow er definert i sin egen klasse. Det vil si at når du for eksempel ønsker å vise en knapp i vinduet, lager du en instans av `TDT4102::Button` klassen. I tillegg er det nødvendig å
### Knapp ### Knapp
```c++ ```c++
AnimtionWindow* win = new AnimationWindow("Vindu", 1000, 800, 100, 200); #include "std_lib_facilities.h"
#include "AnimationWindow.h"
#include "widgets/Button.h"
void buttonClicked() {
std::cout << "Someone clicked on me!" << std::endl;
}
int main()
{
const Point buttonPosition {100, 100};
const int buttonWidth = 100;
const int buttonHeight = 40;
const string buttonLabel = "Click me!";
Button button {buttonPosition, buttonWidth, buttonHeight, buttonLabel};
AnimationWindow window;
window.add(button);
button.setCallback(buttonClicked);
window.wait_for_close();
return 0;
}
``` ```
### Tekst felt ### Tekst felt
```c++
#include "std_lib_facilities.h"
#include "AnimationWindow.h"
#include "widgets/TextInput.h"
TextInput textField {{100, 100}, 300, 30, "This text field is small!"};
void textFieldChanged() {
std::cout << "The text field now contains: " << textField.getText() << std::endl;
}
int main()
{
AnimationWindow window;
window.add(textField);
textField.setCallback(textFieldChanged);
window.wait_for_close();
return 0;
}
```
```c++
#include "std_lib_facilities.h"
#include "AnimationWindow.h"
#include "widgets/TextInput.h"
TextInput textField {{100, 100}, 300, 150, "This text field\ncontains more than\none line of text!"};
void textFieldChanged() {
std::cout << "The text field now contains: " << textField.getText() << std::endl;
}
int main()
{
AnimationWindow window;
window.add(textField);
textField.setCallback(textFieldChanged);
window.wait_for_close();
return 0;
}
```
### Dropdown list ### Dropdown list
```c++ ```c++
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment