private void performMarqueeSelect() {
    final Rectangle selectionRectangle = getSelectionRectangle();
    final List<RadComponent> newSelection = new ArrayList<>();
    RadComponent rootComponent = myArea.getRootComponent();

    if (rootComponent != null) {
      rootComponent.accept(new RadComponentVisitor() {
        @Override
        public void endVisit(RadComponent component) {
          if (selectionRectangle.contains(component.getBounds(myArea.getNativeComponent())) && !component.isBackground()) {
            newSelection.add(component);
          }
        }
      }, true);

      if (newSelection.isEmpty() && mySelectBackground) {
        rootComponent.accept(new RadComponentVisitor() {
          @Override
          public void endVisit(RadComponent component) {
            // Only select the bottom-most background
            if (newSelection.isEmpty() &&
                component.getBounds(myArea.getNativeComponent()).contains(selectionRectangle.x, selectionRectangle.y) &&
                component.isBackground()) {
              newSelection.add(component);
            }
          }
        }, true);
      }
    }

    if (mySelectionMode == TOGGLE_MODE) {
      List<RadComponent> selection = new ArrayList<>(myArea.getSelection());

      for (RadComponent component : newSelection) {
        int index = selection.indexOf(component);

        if (index == -1) {
          selection.add(component);
        }
        else {
          selection.remove(index);
        }
      }

      myArea.setSelection(selection);
    }
    else if (mySelectionMode == APPEND_MODE) {
      for (RadComponent component : newSelection) {
        myArea.appendSelection(component);
      }
    }
    else {
      myArea.setSelection(newSelection);
    }
  }
private void performMarqueeSelect()