public ImageInfoEditor() { labelFont = createLabelFont(); sliderShape = createSliderShape(); sliderBaseLineRect = new Rectangle(); paletteRect = new Rectangle(); histoRect = new Rectangle(); internalMouseListener = new InternalMouseListener(); modelCL = new ModelCL(); addChangeListener(new RepaintCL()); }
private void showSliderActions(MouseEvent evt, final int sliderIndex) { final JPopupMenu menu = new JidePopupMenu(); boolean showPopupMenu = false; JMenuItem menuItem; if (canChangeSliderCount()) { menuItem = createMenuItemAddNewSlider(sliderIndex, evt); if (menuItem != null) { menu.add(menuItem); showPopupMenu = true; } if (getSliderCount() > 2 && sliderIndex != INVALID_INDEX) { menuItem = createMenuItemDeleteSlider(sliderIndex); menu.add(menuItem); showPopupMenu = true; } } if (getSliderCount() > 2 && sliderIndex > 0 && sliderIndex < getSliderCount() - 1 && isSliderEditable(sliderIndex)) { menuItem = createMenuItemCenterSampleValue(sliderIndex); menu.add(menuItem); menuItem = createMenuItemCenterColorValue(sliderIndex); menu.add(menuItem); showPopupMenu = true; } if (showPopupMenu) { menu.show(evt.getComponent(), evt.getX(), evt.getY()); } }
private void doDragSlider(MouseEvent mouseEvent, boolean adjusting) { if (getDraggedSliderIndex() != INVALID_INDEX) { int x = mouseEvent.getX(); x = Math.max(x, sliderBaseLineRect.x); x = Math.min(x, sliderBaseLineRect.x + sliderBaseLineRect.width); final double newSample = computeSliderValueForX(getDraggedSliderIndex(), x); setSliderSample(getDraggedSliderIndex(), newSample, adjusting); if (isFirstSliderDragged() || isLastSliderDragged()) { partitionSliders(adjusting); } } }
@Override public void mouseReleased(MouseEvent evt) { if (isDragging()) { doDragSlider(evt, false); setDragging(false); setDraggedSliderIndex(INVALID_INDEX); applyChanges(); } else if (!maybeShowSliderActions(evt) && SwingUtilities.isLeftMouseButton(evt)) { int mode = 0; int sliderIndex = getSelectedSliderIndex(evt); if (sliderIndex != INVALID_INDEX && getModel().isColorEditable()) { mode = 1; } if (mode == 0) { if (sliderIndex == INVALID_INDEX) { sliderIndex = getSelectedSliderTextIndex(evt); } if (sliderIndex != INVALID_INDEX) { mode = 2; } } if (mode == 1) { editSliderColor(evt, sliderIndex); } else if (mode == 2) { editSliderSample(evt, sliderIndex); } } }
private JMenuItem createMenuItemAddNewSlider(int insertIndex, final MouseEvent evt) { if (insertIndex == getModel().getSliderCount() - 1) { return null; } if (insertIndex == INVALID_INDEX && isClickOutsideExistingSliders(evt.getX())) { return null; } if (insertIndex == INVALID_INDEX && !isVerticalInColorBarArea(evt.getY())) { return null; } if (insertIndex == INVALID_INDEX) { insertIndex = getNearestLeftSliderIndex(evt.getX()); } if (insertIndex == INVALID_INDEX) { return null; } final int index = insertIndex; JMenuItem menuItem = new JMenuItem("Add new Slider"); menuItem.setMnemonic('A'); menuItem.addActionListener(e -> { assert getModel() != null : "getModel() != null"; if (index < getModel().getSliderCount() - 1) { getModel().createSliderAfter(index); } hidePopup(); applyChanges(); }); return menuItem; }
private boolean isLastSliderDragged() { return getDraggedSliderIndex() == getSliderCount() - 1; }
private boolean isFirstSliderDragged() { return getDraggedSliderIndex() == 0; }
@Override public void mousePressed(MouseEvent mouseEvent) { hidePopup(); resetState(); // on linux: popup is triggered on mousePressed // on windows: popup is triggered on mouseReleased if (!maybeShowSliderActions(mouseEvent)) { setDraggedSliderIndex(getNearestSliderIndex(mouseEvent.getX(), mouseEvent.getY())); if (isFirstSliderDragged() || isLastSliderDragged()) { computeFactors(); } } }
private int getNearestLeftSliderIndex(int x) { final int index = getNearestSliderIndex(x); final double pos = getRelativeSliderPos(getSliderSample(index)); if (pos > x) { if (index > 0) { return index - 1; } return INVALID_INDEX; } return index; }
private int getSelectedSliderTextIndex(MouseEvent evt) { double dy = Math.abs(sliderTextBaseLineY + SLIDER_VALUES_AREA_HEIGHT - evt.getY()); if (dy < SLIDER_VALUES_AREA_HEIGHT) { final int sliderIndex = getNearestSliderIndex(evt.getX()); final double dx = Math.abs(getAbsoluteSliderPos(getSliderSample(sliderIndex)) - evt.getX()); if (dx < Math.floor(FONT_SIZE / 2.0)) { return sliderIndex; } } return INVALID_INDEX; }
private int getSelectedSliderIndex(MouseEvent evt) { if (isVerticalInSliderArea(evt.getY())) { final int sliderIndex = getNearestSliderIndex(evt.getX()); final double dx = Math.abs(getAbsoluteSliderPos(getSliderSample(sliderIndex)) - evt.getX()); if (dx < Math.floor(SLIDER_WIDTH / 2.0)) { return sliderIndex; } } return INVALID_INDEX; }
private boolean maybeShowSliderActions(MouseEvent mouseEvent) { if (getModel().isColorEditable() && mouseEvent.isPopupTrigger()) { final int sliderIndex = getSelectedSliderIndex(mouseEvent); showSliderActions(mouseEvent, sliderIndex); return true; } return false; }
@Override public void mouseDragged(MouseEvent mouseEvent) { setDragging(true); doDragSlider(mouseEvent, true); }
private int getNearestSliderIndex(int x, int y) { if (isVerticalInSliderArea(y)) { return getNearestSliderIndex(x); } return INVALID_INDEX; }