Eiyeron Fulmincendii hace 10 años
padre
commit
73d469dc46
Se han modificado 3 ficheros con 60 adiciones y 47 borrados
  1. 12 7
      platform/include/Graphics.h
  2. 38 26
      platform/nspire/Graphics.cpp
  3. 10 14
      platform/sfml/Graphics.cpp

+ 12 - 7
platform/include/Graphics.h

@@ -55,27 +55,32 @@ namespace WalrusRPG
         void put_pixel(uint16_t x, uint16_t y, const WalrusRPG::Graphics::Pixel &color);
 
         // Primitives drawing
-        
+
         /*
          * Draws an horizontal line on the screen.
          */
-        void put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y, const WalrusRPG::Graphics::Pixel &color);
-        
+        void put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y,
+                                 const WalrusRPG::Graphics::Pixel &color);
+
         /*
          * Draws an vertical line on the screen.
          */
-        void put_vertical_line(uint16_t x, uint16_t y, uint16_t y2, const WalrusRPG::Graphics::Pixel &color);
+        void put_vertical_line(uint16_t x, uint16_t y, uint16_t y2,
+                               const WalrusRPG::Graphics::Pixel &color);
 
         /*
-         * Draws a line on the screen. As it uses Bresenham's algorithm, it won't be the most optimized way
+         * Draws a line on the screen. As it uses Bresenham's algorithm, it won't be the
+         * most optimized way
          * to draw vertical or horizontal lines.
          */
-        void put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, const WalrusRPG::Graphics::Pixel &color);
+        void put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2,
+                      const WalrusRPG::Graphics::Pixel &color);
 
         /*
          * Draws a filled rectangle on the screen.
          */
-        void put_rectangle(const WalrusRPG::Utils::Rect &rect, const WalrusRPG::Graphics::Pixel &color);
+        void put_rectangle(const WalrusRPG::Utils::Rect &rect,
+                           const WalrusRPG::Graphics::Pixel &color);
     }
 }
 

+ 38 - 26
platform/nspire/Graphics.cpp

@@ -28,14 +28,12 @@ void Graphics::frame_end()
     CXfb::buffer_swap_render();
 }
 
-void Graphics::put_sprite(const Texture &sheet, int x, int y,
-                          const Rect &window)
+void Graphics::put_sprite(const Texture &sheet, int x, int y, const Rect &window)
 {
     CXfb::draw_sprite_sheet(sheet.data, x, y, window);
 }
 
-void Graphics::put_sprite_tint(const Texture &sheet, int x, int y,
-                               const Rect &window,
+void Graphics::put_sprite_tint(const Texture &sheet, int x, int y, const Rect &window,
                                const Pixel &color)
 {
     CXfb::draw_sprite_sheet_tint(sheet.data, x, y, window, color.value);
@@ -52,64 +50,78 @@ void Graphics::put_pixel(uint16_t x, uint16_t y, const Pixel &color)
     CXfb::draw_pixel(x, y, color.value);
 }
 
-void Graphics::put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y, const Pixel &color)
+void Graphics::put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y,
+                                   const Pixel &color)
 {
-    if(x > x2)
+    if (x > x2)
     {
         uint16_t temp = x;
         x = x2;
         x2 = temp;
     }
-    for (; x < x2; x++) {
+    for (; x < x2; x++)
+    {
         CXfb::draw_pixel(x, y, color);
     }
 }
 
 void Graphics::put_vertical_line(uint16_t x, uint16_t y, uint16_t y2, const Pixel &color)
 {
-    if(y > y2)
+    if (y > y2)
     {
         uint16_t temp = y;
         y = y2;
         y2 = temp;
     }
-    for (; y < y2; y++) {
+    for (; y < y2; y++)
+    {
         CXfb::draw_pixel(x, y, color);
     }
 }
 
-void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, const Pixel& color)
+void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2,
+                        const Pixel &color)
 {
-    if(x == x2)
+    if (x == x2)
     {
         put_vertical_line(x, y, y2, color);
         return;
     }
-    else if(y == y2)
+    else if (y == y2)
     {
         put_horizontal_line(x, x2, y, color);
         return;
     }
-  int dx = abs(x-x2), sx = x<x2 ? 1 : -1;
-  int dy = abs(y-y2), sy = y<y2 ? 1 : -1; 
-  int err = (dx>dy ? dx : -dy)/2, e2;
- 
-  for(;;){
-    put_pixel(x,y, color);
-    if (x==x2 && y==y2) break;
-    e2 = err;
-    if (e2 >-dx) { err -= dy; x += sx; }
-    if (e2 < dy) { err += dx; y += sy; }
-  }
+    int dx = abs(x - x2), sx = x < x2 ? 1 : -1;
+    int dy = abs(y - y2), sy = y < y2 ? 1 : -1;
+    int err = (dx > dy ? dx : -dy) / 2, e2;
+
+    for (;;)
+    {
+        put_pixel(x, y, color);
+        if (x == x2 && y == y2)
+            break;
+        e2 = err;
+        if (e2 > -dx)
+        {
+            err -= dy;
+            x += sx;
+        }
+        if (e2 < dy)
+        {
+            err += dx;
+            y += sy;
+        }
+    }
 }
 
 void Graphics::put_rectangle(const Rect &rect, const Pixel &color)
