Commit 1c066383 by Szeberényi Imre

SDL2

parent c23cec52
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/// Az objektum eseménykezelője ettől még dönthet úgy, hogy nem kezeli. /// Az objektum eseménykezelője ettől még dönthet úgy, hogy nem kezeli.
/// Kihasználható, hogy az eseménykezelő meghívása előtt mindig van contains hívás. /// Kihasználható, hogy az eseménykezelő meghívása előtt mindig van contains hívás.
void AppShell::mainLoop() { void AppShell::mainLoop() {
SDL_Flip(scr); SDL_RenderPresent(renderer);
SDL_Event ev; SDL_Event ev;
Point cursor; Point cursor;
while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) { while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) {
...@@ -37,7 +37,7 @@ void AppShell::mainLoop() { ...@@ -37,7 +37,7 @@ void AppShell::mainLoop() {
} }
if (changed) { // ha változhatott a rajz, frissíti a képernyőt if (changed) { // ha változhatott a rajz, frissíti a képernyőt
draw(); draw();
SDL_Flip(scr); SDL_RenderPresent(renderer);
} }
} }
} }
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
/// Az eseményhurokért, valamint az SDL és az alkalmazás kapcsolatáért felelős. /// Az eseményhurokért, valamint az SDL és az alkalmazás kapcsolatáért felelős.
/// Widget konténerként tárolja a fő widgetpéldányokat. /// Widget konténerként tárolja a fő widgetpéldányokat.
struct AppShell : public Container { struct AppShell : public Container {
/// @param scr - SDL screen pointere /// @param ren - SDL renderer pointere
AppShell(SDL_Surface *scr) { AppShell(SDL_Renderer *ren) {
Widget::setSurface(scr); Widget::setRenderer(ren);
} }
/// maninLoop /// maninLoop
......
...@@ -30,20 +30,22 @@ ...@@ -30,20 +30,22 @@
</Target> </Target>
</Build> </Build>
<Compiler> <Compiler>
<Add option="-pedantic" />
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-std=c++11" />
<Add directory="$(#sdl.include)" /> <Add directory="$(#sdl.include)" />
</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="user32" /> <Add library="user32" />
<Add library="gdi32" /> <Add library="gdi32" />
<Add library="winmm" /> <Add library="winmm" />
<Add library="dxguid" /> <Add library="dxguid" />
<Add library="SDL_gfx" /> <Add library="SDL2_gfx" />
<Add library="SDL_image" /> <Add library="SDL2_image" />
<Add library="SDL_ttf" /> <Add library="SDL2_ttf" />
<Add directory="$(#sdl.lib)" /> <Add directory="$(#sdl.lib)" />
</Linker> </Linker>
<Unit filename="activebg.h" /> <Unit filename="activebg.h" />
......
...@@ -8,11 +8,11 @@ ...@@ -8,11 +8,11 @@
/// Kört rajzoló fv. /// Kört rajzoló fv.
void Circle::draw() const { void Circle::draw() const {
if (fill) { if (fill) {
filledCircleColor(scr, p0.x, p0.y, r, fg); filledCircleColor(renderer, p0.x, p0.y, r, fg);
circleColor (scr, p0.x, p0.y, r, fg); circleColor(renderer, p0.x, p0.y, r, fg);
} else { } else {
filledCircleColor (scr, p0.x, p0.y, r, bg); filledCircleColor (renderer, p0.x, p0.y, r, bg);
circleColor (scr, p0.x, p0.y, r, fg); circleColor (renderer, p0.x, p0.y, r, fg);
} }
} }
...@@ -29,7 +29,7 @@ bool Circle::eventHandler(const SDL_Event& ev) { ...@@ -29,7 +29,7 @@ bool Circle::eventHandler(const SDL_Event& ev) {
draw(); draw();
} }
return true; return true;
} else if (ev.type == SDL_MOUSEMOTION && ev.motion.state) { // drag } else if (ev.type == SDL_MOUSEMOTION && ev.motion.state != 0) { // drag
move(Point(ev.motion.xrel, ev.motion.yrel)); move(Point(ev.motion.xrel, ev.motion.yrel));
return true; return true;
} }
......
...@@ -44,15 +44,19 @@ ...@@ -44,15 +44,19 @@
#include "memtrace.h" #include "memtrace.h"
/// segédfüggvény az SDL inicializálásához /// segédfüggvény az SDL inicializálásához
/// @return surface 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 jelen változata lezárja a szabványos kimeneteteket és fájlba ír. }
/// Ezért újra kinyitjuk SDL_Window *sdlWindow;
std::freopen( "CON", "w", stdout ); SDL_Renderer *sdlRenderer;
std::freopen( "CON", "w", stderr ); if (SDL_CreateWindowAndRenderer(640, 480, SDL_WINDOW_RESIZABLE, &sdlWindow, &sdlRenderer) < 0) {
return SDL_SetVideoMode(1024, 768, 0, SDL_ANYFORMAT); return 0;
}
SDL_RenderClear(sdlRenderer);
return sdlRenderer;
} }
/// Bulletinboard kezelő panelje /// Bulletinboard kezelő panelje
...@@ -99,14 +103,15 @@ void quit(const SDL_Event&, int) { ...@@ -99,14 +103,15 @@ void quit(const SDL_Event&, int) {
} }
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;
} }
// Application shell létrehozása // Application shell létrehozása
AppShell app(screen); AppShell app(renderer);
Bboard* bb = new Bboard; // Bulletinboard Bboard* bb = new Bboard; // Bulletinboard
// Bbpanel olyan osztály, ami segít a gombokat kezelni. // Bbpanel olyan osztály, ami segít a gombokat kezelni.
Bbpanel panel(*bb); // ismernie kell a Bulletinboard-ot Bbpanel panel(*bb); // ismernie kell a Bulletinboard-ot
...@@ -123,6 +128,5 @@ int main(int argc, char** argv) { ...@@ -123,6 +128,5 @@ int main(int argc, char** argv) {
// eseményhurok // eseményhurok
app.mainLoop(); app.mainLoop();
SDL_Quit(); SDL_Quit();
} /// memtrace miatt minden egy belső blokkban van. return 0;
return memtrace::mem_check(); /// SDL kilépésekor már nem tud kiírni.
} }
...@@ -3,7 +3,11 @@ Memoriaszivargas-detektor ...@@ -3,7 +3,11 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013. Kanari: Szeberenyi Imre, 2013.
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
meset felszabaditaskor: 2018.
typo: 2019.
singleton: 2019.
*********************************/ *********************************/
/*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */ /*definialni kell, ha nem paracssorbol allitjuk be (-DMEMTRACE) */
...@@ -40,7 +44,7 @@ mem_dump: 2016. ...@@ -40,7 +44,7 @@ mem_dump: 2016.
/* Segedfuggvenyek es egyebek */ /* Segedfuggvenyek es egyebek */
/*******************************************************************/ /*******************************************************************/
START_NAMESPACE START_NAMESPACE
static FILE *fperror = stderr; static FILE *fperror;
#ifdef MEMTRACE_TO_MEMORY #ifdef MEMTRACE_TO_MEMORY
static const unsigned int CANARY_LEN = 64; static const unsigned int CANARY_LEN = 64;
#else #else
...@@ -123,37 +127,37 @@ START_NAMESPACE ...@@ -123,37 +127,37 @@ START_NAMESPACE
} }
/* memoriateruletet dump */ /* memoriateruletet dump */
static void dump_memory(void const *mem, size_t size, size_t can_len) { static void dump_memory(void const *mem, size_t size, size_t can_len, FILE* fp) {
unsigned char const *m=(unsigned char const *) mem; unsigned char const *m=(unsigned char const *) mem;
unsigned int s, o; unsigned int s, o;
if (can_len > 0) if (can_len > 0)
fprintf(fperror, "Dump (addr: %p kanari hossz: %d):\n", m+can_len, can_len); fprintf(fp, "Dump (addr: %p kanari hossz: %d):\n", m+can_len, (int)can_len);
else else
fprintf(fperror, "Dump: (addr: %p) \n", m); fprintf(fp, "Dump: (addr: %p) \n", m);
size += 2*can_len; size += 2*can_len;
for (s = 0; s < (size+15)/16; s++) { for (s = 0; s < (size+15)/16; s++) {
fprintf(fperror, "%04x:%c ", s*16, s*16 < can_len || s*16 >= size-can_len ? ' ' : '*'); fprintf(fp, "%04x:%c ", s*16, s*16 < can_len || s*16 >= size-can_len ? ' ' : '*');
for (o = 0; o < 16; o++) { for (o = 0; o < 16; o++) {
if (o == 8) fprintf(fperror, " "); if (o == 8) fprintf(fp, " ");
if (s*16+o < size) if (s*16+o < size)
fprintf(fperror, "%02x ", m[s*16+o]); fprintf(fp, "%02x ", m[s*16+o]);
else else
fprintf(fperror, " "); fprintf(fp, " ");
} }
fprintf(fperror, " "); fprintf(fp, " ");
for (o = 0; o < 16; o++) { for (o = 0; o < 16; o++) {
if (s*16+o < size) if (s*16+o < size)
fprintf(fperror, "%c", isprint(m[s*16+o]) ? m[s*16+o] : '.'); fprintf(fp, "%c", isprint(m[s*16+o]) ? m[s*16+o] : '.');
else else
fprintf(fperror, " "); fprintf(fp, " ");
} }
fprintf(fperror, "\n"); fprintf(fp, "\n");
} }
} }
void mem_dump(void const *mem, size_t size) { void mem_dump(void const *mem, size_t size, FILE* fp) {
dump_memory(mem, size, 0); dump_memory(mem, size, 0, fp);
} }
static BOOL dying; static BOOL dying;
...@@ -165,12 +169,12 @@ START_NAMESPACE ...@@ -165,12 +169,12 @@ START_NAMESPACE
fprintf(fperror,"%s\n",msg); fprintf(fperror,"%s\n",msg);
if (p) { if (p) {
fprintf(fperror, "\tPointer:\t%p", PU(p)); fprintf(fperror, "\tPointer:\t%p", PU(p));
if (size) fprintf(fperror," (%u byte)", (unsigned)size); if (size) fprintf(fperror," (%d byte)", (int)size);
fprintf(fperror,"\n"); fprintf(fperror,"\n");
} }
if (a) print_call("\tFoglalas:\t", *a); if (a) print_call("\tFoglalas:\t", *a);
if (d) print_call("\tFelszabaditas:\t", *d); if (d) print_call("\tFelszabaditas:\t", *d);
if (p) dump_memory(p, size, CANARY_LEN); if (p) dump_memory(p, size, CANARY_LEN, fperror);
dying = TRUE; dying = TRUE;
exit(120); exit(120);
...@@ -197,7 +201,7 @@ START_NAMESPACE ...@@ -197,7 +201,7 @@ START_NAMESPACE
static void print_registry_item(registry_item * p) { static void print_registry_item(registry_item * p) {
if (p) { if (p) {
print_registry_item(p->next); print_registry_item(p->next);
fprintf(fperror, "\t%p%5u byte ",p->p, (unsigned)p->size); fprintf(fperror, "\t%p%5d byte ",p->p, (int)p->size);
print_call(NULL, p->call); print_call(NULL, p->call);
if(p->call.par_txt) free(p->call.par_txt); if(p->call.par_txt) free(p->call.par_txt);
if(p->call.file) free(p->call.file); if(p->call.file) free(p->call.file);
...@@ -205,9 +209,10 @@ START_NAMESPACE ...@@ -205,9 +209,10 @@ START_NAMESPACE
} }
} }
/* ha nincs hiba, akkor 0-val tér vissza */
int mem_check(void) { int mem_check(void) {
initialize(); initialize();
if(dying) return 2; if(dying) return 2; /* címzési hiba */
if(registry.next) { if(registry.next) {
/*szivarog*/ /*szivarog*/
...@@ -217,7 +222,7 @@ START_NAMESPACE ...@@ -217,7 +222,7 @@ START_NAMESPACE
fprintf(fperror, "Szivargas:\n"); fprintf(fperror, "Szivargas:\n");
print_registry_item(registry.next); print_registry_item(registry.next);
registry.next = NULL; registry.next = NULL;
return 1; return 1; /* memória fogyás */
} }
return 0; return 0;
} }
...@@ -239,10 +244,15 @@ END_NAMESPACE ...@@ -239,10 +244,15 @@ END_NAMESPACE
/*******************************************************************/ /*******************************************************************/
START_NAMESPACE START_NAMESPACE
static int allocated_blks;
int allocated_blocks() { return allocated_blks; }
static BOOL register_memory(void * p, size_t size, call_t call) { static BOOL register_memory(void * p, size_t size, call_t call) {
initialize(); initialize();
allocated_blks++;
#ifdef MEMTRACE_TO_FILE #ifdef MEMTRACE_TO_FILE
fprintf(trace_file, "%p\t%d\t%s%s", PU(p), size, pretty[call.f], call.par_txt ? call.par_txt : "?"); fprintf(trace_file, "%p\t%d\t%s%s", PU(p), (int)size, pretty[call.f], call.par_txt ? call.par_txt : "?");
if (call.f <= 3) fprintf(trace_file, ")"); if (call.f <= 3) fprintf(trace_file, ")");
fprintf(trace_file, "\t%d\t%s\n", call.line, call.file ? call.file : "?"); fprintf(trace_file, "\t%d\t%s\n", call.line, call.file ? call.file : "?");
fflush(trace_file); fflush(trace_file);
...@@ -282,6 +292,7 @@ START_NAMESPACE ...@@ -282,6 +292,7 @@ START_NAMESPACE
{ /*C-blokk*/ { /*C-blokk*/
registry_item * n = find_registry_item(p); registry_item * n = find_registry_item(p);
if(n->next) { if(n->next) {
allocated_blks--;
registry_item * r = n->next; registry_item * r = n->next;
n->next = r->next; n->next = r->next;
if(COMP(r->call.f,call.f)) { if(COMP(r->call.f,call.f)) {
...@@ -295,13 +306,15 @@ START_NAMESPACE ...@@ -295,13 +306,15 @@ START_NAMESPACE
if(r->call.par_txt) free(r->call.par_txt); if(r->call.par_txt) free(r->call.par_txt);
if(call.file) free(call.file); if(call.file) free(call.file);
if(r->call.file) free(r->call.file); if(r->call.file) free(r->call.file);
memset(PU(r->p), 'f', r->size);
PU(r->p)[r->size-1] = 0;
free(r); free(r);
} else { } else {
/*hibas felszabaditas*/ /*hibas felszabaditas*/
die("Hibas felszabaditas:",r->p,r->size,&r->call,&call); die("Hibas felszabaditas:",r->p,r->size,&r->call,&call);
} }
} else { } else {
die("Nem letezo adat felszabaditasa:", p, 0,NULL,&call); die("Nem letezo, vagy mar felszabaditott adat felszabaditasa:", p, 0,NULL,&call);
} }
} /*C-blokk*/ } /*C-blokk*/
#endif #endif
...@@ -309,7 +322,7 @@ START_NAMESPACE ...@@ -309,7 +322,7 @@ START_NAMESPACE
END_NAMESPACE END_NAMESPACE
/*******************************************************************/ /*******************************************************************/
/* C-stlus memriakezels */ /* C-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_C #ifdef MEMTRACE_C
...@@ -403,7 +416,7 @@ END_NAMESPACE ...@@ -403,7 +416,7 @@ END_NAMESPACE
#endif/*MEMTRACE_C*/ #endif/*MEMTRACE_C*/
/*******************************************************************/ /*******************************************************************/
/* C++-stlus memriakezels */ /* C++-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
...@@ -420,7 +433,7 @@ START_NAMESPACE ...@@ -420,7 +433,7 @@ START_NAMESPACE
void set_delete_call(int line, const char * file) { void set_delete_call(int line, const char * file) {
initialize(); initialize();
delete_call=pack(0,"",line,file); /*func rtke lnyegtelen, majd fellrjuk*/ delete_call=pack(0,"",line,file); /*func értéke lényegtelen, majd felülírjuk*/
delete_called = TRUE; delete_called = TRUE;
} }
...@@ -475,6 +488,17 @@ void operator delete(void * p) THROW_NOTHING { ...@@ -475,6 +488,17 @@ void operator delete(void * p) THROW_NOTHING {
void operator delete[](void * p) THROW_NOTHING { void operator delete[](void * p) THROW_NOTHING {
memtrace::traced_delete(p,FDELETEARR); memtrace::traced_delete(p,FDELETEARR);
} }
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void * p, int, const char *) THROW_NOTHING {
memtrace::traced_delete(p,FDELETE);
}
void operator delete[](void * p, int, const char *) THROW_NOTHING {
memtrace::traced_delete(p,FDELETE);
}
#endif/*MEMTRACE_CPP*/ #endif/*MEMTRACE_CPP*/
/*******************************************************************/ /*******************************************************************/
...@@ -492,7 +516,7 @@ START_NAMESPACE ...@@ -492,7 +516,7 @@ START_NAMESPACE
#ifdef MEMTRACE_TO_MEMORY #ifdef MEMTRACE_TO_MEMORY
registry.next = NULL; registry.next = NULL;
#if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO) #if !defined(USE_ATEXIT_OBJECT) && defined(MEMTRACE_AUTO)
atexit((void(*)())mem_check); atexit((void(*)(void))mem_check);
#endif #endif
#endif #endif
#ifdef MEMTRACE_TO_FILE #ifdef MEMTRACE_TO_FILE
...@@ -506,8 +530,5 @@ START_NAMESPACE ...@@ -506,8 +530,5 @@ START_NAMESPACE
} }
} }
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
int atexit_class::counter = 0;
#endif
END_NAMESPACE END_NAMESPACE
#endif #endif
...@@ -3,7 +3,10 @@ Memoriaszivargas-detektor ...@@ -3,7 +3,10 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013., Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
inclue-ok: 2017., 2018. 2019.
singleton: 2019.
*********************************/ *********************************/
#ifndef MEMTRACE_H #ifndef MEMTRACE_H
...@@ -11,7 +14,7 @@ mem_dump: 2016. ...@@ -11,7 +14,7 @@ mem_dump: 2016.
#if defined(MEMTRACE) #if defined(MEMTRACE)
/*ha definilva van, akkor a hibakat ebbe a fajlba rja, egybkent stderr-re*/ /*ha definiálva van, akkor a hibakat ebbe a fajlba írja, egyébkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/ /*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/ /*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
...@@ -69,17 +72,34 @@ mem_dump: 2016. ...@@ -69,17 +72,34 @@ mem_dump: 2016.
#define TRACEC(func) func #define TRACEC(func) func
#endif #endif
/* A Visual Studio figyelmen kivul hagyja a "throw" deklaraciokat, a gcc -pedantic pedig igenyli.*/ // THROW deklaráció változatai
#ifdef _MSC_VER #if defined(_MSC_VER)
/* Ha studio */ // VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy jó így *
#define THROW_BADALLOC #define THROW_BADALLOC
#define THROW_NOTHING #define THROW_NOTHING
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else #else
/* Normalis forditok */ #if __cplusplus < 201103L
// C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc) #define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw () #define THROW_NOTHING throw ()
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#endif #endif
START_NAMESPACE
int allocated_blocks();
END_NAMESPACE
#if defined(MEMTRACE_TO_MEMORY) #if defined(MEMTRACE_TO_MEMORY)
START_NAMESPACE START_NAMESPACE
int mem_check(void); int mem_check(void);
...@@ -87,22 +107,35 @@ END_NAMESPACE ...@@ -87,22 +107,35 @@ END_NAMESPACE
#endif #endif
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT) #if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
#include <cstdio>
START_NAMESPACE START_NAMESPACE
class atexit_class { class atexit_class {
private: private:
static int counter;
public:
atexit_class() { atexit_class() {
counter++; #if defined(CPORTA) && !defined(CPORTA_NOSETBUF)
setbuf(stdout, 0);
setbuf(stderr, 0);
#endif
}
public:
static atexit_class& get_atexit_obj() {
static atexit_class instance; // singleton példány
return instance;
}
int check() {
return mem_check();
} }
~atexit_class() { ~atexit_class() {
if(--counter==0) check();
mem_check();
} }
}; };
static atexit_class atexit_obj; /// A statikus referencia minden fordítási egységben keletkezik, de
/// mindegyik egyetlen példányra fog hivatkozni a singleton minta miatt
static atexit_class& atexit_obj = atexit_class::get_atexit_obj();
END_NAMESPACE END_NAMESPACE
#endif/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/ #endif/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/
...@@ -111,8 +144,15 @@ END_NAMESPACE ...@@ -111,8 +144,15 @@ END_NAMESPACE
#include <stdlib.h> #include <stdlib.h>
#ifdef __cplusplus #ifdef __cplusplus
#include <iostream> #include <iostream>
/* ide gyjtjk a nemtrace-vel sszeakad headereket, hogy elbb legyenek */ /* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjben van deleted definici
#include <fstream> // VS 2013 headerjében van deleted definició
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#endif #endif
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
namespace std { namespace std {
...@@ -138,7 +178,8 @@ START_NAMESPACE ...@@ -138,7 +178,8 @@ START_NAMESPACE
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__) #define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file); void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file);
void mem_dump(void const *mem, size_t size); void mem_dump(void const *mem, size_t size, FILE* fp);
END_NAMESPACE END_NAMESPACE
#endif/*MEMTRACE_C*/ #endif/*MEMTRACE_C*/
...@@ -159,8 +200,18 @@ void * operator new[](size_t size) THROW_BADALLOC; ...@@ -159,8 +200,18 @@ void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING; void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING; void operator delete[](void * p) THROW_NOTHING;
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING;
#define new new(__LINE__, __FILE__) #define new new(__LINE__, __FILE__)
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete #define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA
#define system(...) // system(__VA_ARGS__)
#endif
#endif /*MEMTRACE_CPP*/ #endif /*MEMTRACE_CPP*/
#endif /*FROM_MEMTRACE_CPP*/ #endif /*FROM_MEMTRACE_CPP*/
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include "widget.h" #include "widget.h"
#include "memtrace.h" #include "memtrace.h"
SDL_Surface* Widget::scr; ///< statikus tag létrehozása SDL_Renderer* Widget::renderer; ///< statikus tag létrehozása
/// move - eltolja a widget origóját /// move - eltolja a widget origóját
/// @param d - eltolás /// @param d - eltolás
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
#ifndef WIDGET_H #ifndef WIDGET_H
#define WIDGET_H #define WIDGET_H
#include <SDL.h> #include <SDL2/sdl.h>
#include <SDL_gfxPrimitives.h> #include <SDL2/SDL2_gfxPrimitives.h>
#include "point.h" #include "point.h"
#include "color.h" #include "color.h"
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/// Nem szép megoldás, de szebb mintha globális lenne. /// Nem szép megoldás, de szebb mintha globális lenne.
class Widget { class Widget {
protected: protected:
static SDL_Surface *scr; ///< eldugott globális változó static SDL_Renderer *renderer; ///< eldugott globális változó
Point p0; ///< Widget origója Point p0; ///< Widget origója
Color fg; ///< Előtér szín Color fg; ///< Előtér szín
Color bg; ///< Háttérszín Color bg; ///< Háttérszín
...@@ -27,9 +27,9 @@ public: ...@@ -27,9 +27,9 @@ public:
const Color& fg = WHITE, const Color& fg = WHITE,
const Color& bg = BLACK) :p0(p0), fg(fg), bg(bg) {} const Color& bg = BLACK) :p0(p0), fg(fg), bg(bg) {}
/// suface beállítása /// renderer beállítása
/// @param s - SDL surface /// @param r - SDL remderer
static void setSurface(SDL_Surface* s) { scr = s; } static void setRenderer(SDL_Renderer* r) { renderer = r; }
/// contains /// contains
/// Egy adott pontról eldönti, hogy a widget területére esik-e /// Egy adott pontról eldönti, hogy a widget területére esik-e
......
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