pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3257 - trunk/pingus/src/editor


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3257 - trunk/pingus/src/editor
Date: Sat, 29 Sep 2007 15:29:04 +0200

Author: grumbel
Date: 2007-09-29 15:29:04 +0200 (Sat, 29 Sep 2007)
New Revision: 3257

Modified:
   trunk/pingus/src/editor/editor_viewport.cpp
   trunk/pingus/src/editor/editor_viewport.hpp
   trunk/pingus/src/editor/minimap.cpp
   trunk/pingus/src/editor/minimap.hpp
Log:
- added drag&drop of scroll pos to minimap
- changed colors a bit

Modified: trunk/pingus/src/editor/editor_viewport.cpp
===================================================================
--- trunk/pingus/src/editor/editor_viewport.cpp 2007-09-29 13:02:50 UTC (rev 
3256)
+++ trunk/pingus/src/editor/editor_viewport.cpp 2007-09-29 13:29:04 UTC (rev 
3257)
@@ -605,6 +605,18 @@
   objs.clear();
   selection_changed(selected_objs);
 }
+
+Vector2i
+EditorViewport::get_scroll_pos() const
+{
+  return Vector2i(state.get_pos());
+}
+
+void
+EditorViewport::set_scroll_pos(Vector2i pos)
+{
+  state.set_pos(pos);
+}
 
 } // namespace Editor
 

Modified: trunk/pingus/src/editor/editor_viewport.hpp
===================================================================
--- trunk/pingus/src/editor/editor_viewport.hpp 2007-09-29 13:02:50 UTC (rev 
3256)
+++ trunk/pingus/src/editor/editor_viewport.hpp 2007-09-29 13:29:04 UTC (rev 
3257)
@@ -114,6 +114,9 @@
   /** Return a pointer to the EditorScreen object */
   EditorScreen* get_screen() { return editor; }
 
+  Vector2i get_scroll_pos() const;
+  void     set_scroll_pos(Vector2i pos);
+
   /// Mouse actions
   void on_primary_button_press(int x, int y);
   void on_primary_button_release(int x, int y);

Modified: trunk/pingus/src/editor/minimap.cpp
===================================================================
--- trunk/pingus/src/editor/minimap.cpp 2007-09-29 13:02:50 UTC (rev 3256)
+++ trunk/pingus/src/editor/minimap.cpp 2007-09-29 13:29:04 UTC (rev 3257)
@@ -29,7 +29,8 @@
 Minimap::Minimap(EditorScreen* editor_, const Rect& rect)
   : RectComponent(rect),
     editor(editor_),
-    drawing_context(new DrawingContext(rect.grow(-3)))
+    drawing_context(new DrawingContext(rect.grow(-3))),
+    dragging(false)
 {
 }
 
@@ -49,9 +50,6 @@
   dc.draw_fillrect(Rect(Vector2i(0, 0), Size(minimap_rect.get_width(), 
minimap_rect.get_height())),
                    Color(0,0,0), -100000.0f);
 
-  // FIXME: add current viewport and scrolling
-  // editor->get_viewport()->get_rect();
-
   std::vector<LevelObj*>& objects = *editor->get_viewport()->get_objects();
   Size levelsize = editor->get_level()->get_size();
 
@@ -79,9 +77,27 @@
       else // hotspot, background, etc.
         color = Color(255,0,0);
 
-      dc.draw_fillrect(r, color, (*i)->get_pos().z);
+      Color bg_color(int(color.r * 0.75f), 
+                     int(color.g * 0.75f), 
+                     int(color.b * 0.75f));
+
+      dc.draw_fillrect(r, bg_color, (*i)->get_pos().z);
+      dc.draw_rect(r, color, (*i)->get_pos().z);
     }
 
+  Vector2i viewport_pos  = editor->get_viewport()->get_scroll_pos();
+  Rect     viewport_rect = editor->get_viewport()->get_rect();
+
+  viewport_pos.x -= viewport_rect.get_width()/2;
+  viewport_pos.y -= viewport_rect.get_height()/2;
+
+  Rect view(Vector2i(viewport_pos.x * minimap_rect.get_width() / 
levelsize.width,
+                     viewport_pos.y * minimap_rect.get_height() / 
levelsize.height),
+            Size(viewport_rect.get_width()  * minimap_rect.get_width() / 
levelsize.width,
+                 viewport_rect.get_height() * minimap_rect.get_height() / 
levelsize.height));
+  dc.draw_fillrect(view, Color(255, 255, 0, 150), 1000000.0f);
+  dc.draw_rect(view, Color(255, 255, 0), 1000000.0f);
+  
   gc.draw(dc);
 }
 
@@ -92,6 +108,38 @@
 }
 
 void
+Minimap::on_pointer_move(int x, int y)
+{
+  if (dragging)
+    {
+      Rect minimap_rect = drawing_context->get_rect();
+      Size levelsize = editor->get_level()->get_size();
+
+      x -= 3 + rect.left; // take border into account
+      y -= 3 + rect.top;
+
+      x = x * levelsize.width / minimap_rect.get_width();
+      y = y * levelsize.height / minimap_rect.get_height();
+
+      editor->get_viewport()->set_scroll_pos(Vector2i(x, y));
+    }
+}
+
+void
+Minimap::on_primary_button_press (int x, int y)
+{
+  dragging = true;
+  on_pointer_move(x, y);
+}
+
+void
+Minimap::on_primary_button_release (int x, int y)
+{
+  on_pointer_move(x, y);
+  dragging = false;
+}
+
+void
 Minimap::update_layout()
 {
   drawing_context->set_rect(rect.grow(-3));

Modified: trunk/pingus/src/editor/minimap.hpp
===================================================================
--- trunk/pingus/src/editor/minimap.hpp 2007-09-29 13:02:50 UTC (rev 3256)
+++ trunk/pingus/src/editor/minimap.hpp 2007-09-29 13:29:04 UTC (rev 3257)
@@ -32,6 +32,7 @@
 private:
   EditorScreen* editor;
   DrawingContext* drawing_context;
+  bool dragging;
   
 public:
   Minimap(EditorScreen*, const Rect& );
@@ -40,6 +41,10 @@
   void draw (DrawingContext& gc);
   void update (float delta);
 
+  void on_primary_button_press (int x, int y);
+  void on_primary_button_release (int x, int y);
+  void on_pointer_move(int x, int y);
+
   void update_layout();
 };
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]