-{ 
+{
     uint16_t xmax = min(320, rect.x + rect.width);
     uint16_t ymax = min(240, rect.y + rect.height);
-    for(uint16_t x = rect.x; x < xmax; x++)
+    for (uint16_t x = rect.x; x < xmax; x++)
     {
-        for(uint16_t y = rect.y; y < ymax; y++)
+        for (uint16_t y = rect.y; y < ymax; y++)
         {
             CXfb::draw_pixel(x, y, color.value);
         }

+ 10 - 14
platform/sfml/Graphics.cpp

@@ -63,8 +63,7 @@ void Graphics::put_sprite(const WalrusRPG::Graphics::Texture &sheet, int x, int
 }
 
 void Graphics::put_sprite_tint(const WalrusRPG::Graphics::Texture &sheet, int x, int y,
-                               const Rect &window,
-                               const Pixel &color)
+                               const Rect &window, const Pixel &color)
 {
     sf::Sprite sprite;
     sprite.setTexture(sheet.data);
@@ -88,7 +87,8 @@ void Graphics::put_pixel(uint16_t x, uint16_t y, const Pixel &color)
     buffer.draw(pixel);
 }
 
-void Graphics::put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y, const Pixel &color)
+void Graphics::put_horizontal_line(uint16_t x, uint16_t x2, uint16_t y,
+                                   const Pixel &color)
 {
     put_line(x, y, x2, y, color);
 }
@@ -98,25 +98,21 @@ void Graphics::put_vertical_line(uint16_t x, uint16_t y, uint16_t y2, const Pixe
     put_line(x, y, x, y2, color);
 }
 
-void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2, const Pixel& color)
+void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2,
+                        const Pixel &color)
 {
-
-    sf::Color lineColor(color.r<<3, color.g<<2, color.b<<3);
-    sf::Vertex line[] =
-    {
-        sf::Vertex(sf::Vector2f(x, y), lineColor),
-        sf::Vertex(sf::Vector2f(x2, y2), lineColor)
-    };
+    sf::Color lineColor(color.r << 3, color.g << 2, color.b << 3);
+    sf::Vertex line[] = {sf::Vertex(sf::Vector2f(x, y), lineColor),
+                         sf::Vertex(sf::Vector2f(x2, y2), lineColor)};
 
     buffer.draw(line, 2, sf::Lines);
-
 }
 
-void Graphics::put_rectangle(const Rect &rect, const Pixel& color)
+void Graphics::put_rectangle(const Rect &rect, const Pixel &color)
 {
     sf::RectangleShape rectangle;
     rectangle.setSize(sf::Vector2f(rect.width, rect.height));
-    rectangle.setFillColor(sf::Color(color.r<<3, color.g<<2, color.b<<3));
+    rectangle.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3));
     rectangle.setPosition(rect.x, rect.y);
     buffer.draw(rectangle);
 }