Crossfire JXClient, Trunk
GUIScrollBar.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.gui.misc;
24 
32 import java.awt.Color;
33 import java.awt.Dimension;
34 import java.awt.Graphics;
35 import java.awt.event.MouseEvent;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
43 public class GUIScrollBar extends ActivatableGUIElement implements ScrollableListener {
44 
48  private static final long serialVersionUID = 1;
49 
54  private final boolean proportionalSlider;
55 
59  @NotNull
60  private final GUIScrollable2 scrollable;
61 
65  @NotNull
66  private final Color colorBackground;
67 
71  @NotNull
72  private final Color colorForeground;
73 
77  private int valueMin;
78 
82  private int valueSize = 1;
83 
87  private int sliderSize = 1;
88 
92  private int sliderPos;
93 
98  private int offset;
99 
103  private boolean scrolling;
104 
117  public GUIScrollBar(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final boolean proportionalSlider, @NotNull final GUIScrollable2 scrollable, @NotNull final Color colorBackground, @NotNull final Color colorForeground, @NotNull final GuiFactory guiFactory) {
119  this.proportionalSlider = proportionalSlider;
120  this.scrollable = scrollable;
121  this.colorBackground = colorBackground;
122  this.colorForeground = colorForeground;
123  this.scrollable.addScrollableListener(this);
124  }
125 
126  @Override
127  public void dispose() {
128  super.dispose();
130  }
131 
132  @Override
133  public void setRange(final int valueMin, final int valueMax, final int sliderPos, final int sliderSize) {
134  if (valueMax <= valueMin) {
135  throw new IllegalArgumentException("valueMax="+valueMax+" <= "+valueMin+"="+valueMin);
136  }
137  if (sliderSize <= 0) {
138  throw new IllegalArgumentException("sliderSize="+sliderSize+" <= 0");
139  }
140 
141  this.valueMin = valueMin;
142  valueSize = valueMax-valueMin;
143  this.sliderSize = Math.min(sliderSize, valueSize);
145  }
146 
147  @Override
148  protected void activeChanged() {
149  }
150 
151  @Override
152  public void mousePressed(@NotNull final MouseEvent e) {
153  super.mousePressed(e);
154 
155  if (!isEnabled()) {
156  return;
157  }
158 
159  switch (e.getButton()) {
160  case MouseEvent.BUTTON1:
161  final int sh = getSliderHeightPixels();
162  offset = e.getY()-getSliderPosPixels(sh);
163  if (offset < 0) {
165  } else if (offset >= sh) {
167  } else {
168  scrolling = true;
169  }
170  break;
171 
172  case MouseEvent.BUTTON2:
173  break;
174 
175  case MouseEvent.BUTTON3:
176  break;
177  }
178  }
179 
180  @Override
181  public void mouseReleased(@NotNull final MouseEvent e) {
182  super.mouseReleased(e);
183 
184  if (!isEnabled()) {
185  return;
186  }
187 
188  switch (e.getButton()) {
189  case MouseEvent.BUTTON1:
190  scrolling = false;
191  break;
192 
193  case MouseEvent.BUTTON2:
194  break;
195 
196  case MouseEvent.BUTTON3:
197  break;
198  }
199  }
200 
201  @Override
202  public void mouseDragged(@NotNull final MouseEvent e) {
203  super.mouseDragged(e);
204  if (isEnabled() && scrolling) {
206  }
207  }
208 
209  @Override
210  public void mouseWheelMoved(final int wheelRotation) {
211  super.mouseWheelMoved(wheelRotation);
212  scrollable.scroll(wheelRotation);
213  }
214 
215  @Nullable
216  @Override
218  return null;
219  }
220 
221  @Override
222  public void notifyOpen() {
223  }
224 
225  @Override
226  public void execute() {
227  // ignore
228  }
229 
235  private int getSliderPos(final int yPixels) {
236  return (int)Math.round(yPixels*(double)(valueSize-sliderSize)/(getHeight()-getSliderHeightPixels()));
237  }
238 
244  private void setPosition(final int pos) {
245  if (pos < valueMin) {
247  } else if (pos+sliderSize > valueMin+valueSize) {
249  } else {
250  sliderPos = pos;
251  }
252  setChanged();
253  }
254 
259  private int getSliderHeightPixels() {
260  return proportionalSlider ? Math.max((int)Math.round(getHeight()*(double)sliderSize/valueSize), getWidth()) : getWidth();
261  }
262 
268  private int getSliderPosPixels(final int sh) {
269  return (int)Math.round(sliderPos*(double)(getHeight()-sh)/(valueSize-sliderSize));
270  }
271 
272  @Override
273  public void paintComponent(@NotNull final Graphics g) {
274  super.paintComponent(g);
275  final int sh = getSliderHeightPixels();
276  final int sy = getSliderPosPixels(sh);
277  g.setColor(colorBackground);
278  g.fillRect(0, 0, getWidth(), sy);
279  g.fillRect(0, sy+sh, getWidth(), getHeight()-sy-sh);
280  g.setColor(colorForeground);
281  g.fillRect(0, sy, getWidth(), sh);
282  }
283 
284  @Nullable
285  @Override
286  @SuppressWarnings("MethodDoesntCallSuperMethod")
287  public Dimension getPreferredSize() {
288  return new Dimension(16, 64);
289  }
290 
291  @Nullable
292  @Override
293  @SuppressWarnings("MethodDoesntCallSuperMethod")
294  public Dimension getMinimumSize() {
295  return new Dimension(16, 16);
296  }
297 
298 }
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.name
final String name
Definition: AbstractGUIElement.java:77
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.skin.skin
Definition: DefaultJXCSkin.java:23
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.mousePressed
void mousePressed(@NotNull final MouseEvent e)
Definition: GUIScrollBar.java:152
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.mouseDragged
void mouseDragged(@NotNull final MouseEvent e)
Definition: GUIScrollBar.java:202
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.sliderSize
int sliderSize
Definition: GUIScrollBar.java:87
com.realtime.crossfire.jxclient.skin
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.mouseReleased
void mouseReleased(@NotNull final MouseEvent e)
Definition: GUIScrollBar.java:181
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable2.removeScrollableListener
void removeScrollableListener(@NotNull ScrollableListener listener)
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
Definition: ActivatableGUIElement.java:33
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.scrolling
boolean scrolling
Definition: GUIScrollBar.java:103
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getTooltip
TooltipText getTooltip()
Definition: GUIScrollBar.java:217
com.realtime.crossfire.jxclient.skin.skin.GuiFactory
Definition: GuiFactory.java:41
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.colorBackground
final Color colorBackground
Definition: GUIScrollBar.java:66
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.dispose
void dispose()
Definition: GUIScrollBar.java:127
com.realtime.crossfire.jxclient.gui.scrollable.ScrollableListener
Definition: ScrollableListener.java:31
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.paintComponent
void paintComponent(@NotNull final Graphics g)
Definition: GUIScrollBar.java:273
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.offset
int offset
Definition: GUIScrollBar.java:98
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.valueSize
int valueSize
Definition: GUIScrollBar.java:82
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.scrollable
final GUIScrollable2 scrollable
Definition: GUIScrollBar.java:60
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getSliderPos
int getSliderPos(final int yPixels)
Definition: GUIScrollBar.java:235
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.sliderPos
int sliderPos
Definition: GUIScrollBar.java:92
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getSliderHeightPixels
int getSliderHeightPixels()
Definition: GUIScrollBar.java:259
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getSliderPosPixels
int getSliderPosPixels(final int sh)
Definition: GUIScrollBar.java:268
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getPreferredSize
Dimension getPreferredSize()
Definition: GUIScrollBar.java:287
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.notifyOpen
void notifyOpen()
Definition: GUIScrollBar.java:222
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable2
Definition: GUIScrollable2.java:33
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.setRange
void setRange(final int valueMin, final int valueMax, final int sliderPos, final int sliderSize)
Definition: GUIScrollBar.java:133
com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement.elementListener
final GUIElementListener elementListener
Definition: ActivatableGUIElement.java:44
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.execute
void execute()
Definition: GUIScrollBar.java:226
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.setPosition
void setPosition(final int pos)
Definition: GUIScrollBar.java:244
com.realtime.crossfire.jxclient.gui.gui.TooltipManager
Definition: TooltipManager.java:33
com.realtime.crossfire.jxclient.gui.gui
Definition: AbstractGUIElement.java:23
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.valueMin
int valueMin
Definition: GUIScrollBar.java:77
com.realtime.crossfire.jxclient.gui.gui.TooltipText
Definition: TooltipText.java:31
com.realtime.crossfire
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.mouseWheelMoved
void mouseWheelMoved(final int wheelRotation)
Definition: GUIScrollBar.java:210
com.realtime
com.realtime.crossfire.jxclient.gui.scrollable
Definition: GUIScrollable.java:23
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.activeChanged
void activeChanged()
Definition: GUIScrollBar.java:148
com
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.GUIScrollBar
GUIScrollBar(@NotNull final TooltipManager tooltipManager, @NotNull final GUIElementListener elementListener, @NotNull final String name, final boolean proportionalSlider, @NotNull final GUIScrollable2 scrollable, @NotNull final Color colorBackground, @NotNull final Color colorForeground, @NotNull final GuiFactory guiFactory)
Definition: GUIScrollBar.java:117
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.setChanged
void setChanged()
Definition: AbstractGUIElement.java:223
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable2.scrollTo
void scrollTo(int pos)
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.guiFactory
final GuiFactory guiFactory
Definition: AbstractGUIElement.java:48
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.proportionalSlider
final boolean proportionalSlider
Definition: GUIScrollBar.java:54
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.getMinimumSize
Dimension getMinimumSize()
Definition: GUIScrollBar.java:294
com.realtime.crossfire.jxclient.gui.scrollable.GUIScrollable.scroll
void scroll(int distance)
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.serialVersionUID
static final long serialVersionUID
Definition: GUIScrollBar.java:48
com.realtime.crossfire.jxclient.gui.gui.GUIElementListener
Definition: GUIElementListener.java:32
com.realtime.crossfire.jxclient.gui.gui.AbstractGUIElement.tooltipManager
final TooltipManager tooltipManager
Definition: AbstractGUIElement.java:83
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar
Definition: GUIScrollBar.java:43
com.realtime.crossfire.jxclient.gui.misc.GUIScrollBar.colorForeground
final Color colorForeground
Definition: GUIScrollBar.java:72