Advertisement
Guest User

graphicsmanager.h

a guest
Sep 20th, 2014
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include "GraphicsManager.h"
  2.  
  3. #ifdef CYGWIN
  4. #   include <ncurses/curses.h>
  5. #else
  6. #   include <curses.h>
  7. #endif
  8.  
  9. GraphicsManager::GraphicsManager(){
  10. }
  11.  
  12. //Get instance.
  13. GraphicsManager& GraphicsManager::getInstance(){
  14.     static GraphicsManager graphicsManager;
  15.     return graphicsManager;
  16. }
  17.  
  18. //Get terminal ready. Return 0: OK, NEGATIVE NUMBER: Otherwise.
  19. int GraphicsManager::startUp(){
  20.     /*if (initscr() == ERR)
  21.         return -1;*/
  22.     GraphicsManager::buffer1 = initscr();
  23.  
  24.     //Making buffer window for drawing
  25.     GraphicsManager::buffer2 = newwin(0, 0, 0, 0);
  26.     GraphicsManager::pBuffer = GraphicsManager::buffer1;
  27.  
  28.     //Clearing buffer
  29.     if (werase(GraphicsManager::buffer1) != OK)
  30.         return -2;
  31.     if (werase(GraphicsManager::buffer2) != OK)
  32.         return -3;
  33.  
  34.     //Leave cursor where it is after refresh.
  35.     if (leaveok(GraphicsManager::buffer1, TRUE) != OK);
  36.         return -4;
  37.     if (leaveok(GraphicsManager::buffer2, TRUE) != OK);
  38.         return -5;
  39.  
  40.     //If terminal supports color
  41.     if (has_colors() == TRUE){
  42.         //Enable color mode.
  43.         start_color();
  44.  
  45.         //Setup color pairs prior to use.
  46.         //init_pair(num, fg, bg)
  47.         init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
  48.         init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
  49.         init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
  50.         init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
  51.         init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
  52.         init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
  53.         init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
  54.     }
  55.  
  56.     //Make characters bold
  57.     if (wattron(GraphicsManager::buffer1, A_BOLD) != OK);
  58.         return -6;
  59.     if (wattron(GraphicsManager::buffer2, A_BOLD) != OK);
  60.         return -7;
  61.  
  62.     // Getting max width and height
  63.     int maxX = 0;
  64.     int maxY = 0;
  65.     getmaxyx(stdscr, maxY, maxX);   //MACRO
  66.  
  67.     //Make next refresh redraw window completely.
  68.     if (clearok(GraphicsManager::buffer1, TRUE) != OK)
  69.         return -8;
  70.     if (clearok(GraphicsManager::buffer2, TRUE) != OK)
  71.         return -9;
  72.  
  73.     Manager::startUp();
  74.     return 0;
  75. }
  76.  
  77. //Revert back to normal terminal.
  78. void GraphicsManager::shutDown(){
  79.     endwin();
  80.     Manager::shutDown();
  81. }
  82.  
  83. //Draw character at screen location (x, y) with color. Return 0: OK, -1: Otherwise.
  84. int GraphicsManager::drawCharacter(Position worldPosition, char character, int color) const{
  85.     WINDOW* window = GraphicsManager::getCurrentBuffer();
  86.    
  87.     if (wattron(window, COLOR_PAIR(color)) != OK)
  88.         return -1;
  89.     if (mvwaddch(window, worldPosition.getY(), worldPosition.getX(), character) != OK)
  90.         return -1;
  91.     //Drawing string;
  92.     //mvwaddstr(window, y, x, std::string.c_str()
  93.     if (wattroff(window, COLOR_PAIR(color)) != OK)
  94.         return -1;
  95.     return 0;
  96. }
  97.  
  98. //Return display's horizontal max.
  99. int GraphicsManager::getHorizontal() const{
  100.  
  101. }
  102.  
  103. //Return display's vertical max.
  104. int GraphicsManager::getVertical() const{
  105.  
  106. }
  107.  
  108. //Render current display buffer. Return 0: OK, -1: Otherwise.
  109. int GraphicsManager::swapBuffers(){
  110.     wrefresh(GraphicsManager::pBuffer);
  111.     if (pBuffer == GraphicsManager::buffer1)
  112.         pBuffer = GraphicsManager::buffer2;
  113.     else
  114.         pBuffer = GraphicsManager::buffer1;
  115.     swapBuffers();
  116.  
  117. }
  118.  
  119. //Return curses window that has been most recently drawn/refreshed.
  120. WINDOW* GraphicsManager::getPreviousBuffer() const{
  121.     if (pBuffer == GraphicsManager::buffer1)
  122.         return GraphicsManager::buffer2;
  123.     return GraphicsManager::buffer1;
  124. }
  125.  
  126. //Return curses window that is being drawn, but not yet refreshed.
  127. WINDOW* GraphicsManager::getCurrentBuffer() const{
  128.     if (pBuffer == GraphicsManager::buffer1)
  129.         return GraphicsManager::buffer1;
  130.     return GraphicsManager::buffer2;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement