Commit e2667b8f by Szeberényi Imre

SDL2

parent 8daf658a
...@@ -35,15 +35,15 @@ ...@@ -35,15 +35,15 @@
</Compiler> </Compiler>
<Linker> <Linker>
<Add library="mingw32" /> <Add library="mingw32" />
<Add library="SDLmain" /> <Add library="SDL2main" />
<Add library="SDL.dll" /> <Add library="SDL2" />
<Add library="SDL2_gfx" />
<Add library="SDL2_image" />
<Add library="SDL2_ttf" />
<Add library="user32" /> <Add library="user32" />
<Add library="dxguid" />
<Add library="gdi32" /> <Add library="gdi32" />
<Add library="winmm" /> <Add library="winmm" />
<Add library="dxguid" />
<Add library="SDL_gfx" />
<Add library="SDL_image" />
<Add library="SDL_ttf" />
<Add directory="$(#sdl.lib)" /> <Add directory="$(#sdl.lib)" />
</Linker> </Linker>
<Unit filename="alakzat.cpp" /> <Unit filename="alakzat.cpp" />
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
*/ */
#include "alakzat.h" #include "alakzat.h"
SDL_Surface* Alakzat::scr; /// statikus tag létrehozása SDL_Renderer* Alakzat::renderer; /// statikus tag létrehozása
/// mozgat - eltolja az alakzat origóját /// mozgat - eltolja az alakzat origóját
/// @param d - eltolás /// @param d - eltolás
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
*/ */
#ifndef ALAKZAT_H #ifndef ALAKZAT_H
#define ALAKZAT_H #define ALAKZAT_H
#include <SDL.h> #include <SDL2/sdl.h>
#include <SDL_gfxPrimitives.h> #include <SDL2/SDL2_gfxPrimitives.h>
#include "pont.h" #include "pont.h"
#include "szin.h" #include "szin.h"
...@@ -15,7 +15,7 @@ class Alakzat { ...@@ -15,7 +15,7 @@ class Alakzat {
protected: protected:
Pont p0; ///< alakzat origója Pont p0; ///< alakzat origója
Szin sz; ///< alakzat színe Szin sz; ///< alakzat színe
static SDL_Surface *scr; ///< eldugott globális változó static SDL_Renderer* renderer; ///< eldugott globális változó
public: public:
/// Konstruktor /// Konstruktor
/// @param p0 - kezdőpont /// @param p0 - kezdőpont
...@@ -28,7 +28,7 @@ public: ...@@ -28,7 +28,7 @@ public:
/// suface beállítása /// suface beállítása
/// @param s - SDL surface /// @param s - SDL surface
static void setSurface(SDL_Surface* s) { scr = s; } static void setRenderer(SDL_Renderer* r) { renderer = r; }
/// rajzol /// rajzol
virtual void rajzol() const = 0; // tisztán virtuális virtual void rajzol() const = 0; // tisztán virtuális
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
/// Kört rajzoló rajzol fv. /// Kört rajzoló rajzol fv.
void Kor::rajzol() const { void Kor::rajzol() const {
filledCircleColor(scr, p0.x, p0.y, r, sz); filledCircleColor(renderer, p0.x, p0.y, r, sz);
SDL_Flip(scr); /// nem a legjobb megoldás a villogás miatt, de most elmegy // SDL_RenderPresent(renderer);
// SDL_Flip(scr); /// nem a legjobb megoldás a villogás miatt, de most elmegy
} }
...@@ -17,30 +17,34 @@ inline int delta(int x) { ...@@ -17,30 +17,34 @@ inline int delta(int x) {
#ifdef DEMO #ifdef DEMO
return 0; return 0;
#else #else
return x == 0 ? 0 : x < 0 ? -1 : 1; return x == 0 ? 0 : x < 0 ? -10 : 10;
#endif // DEMO #endif // DEMO
} }
/// segédfüggvény az SDL inicializálásához /// segédfüggvény az SDL inicializálásához
/// @return suface pointer vagy 0 /// @return renderer pointer vagy 0
SDL_Surface* init() { SDL_Renderer* init() {
if (SDL_Init( SDL_INIT_VIDEO ) < 0) if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
return NULL; return 0;
}
SDL_Window *sdlWindow;
SDL_Renderer *sdlRenderer;
if (SDL_CreateWindowAndRenderer(640, 480, SDL_WINDOW_RESIZABLE, &sdlWindow, &sdlRenderer) < 0) {
return 0;
}
SDL_RenderClear(sdlRenderer);
/// SDL jelen változata lezárja a szabványos kimeneteteket. return sdlRenderer;
/// Ezért újra kinyitjuk, hogy látszódjanak a konzolon a debug kiírások
std::freopen( "CON", "w", stdout );
std::freopen( "CON", "w", stderr );
return SDL_SetVideoMode(1024, 768, 0, SDL_ANYFORMAT);
} }
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
SDL_Surface* screen = init(); SDL_Renderer* renderer = init();
if (screen == NULL) { if (renderer == NULL) {
std::cerr << "Nem sikerult az SDL INIT: " << SDL_GetError() << std::endl; std::cerr << "Nem sikerult az inicializálás " << SDL_GetError() << std::endl;
return 1; return 1;
} }
Alakzat::setSurface(screen); // screen letárolása az "Alakzat-ba"
Alakzat::setRenderer(renderer); // screen letárolása az "Alakzat-ba"
const int N = 100; // max 100 alakzatunk lehet const int N = 100; // max 100 alakzatunk lehet
Alakzat *idom[N]; Alakzat *idom[N];
...@@ -55,36 +59,52 @@ int main(int argc, char* argv[]) { ...@@ -55,36 +59,52 @@ int main(int argc, char* argv[]) {
/// Eseménykezelõ ciklus. /// Eseménykezelõ ciklus.
SDL_Event ev; SDL_Event ev;
while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) { while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) {
static bool drag = false;
switch (ev.type) { switch (ev.type) {
case SDL_MOUSEMOTION: { // egérmozgás esemény case SDL_MOUSEMOTION: // egérmozgás esemény
int dx = delta(ev.motion.xrel); // merre mozdult ? if (drag) {
int dy = delta(ev.motion.yrel); int dx = delta(ev.motion.xrel); // merre mozdult ?
for (int i = 0; i < db; i++) { // végigmegyünk az összesen int dy = delta(ev.motion.yrel);
idom[i]->mozgat(Pont(dx, dy)); // kicsit mozdítunk rajta for (int i = 0; i < db; i++) { // végigmegyünk az összesen
idom[i]->rajzol(); // kirajzoljuk idom[i]->mozgat(Pont(dx, dy)); // kicsit mozdítunk rajta
idom[i]->rajzol(); // kirajzoljuk
}
SDL_RenderPresent(renderer);
} }
break; break;
}
case SDL_WINDOWEVENT:
if (ev.window.event == SDL_WINDOWEVENT_EXPOSED) {
for (int i = 0; i < db; i++) // végigmegyünk az összesen
idom[i]->rajzol(); // kirajzoljuk
}
SDL_RenderPresent(renderer);
break;
case SDL_MOUSEBUTTONDOWN: // egérgomb kezelése case SDL_MOUSEBUTTONDOWN: // egérgomb kezelése
if (db < N) { if (ev.button.button == SDL_BUTTON_LEFT) {
if (ev.button.button == SDL_BUTTON_LEFT) drag = true;
idom[db] = new Szakasz(Pont(ev.button.x, ev.button.y), } else if (db < N) {
40, 80, GREEN); if (ev.button.button == SDL_BUTTON_MIDDLE)
idom[db] = new Szakasz(Pont(ev.button.x, ev.button.y), 40, 80, GREEN);
else else
idom[db] = new Kor(Pont(ev.button.x, ev.button.y), 40, RED); idom[db] = new Kor(Pont(ev.button.x, ev.button.y), 40, RED);
idom[db]->rajzol(); idom[db]->rajzol();
++db; ++db;
SDL_RenderPresent(renderer);
} }
break; break;
case SDL_MOUSEBUTTONUP: // egérgomb kezelése
if (ev.button.button == SDL_BUTTON_LEFT)
drag = false;
break;
} }
} }
for (int i = 0; i < db; i++) /// fel kell szabadítani minden objektumot for (int i = 0; i < db; i++) /// fel kell szabadítani minden objektumot
delete idom[i]; delete idom[i];
SDL_Quit(); SDL_Quit();
/// SDL mellékhatása, hogy közvetlenül meg kell hívni a memtrace ellenőrző
/// funkcióját (exit ágon azért is lezárja a standard hibakimenetet).
memtrace::mem_check();
return 0; return 0;
} }
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
/// Szakaszt rajzoló rajzol fv. /// Szakaszt rajzoló rajzol fv.
void Szakasz::rajzol() const { void Szakasz::rajzol() const {
thickLineColor(scr, p0.x, p0.y, pv.x+p0.x, pv.y+p0.y, 3, sz); thickLineColor(renderer, p0.x, p0.y, pv.x+p0.x, pv.y+p0.y, 3, sz);
SDL_Flip(scr); /// nem a legjobb megoldás a villogás miatt, de most elmegy // SDL_RenderPresent(renderer);
// SDL_Flip(scr); /// nem a legjobb megoldás a villogás miatt, de most elmegy
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment