Commit 503243fb by Szeberényi Imre
parents e01d2e5e e2667b8f
......@@ -35,15 +35,15 @@
</Compiler>
<Linker>
<Add library="mingw32" />
<Add library="SDLmain" />
<Add library="SDL.dll" />
<Add library="SDL2main" />
<Add library="SDL2" />
<Add library="SDL2_gfx" />
<Add library="SDL2_image" />
<Add library="SDL2_ttf" />
<Add library="user32" />
<Add library="dxguid" />
<Add library="gdi32" />
<Add library="winmm" />
<Add library="dxguid" />
<Add library="SDL_gfx" />
<Add library="SDL_image" />
<Add library="SDL_ttf" />
<Add directory="$(#sdl.lib)" />
</Linker>
<Unit filename="alakzat.cpp" />
......
......@@ -4,7 +4,7 @@
*/
#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
/// @param d - eltolás
......
......@@ -4,8 +4,8 @@
*/
#ifndef ALAKZAT_H
#define ALAKZAT_H
#include <SDL.h>
#include <SDL_gfxPrimitives.h>
#include <SDL2/sdl.h>
#include <SDL2/SDL2_gfxPrimitives.h>
#include "pont.h"
#include "szin.h"
......@@ -15,7 +15,7 @@ class Alakzat {
protected:
Pont p0; ///< alakzat origója
Szin sz; ///< alakzat színe
static SDL_Surface *scr; ///< eldugott globális változó
static SDL_Renderer* renderer; ///< eldugott globális változó
public:
/// Konstruktor
/// @param p0 - kezdőpont
......@@ -28,7 +28,7 @@ public:
/// suface beállítása
/// @param s - SDL surface
static void setSurface(SDL_Surface* s) { scr = s; }
static void setRenderer(SDL_Renderer* r) { renderer = r; }
/// rajzol
virtual void rajzol() const = 0; // tisztán virtuális
......
......@@ -6,6 +6,7 @@
/// Kört rajzoló rajzol fv.
void Kor::rajzol() const {
filledCircleColor(scr, p0.x, p0.y, r, sz);
SDL_Flip(scr); /// nem a legjobb megoldás a villogás miatt, de most elmegy
filledCircleColor(renderer, p0.x, p0.y, r, sz);
// 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) {
#ifdef DEMO
return 0;
#else
return x == 0 ? 0 : x < 0 ? -1 : 1;
return x == 0 ? 0 : x < 0 ? -10 : 10;
#endif // DEMO
}
/// segédfüggvény az SDL inicializálásához
/// @return suface pointer vagy 0
SDL_Surface* init() {
if (SDL_Init( SDL_INIT_VIDEO ) < 0)
return NULL;
/// @return renderer pointer vagy 0
SDL_Renderer* init() {
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
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.
/// 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);
return sdlRenderer;
}
int main(int argc, char* argv[]) {
SDL_Surface* screen = init();
if (screen == NULL) {
std::cerr << "Nem sikerult az SDL INIT: " << SDL_GetError() << std::endl;
SDL_Renderer* renderer = init();
if (renderer == NULL) {
std::cerr << "Nem sikerult az inicializálás " << SDL_GetError() << std::endl;
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
Alakzat *idom[N];
......@@ -55,36 +59,52 @@ int main(int argc, char* argv[]) {
/// Eseménykezelõ ciklus.
SDL_Event ev;
while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) {
static bool drag = false;
switch (ev.type) {
case SDL_MOUSEMOTION: { // egérmozgás esemény
case SDL_MOUSEMOTION: // egérmozgás esemény
if (drag) {
int dx = delta(ev.motion.xrel); // merre mozdult ?
int dy = delta(ev.motion.yrel);
for (int i = 0; i < db; i++) { // végigmegyünk az összesen
idom[i]->mozgat(Pont(dx, dy)); // kicsit mozdítunk rajta
idom[i]->rajzol(); // kirajzoljuk
}
SDL_RenderPresent(renderer);
}
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
if (db < N) {
if (ev.button.button == SDL_BUTTON_LEFT)
idom[db] = new Szakasz(Pont(ev.button.x, ev.button.y),
40, 80, GREEN);
if (ev.button.button == SDL_BUTTON_LEFT) {
drag = true;
} else if (db < N) {
if (ev.button.button == SDL_BUTTON_MIDDLE)
idom[db] = new Szakasz(Pont(ev.button.x, ev.button.y), 40, 80, GREEN);
else
idom[db] = new Kor(Pont(ev.button.x, ev.button.y), 40, RED);
idom[db]->rajzol();
++db;
SDL_RenderPresent(renderer);
}
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
delete idom[i];
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;
}
......@@ -6,6 +6,7 @@
/// Szakaszt rajzoló rajzol fv.
void Szakasz::rajzol() const {
thickLineColor(scr, 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
thickLineColor(renderer, p0.x, p0.y, pv.x+p0.x, pv.y+p0.y, 3, sz);
// 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