]> git.lizzy.rs Git - nothing.git/commitdiff
Introduce tool bar for subtract and snapping tools
authorrexim <reximkut@gmail.com>
Sun, 2 Feb 2020 20:14:40 +0000 (03:14 +0700)
committerrexim <reximkut@gmail.com>
Sun, 2 Feb 2020 20:14:40 +0000 (03:14 +0700)
src/game/level/level_editor/rect_layer.c
src/game/level/level_editor/rect_layer.h

index 92b5b58c036677f641edf88ad2ce649c08f94c93..6d35d08976c2cc76e83c7b85b666adbca94431fc 100644 (file)
@@ -275,6 +275,32 @@ static int calc_resize_mask(Vec2f point, Rect rect)
     return mask;
 }
 
+#define TOOL_BUTTON_WIDTH 50.0f
+#define TOOL_BUTTON_HEIGHT 50.0f
+#define TOOL_BAR_PADDING 20.0f
+
+static
+Rect subtract_tool_button_rect(const Camera *camera)
+{
+    const Rect view_port = camera_view_port_screen(camera);
+    return rect(
+        TOOL_BAR_PADDING,
+        view_port.h - TOOL_BUTTON_HEIGHT - TOOL_BAR_PADDING,
+        TOOL_BUTTON_WIDTH,
+        TOOL_BUTTON_HEIGHT);
+}
+
+static
+Rect snapping_tool_button_rect(const Camera *camera)
+{
+    const Rect view_port = camera_view_port_screen(camera);
+    return rect(
+        TOOL_BAR_PADDING + TOOL_BUTTON_WIDTH + TOOL_BAR_PADDING,
+        view_port.h - TOOL_BUTTON_HEIGHT - TOOL_BAR_PADDING,
+        TOOL_BUTTON_WIDTH,
+        TOOL_BUTTON_HEIGHT);
+}
+
 static int rect_layer_event_idle(RectLayer *layer,
                                  const SDL_Event *event,
                                  const Camera *camera,
@@ -303,6 +329,19 @@ static int rect_layer_event_idle(RectLayer *layer,
     case SDL_MOUSEBUTTONDOWN: {
         switch (event->button.button) {
         case SDL_BUTTON_LEFT: {
+            Vec2f screen_position =
+                vec((float) event->button.x,
+                    (float) event->button.y);
+            if (rect_contains_point(subtract_tool_button_rect(camera), screen_position)) {
+                layer->subtract_enabled = !layer->subtract_enabled;
+                return 0;
+            }
+
+            if (rect_contains_point(snapping_tool_button_rect(camera), screen_position)) {
+                layer->snapping_enabled = !layer->snapping_enabled;
+                return 0;
+            }
+
             Vec2f position = camera_map_screen(
                 camera,
                 event->button.x,
@@ -335,7 +374,9 @@ static int rect_layer_event_idle(RectLayer *layer,
                 layer->selection = rect_at_position;
 
                 if (layer->selection < 0) {
-                    layer->state = RECT_LAYER_CREATE;
+                    layer->state = layer->subtract_enabled
+                        ? RECT_LAYER_SUBTRACT
+                        : RECT_LAYER_CREATE;
                     layer->create_begin = position;
                     layer->create_end = position;
                 }
@@ -430,14 +471,6 @@ static int rect_layer_event_idle(RectLayer *layer,
             }
         } break;
 
-        case SDLK_x: {
-            int x, y;
-            SDL_GetMouseState(&x, &y);
-            layer->create_begin = camera_map_screen(camera, x, y);
-            layer->create_end = layer->create_begin;
-            layer->state = RECT_LAYER_SUBTRACT;
-        } break;
-
         case SDLK_v: {
             if ((event->key.keysym.mod & KMOD_LCTRL) && rect_clipboard) {
                 int x, y;
@@ -1149,6 +1182,19 @@ int rect_layer_render(const RectLayer *layer, const Camera *camera, int active)
         return -1;
     }
 
+    // Tool bar
+    if (active) {
+        // TODO: subtract and snapping tools don't have any icons
+        camera_fill_rect_screen(
+            camera,
+            subtract_tool_button_rect(camera),
+            layer->subtract_enabled ? COLOR_RED : rgba(0.2f, 0.2f, 0.2f, 1.0f));
+        camera_fill_rect_screen(
+            camera,
+            snapping_tool_button_rect(camera),
+            layer->snapping_enabled ? COLOR_RED : rgba(0.2f, 0.2f, 0.2f, 1.0f));
+    }
+
     return 0;
 }
 
index 8bb37b444cf05844f89165b7988025b1459197ca..6d60c4ce3875c7f56aead9afb08e4ad3bb2505e3 100644 (file)
@@ -41,6 +41,7 @@ struct RectLayer {
     Cursor *cursor;
 
     int snapping_enabled;
+    int subtract_enabled;
 };
 
 LayerPtr rect_layer_as_layer(RectLayer *layer);