]> Shamusworld >> Repos - architektonas/blobdiff - src/container.cpp
Trim tool now works for Lines, but inaccurate.
[architektonas] / src / container.cpp
index 6050f3217b73ecea8f7bb33ef63df8ec77d740d4..2eca9f4573473c0c772a4efd96060836e6bc15ec 100644 (file)
@@ -123,12 +123,13 @@ having to ungroup them first (like Inkscape).
 /*virtual*/ bool Container::Collided(Vector point)
 {
        objectWasDragged = false;
-//     Vector v1 = position - point;
-
        bool collision = false;
+       lastObjectClicked = NULL;
 
-       // NOTE that this deletes the object on mouse down instead of mouse up. Have to
-       // check to see how it feels to do it that way...
+       // NOTE that this deletes the object on mouse down instead of mouse up.
+       // Have to check to see how it feels to do it that way...
+       // N.B.: This only works because the toolAction is not set, &
+       //       Object::ignoreClicks isn't set either...
        if (deleteActive)
        {
                for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end();)
@@ -149,7 +150,11 @@ printf("Container::Collided: Deleting object ($%X)\n", *i);
                for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
                {
                        if ((*i)->Collided(point))
+                       {
                                collision = true;
+                               lastObjectClicked = *i;
+//printf("Container::Collided: lastObjectClicked = %X\n", lastObjectClicked);
+                       }
                }
        }
 
@@ -196,9 +201,10 @@ class so that we can leverage that stuff here as well.
 // into parts and keep subdividing until an acceptable number of objects lie within
 // the slice. This way, the GUI will still be responsive and *not* have to test
 // every object for collision.
-/*virtual*/ void Container::PointerMoved(Vector point)
+/*virtual*/ bool Container::PointerMoved(Vector point)
 {
        std::vector<Object *>::iterator i;
+       lastObjectHovered = NULL;
 
        if (!isTopLevelContainer)
        {
@@ -210,7 +216,7 @@ class so that we can leverage that stuff here as well.
                        else
                                state = OSInactive;
 
-                       return;
+                       return false;
                }
 
                // No need to do any checking if we're already selected...
@@ -248,17 +254,19 @@ class so that we can leverage that stuff here as well.
                        needUpdate = true;
                }
 
-               return;
+               return false;
        }
 
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
        {
 //             if (objects[i]->GetState() == OSSelected)
-               (*i)->PointerMoved(point);
+               if ((*i)->PointerMoved(point))
+                       lastObjectHovered = *i;
        }
 
        // Generic container doesn't need this???
 //     needUpdate = false;
+       return (lastObjectHovered == NULL ? false : true);
 }