Changeset 851


Ignore:
Timestamp:
02/05/14 17:11:59 (10 years ago)
Author:
jts21
Message:

Zoom frame around the current mouse position

Location:
trunk/src/org/expeditee
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/gui/FrameKeyboardActions.java

    r850 r851  
    10431043                                break;
    10441044                        case SizeDown:
    1045                                 ScaleFrameset.scaleFrame(DisplayIO.getCurrentFrame(), 0.909090909f);
     1045                                zoomFrame(DisplayIO.getCurrentFrame(), 0.909090909f);
    10461046                                DisplayIO.getCurrentFrame().refreshSize();
    10471047                                FrameKeyboardActions.Refresh();
     
    10531053//                              }
    10541054                        case SizeUp:
    1055                                 ScaleFrameset.scaleFrame(DisplayIO.getCurrentFrame(), 1.1f);
     1055                                zoomFrame(DisplayIO.getCurrentFrame(), 1.1f);
    10561056                                DisplayIO.getCurrentFrame().refreshSize();
    10571057                                FrameKeyboardActions.Refresh();
     
    15831583                return bReparse;
    15841584        }
     1585       
     1586        private static void zoomFrame(Frame frame, double scaleFactor) {
     1587               
     1588                int x = FrameMouseActions.getX(), y = FrameMouseActions.getY();
     1589               
     1590                if (frame == null) {
     1591                        return;
     1592                }
     1593               
     1594                Collection<Item> items = frame.getVisibleItems();
     1595               
     1596                for(Item item : items) {
     1597                        if(item instanceof Text && item.getSize() <= Text.MINIMUM_FONT_SIZE && scaleFactor < 1) {
     1598                                return;
     1599                        }
     1600                }
     1601               
     1602                for (Vector v : frame.getVectors()) {
     1603                        v.Source.scale((float) scaleFactor, x, y);
     1604                }
     1605               
     1606                for (Item item : items) {
     1607                        // This line is only needed for circles!!
     1608                        // Need to really fix up the way this works!!
     1609                        if (item.hasEnclosures())
     1610                                continue;
     1611                        if (!item.hasPermission(UserAppliedPermission.full))
     1612                                continue;
     1613                        item.invalidateAll();
     1614                        if (!(item instanceof Line)) {
     1615                                item.scale((float) scaleFactor, x, y);
     1616                        }
     1617                }
     1618
     1619                for (Item item : items) {
     1620                        if (!item.hasPermission(UserAppliedPermission.full))
     1621                                continue;
     1622                        // if (!(item instanceof Line))
     1623                        item.updatePolygon();
     1624
     1625                        if (item instanceof Line) {
     1626                                ((Line) item).refreshStroke(item.getThickness());
     1627                        }
     1628
     1629                        item.invalidateAll();
     1630                }
     1631        }
    15851632
    15861633        /**
     
    16171664                                // scale the entire frame
    16181665                                if(diff != 0) {
    1619                                         ScaleFrameset.scaleFrame(DisplayIO.getCurrentFrame(), (float) (diff > 0 ? 1.1 : 0.909090909));
     1666                                        zoomFrame(DisplayIO.getCurrentFrame(), diff > 0 ? 1.1 : 0.909090909);
    16201667                                        DisplayIO.getCurrentFrame().refreshSize();
    16211668                                        FrameKeyboardActions.Refresh();
  • trunk/src/org/expeditee/items/Item.java

    r821 r851  
    31233123
    31243124        public void scale(Float scale, int originX, int originY) {
    3125                 setXY(getX() * scale + originX, getY() * scale + originY);
     3125                setXY((getX() - originX) * scale + originX, (getY() - originY) * scale + originY);
    31263126                setArrowheadLength(getArrowheadLength() * scale);
    31273127
Note: See TracChangeset for help on using the changeset viewer.