/* * Copyright 2014-2015 Cel Skeggs * * This file is part of the CCRE, the Common Chicken Runtime Engine. * * The CCRE is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * The CCRE is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with the CCRE. If not, see <http://www.gnu.org/licenses/>. */ package ccre.frc.components; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; import ccre.channel.FloatOutput; import ccre.frc.DeviceComponent; /** * A bar that can be modified to display a floating-point value * * @author skeggsc */ public class FillBarComponent extends DeviceComponent implements FloatOutput { private float value = 0.0f; @Override public int render(Graphics2D g, int width, int height, FontMetrics fontMetrics, int mouseX, int mouseY, int lastShift) { int startX = lastShift + 5; int startY = 5; int endX = width - 5; int endY = height - 5; int barWidth = endX - startX; int barHeight = endY - startY; int originX = startX + barWidth / 2; g.setColor(Color.WHITE); g.drawRect(startX - 1, startY - 1, barWidth + 1, barHeight + 1); g.setColor(Color.CYAN); int actualLimitX = Math.round((barWidth / 2f) * Math.min(1, Math.max(-1, value))); if (actualLimitX < 0) { g.fillRect(originX + actualLimitX, startY, -actualLimitX, barHeight); } else { g.fillRect(originX, startY, actualLimitX, barHeight); } return width; } @Override public void set(float value) { this.value = value; } }