| /******************************************************************************* |
| * Copyright (c) 2012, 2020 Original authors and others. |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Original authors and others - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.nebula.widgets.nattable.painter.cell.decorator; |
| |
| import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry; |
| import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; |
| import org.eclipse.nebula.widgets.nattable.painter.cell.BackgroundPainter; |
| import org.eclipse.nebula.widgets.nattable.painter.cell.ICellPainter; |
| import org.eclipse.nebula.widgets.nattable.util.GUIHelper; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Rectangle; |
| |
| public class XPBackgroundDecorator extends BackgroundPainter { |
| |
| public final Color separatorColor; |
| |
| public final Color gradientColor1; |
| public final Color gradientColor2; |
| public final Color gradientColor3; |
| |
| public final Color highlightColor1; |
| public final Color highlightColor2; |
| public final Color highlightColor3; |
| |
| public XPBackgroundDecorator(ICellPainter interiorPainter) { |
| super(interiorPainter); |
| |
| this.separatorColor = GUIHelper.getColor(199, 197, 178); |
| |
| this.gradientColor1 = GUIHelper.getColor(226, 222, 205); |
| this.gradientColor2 = GUIHelper.getColor(214, 210, 194); |
| this.gradientColor3 = GUIHelper.getColor(203, 199, 184); |
| |
| this.highlightColor1 = GUIHelper.getColor(250, 171, 0); |
| this.highlightColor2 = GUIHelper.getColor(252, 194, 71); |
| this.highlightColor3 = GUIHelper.getColor(250, 178, 24); |
| } |
| |
| @Override |
| public int getPreferredWidth(ILayerCell cell, GC gc, |
| IConfigRegistry configRegistry) { |
| return super.getPreferredWidth(cell, gc, configRegistry) + 4; |
| } |
| |
| @Override |
| public int getPreferredHeight(ILayerCell cell, GC gc, |
| IConfigRegistry configRegistry) { |
| return super.getPreferredHeight(cell, gc, configRegistry) + 4; |
| } |
| |
| @Override |
| public void paintCell(ILayerCell cell, GC gc, Rectangle rectangle, |
| IConfigRegistry configRegistry) { |
| // Draw background |
| super.paintCell(cell, gc, rectangle, configRegistry); |
| |
| // Draw interior |
| Rectangle interiorBounds = new Rectangle(rectangle.x + 2, |
| rectangle.y + 2, rectangle.width - 4, rectangle.height - 4); |
| super.paintCell(cell, gc, interiorBounds, configRegistry); |
| |
| // Save GC settings |
| Color originalBackground = gc.getBackground(); |
| Color originalForeground = gc.getForeground(); |
| |
| // Draw separator |
| int x = rectangle.x; |
| gc.setForeground(GUIHelper.COLOR_WHITE); |
| gc.drawLine(x, rectangle.y + 3, x, rectangle.y + rectangle.height - 6); |
| |
| x = rectangle.x + rectangle.width - 1; |
| gc.setForeground(this.separatorColor); |
| gc.drawLine(x, rectangle.y + 3, x, rectangle.y + rectangle.height - 6); |
| |
| // Restore GC settings |
| gc.setBackground(originalBackground); |
| gc.setForeground(originalForeground); |
| |
| // Draw bottom edge |
| int y = rectangle.y + rectangle.height - 3; |
| gc.setForeground(this.gradientColor1); |
| gc.drawLine(rectangle.x, y, rectangle.x + rectangle.width, y); |
| |
| y++; |
| gc.setForeground(this.gradientColor2); |
| gc.drawLine(rectangle.x, y, rectangle.x + rectangle.width, y); |
| |
| y++; |
| gc.setForeground(this.gradientColor3); |
| gc.drawLine(rectangle.x, y, rectangle.x + rectangle.width, y); |
| } |
| |
| } |