aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jonas <himself@jonasgunz.de> 2019-01-08 09:31:19 +0100
committerGravatar jonas <himself@jonasgunz.de> 2019-01-08 09:31:19 +0100
commit6152506560cc3642e1956bc9e2502e8ae8aa9a5b (patch)
treeae6afb24f5ad859cddf5571e687a89a12c451008
parent58d83d0394b81e079bfbb767936f7449235a236d (diff)
downloadtermgl-6152506560cc3642e1956bc9e2502e8ae8aa9a5b.tar.gz
moved framebuffer setup from cInput to cRender:setAlternateBufferScreen
-rw-r--r--cInput.cpp5
-rw-r--r--cRender.cpp54
-rw-r--r--cRender.h3
3 files changed, 37 insertions, 25 deletions
diff --git a/cInput.cpp b/cInput.cpp
index a862127..7a945b2 100644
--- a/cInput.cpp
+++ b/cInput.cpp
@@ -11,7 +11,8 @@ cInput::cInput()
tcsetattr (STDIN_FILENO, TCSANOW, &raw);
// Switch to the alternate buffer screen
- write (STDOUT_FILENO, "\e[?47h", 6);
+ //write (STDOUT_FILENO, "\e[?47h", 6);
+ ///MOVED TO cRender
// Enable mouse tracking
write (STDOUT_FILENO, "\e[?1000h", 8);
@@ -21,7 +22,7 @@ cInput::~cInput()
{
//revert changes to console
write (STDOUT_FILENO, "\e[?1000l", 8);
- write (STDOUT_FILENO, "\e[?47l", 6);
+ //write (STDOUT_FILENO, "\e[?47l", 6);
tcsetattr (STDIN_FILENO, TCSANOW, &original);
}
diff --git a/cRender.cpp b/cRender.cpp
index 366e86f..5e5cb9d 100644
--- a/cRender.cpp
+++ b/cRender.cpp
@@ -13,18 +13,17 @@ cRender::cRender(char _backound, WORD _color, int _sx, int _sy)
#ifdef __linux__ //In Linux, setting Console size is not supported, so it gets Size of Console (Window) instead.
- struct winsize w;
- ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
-
wDefColor = _COL_DEFAULT;
+ //Set up console
+ setAlternateBufferScreen(true);
+ setConsoleCursor(false);
+
setBufferSize( getConsoleWindowSize() );
if(sizeX < _sx || sizeY < _sy) //Notify Program tha screen is too small for desired Size
iLastError = _ERR_SCREEN_TOO_SMALL_;
- setConsoleCursor(false);
-
#elif _WIN32 //Windows Specific Code
hstdout = GetStdHandle(STD_OUTPUT_HANDLE); //get handle
@@ -34,11 +33,11 @@ cRender::cRender(char _backound, WORD _color, int _sx, int _sy)
SetConsoleWindowSize(_sx + 1, _sy + 1); //set the windows size to _sx * _sy (+1 so no scrolling accurs)
setBufferSize({_sx,_sy});
-#endif
+#endif //_WIN32
setConsoleEcho(false);
clear(true); //Init backround array
- //forceReRender();
+
}//render()
@@ -46,8 +45,7 @@ cRender::cRender() {}
cRender::~cRender()
{
- //Free allocated memory
- if(bBlockRender)
+ if(bBlockRender) //Don't run destructor if inherited
return;
for (int i = 0; i < sizeX; i++) {
@@ -64,7 +62,8 @@ cRender::~cRender()
#ifdef __linux__
setConsoleCursor(true);
- #endif
+ setAlternateBufferScreen(false);
+ #endif //__linux__
}
int cRender::drawPoint(char _c, sPos _pos, bool _overrideCollision, WORD _color)
@@ -149,14 +148,16 @@ int cRender::render(void)
if (bBlockRender)
return _ERR_RENDER_BLOCKED_BY_CHILD_;
- setBufferSize(getConsoleWindowSize());
+ //Resize screenbuffer if needed
+ setBufferSize( getConsoleWindowSize( ) );
for (int i = 0; i < sizeY; i++) {
for (int o = 0; o < sizeX; o++) {
if(bChanged[o][i])
{
#ifdef _WIN32
- #error "Implement gotoxy!!"
+
+ gotoxy(o,i);
SetConsoleTextAttribute(hstdout, wColor[o][i] | _COL_INTENSITY);
//cout << cScreen[o][i];
printf("%c", cScreen[o][i]);
@@ -165,9 +166,9 @@ int cRender::render(void)
//gotoxy(x,y) now included!!
printf("\e[%i;%iH\033[%im%c\n", i + 1, o + 1, wColor[o][i], cScreen[o][i]);
// Position Color
- #endif
+ #endif //__linux__
}
- bChanged[o][i] = false;
+ bChanged[o][i] = false;
}
}
return 0;
@@ -234,7 +235,7 @@ int cRender::SetConsoleWindowSize(int x, int y)
if (!SetConsoleWindowInfo(h, TRUE, &info))
return 1;
}
-#endif
+#endif //_WIN32
int cRender::getLastError()
{
@@ -257,7 +258,19 @@ sPos cRender::getConsoleWindowSize()
return {w.ws_col, w.ws_row - 1};
}
-#endif
+
+void cRender::setAlternateBufferScreen(bool _enable)
+{
+ _enable ? write (STDOUT_FILENO, "\e[?47h", 6):write (STDOUT_FILENO, "\e[?47l", 6);
+}
+
+void cRender::setConsoleCursor(bool _enable)
+{
+ _enable ? write (STDOUT_FILENO, "\e[?25h", 6) : write (STDOUT_FILENO, "\e[?25l", 6);
+}
+
+#endif // __linux__
+
void cRender::setBufferSize(sPos _size)
{
if(_size.x == sizeX && _size.y == sizeY)
@@ -323,7 +336,7 @@ void cRender::setConsoleEcho(bool _enable)
SetConsoleMode(hStdin, mode );
-#else
+#elif __linux__
struct termios tty;
tcgetattr(STDIN_FILENO, &tty);
if( !_enable )
@@ -332,10 +345,5 @@ void cRender::setConsoleEcho(bool _enable)
tty.c_lflag |= ECHO;
(void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
-#endif
-}
-
-void cRender::setConsoleCursor(bool _enable)
-{
- _enable ? write (STDOUT_FILENO, "\e[?25h", 6) : write (STDOUT_FILENO, "\e[?25l", 6);
+#endif //__linux__
}
diff --git a/cRender.h b/cRender.h
index 14b66dd..437ae14 100644
--- a/cRender.h
+++ b/cRender.h
@@ -125,6 +125,7 @@ protected:
cRender();
/** Sets screenbuffer size
+ * Uses sizeX, sizeY to determine previous screenbuffer size. Do NOT change sizeX, sizeY manually!!
*/
void setBufferSize(sPos _size);
@@ -170,5 +171,7 @@ private:
sPos getConsoleWindowSize();
void setConsoleCursor(bool _enable);
+
+ void setAlternateBufferScreen(bool _enable);
#endif
};