/* * Copyright (c) 2016, MGrossmann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.nattable.impl.plugin.painter; import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes; import org.eclipse.nebula.widgets.nattable.style.DisplayMode; import org.eclipse.nebula.widgets.nattable.style.IStyle; import org.eclipse.nebula.widgets.nattable.util.GUIHelper; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.jowidgets.common.color.IColorConstant; import org.jowidgets.common.model.ITableCell; import org.jowidgets.common.types.Markup; import org.jowidgets.spi.impl.swt.common.color.IColorCache; import org.jowidgets.spi.impl.swt.common.color.RememberLastColorCache; import org.jowidgets.spi.impl.swt.common.options.SwtOptions; import org.jowidgets.spi.impl.swt.common.util.FontProvider; final class JoCellTextPainter extends AbstractJoTextPainter { private final IColorConstant defaultSelectedForegroundColor; private final IColorCache foregroundColorCache; private final IColorCache selectedForegroundColorCache; private Color originalForeground; private Font originalFont; JoCellTextPainter() { this.defaultSelectedForegroundColor = SwtOptions.getTableSelectedForegroundColor(); this.foregroundColorCache = new RememberLastColorCache(); this.selectedForegroundColorCache = new RememberLastColorCache(); } @Override void setupGC(final GC gc, final ILayerCell layerCell, final IStyle cellStyle) { final ITableCell tableCell = (ITableCell) layerCell.getDataValue(); this.originalFont = gc.getFont(); this.originalForeground = gc.getForeground(); gc.setAntialias(GUIHelper.DEFAULT_ANTIALIAS); gc.setTextAntialias(GUIHelper.DEFAULT_TEXT_ANTIALIAS); gc.setFont(getFont(tableCell, cellStyle)); gc.setForeground(getForegroundColor(tableCell, layerCell, cellStyle)); } @Override public void resetGC(final GC gc) { gc.setFont(this.originalFont); gc.setForeground(this.originalForeground); } private Font getFont(final ITableCell cell, final IStyle style) { final Font result = style.getAttributeValue(CellStyleAttributes.FONT); final Markup markup = cell.getMarkup(); if (markup != null && !Markup.DEFAULT.equals(markup)) { return FontProvider.deriveFont(result, markup); } else { return result; } } private Color getForegroundColor(final ITableCell tableCell, final ILayerCell layerCell, final IStyle style) { final Color defaultForeground = style.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR); if (DisplayMode.NORMAL.equals(layerCell.getDisplayMode())) { final IColorConstant foreground = tableCell.getForegroundColor(); if (foreground != null) { return foregroundColorCache.getColor(foreground); } } else if (DisplayMode.SELECT.equals(layerCell.getDisplayMode())) { IColorConstant selectedForeground = tableCell.getSelectedForegroundColor(); if (selectedForeground == null) { selectedForeground = defaultSelectedForegroundColor; } if (selectedForeground != null) { return selectedForegroundColorCache.getColor(selectedForeground); } } return defaultForeground != null ? defaultForeground : GUIHelper.COLOR_LIST_FOREGROUND; } }