Ticket #2149: links_highlights_foreground.patch

File links_highlights_foreground.patch, 4.9 KB (added by tanya, 15 years ago)
  • modules/org.sophie2.base.model.text/src/main/java/org/sophie2/base/model/text/smart/layout/HotSegmentLayout.java

    ### Eclipse Workspace Patch 1.0
    #P sophie
     
    22 
    33import java.awt.Color; 
    44import java.awt.Graphics2D; 
     5import java.awt.RenderingHints; 
    56import java.awt.Shape; 
    67import java.awt.font.LineBreakMeasurer; 
    78import java.awt.font.TextHitInfo; 
    89import java.awt.font.TextLayout; 
     10import java.awt.geom.AffineTransform; 
     11import java.awt.geom.Area; 
    912import java.util.Comparator; 
    1013import java.util.Iterator; 
    1114 
     
    9497                Graphics2D graphics = (Graphics2D) g2d.create(); 
    9598                graphics.translate(x, y); 
    9699                awtLayout.draw(graphics, 0f, 0f); 
     100                awtLayout.draw(graphics, 0f, 0f); 
     101 
    97102                boolean caretHandled = false; 
    98103                for (Iterator<HotHighlight> iter = highlights.getIterator(); iter.hasNext();) { 
    99104                        HotHighlight highlight = iter.next(); 
     
    131136                        // Retrieve highlight region for selection range. 
    132137                        Shape highlightShape = awtLayout.getLogicalHighlightShape( 
    133138                                        interval.getBegin(), interval.getEnd()); 
    134                     // Fill the highlight region with the highlight color. 
    135                     ImmColor bgColor = (ImmColor)highlight.getStyle().getValue(CommonAttr.BACKGROUND_COLOR); 
     139                        Shape highlightOutline = awtLayout.getOutline(new AffineTransform()); 
     140 
     141                        Area areaOuline = new Area(highlightOutline); 
     142                        Area areaBounding = new Area(highlightShape); 
     143 
     144                        areaOuline.intersect(areaBounding); 
     145                        areaBounding.subtract(areaOuline); 
    136146 
    137                     graphics.setColor(bgColor.toAwtColor()); 
    138                     graphics.fill(highlightShape); 
     147                        // Fill the highlight region with the background highlight color. 
     148                        ImmColor bgColor = (ImmColor) highlight.getStyle() 
     149                                        .getValue(CommonAttr.BACKGROUND_COLOR); 
     150 
     151                        // Fill the highlight outline with the foreground highlight color. 
     152                        ImmColor fgColor = (ImmColor) highlight.getStyle() 
     153                                        .getValue(CommonAttr.FOREGROUND_COLOR); 
     154 
     155                        int clearX = (int) highlightShape.getBounds().getX(); 
     156                        int clearY = (int) highlightShape.getBounds().getY(); 
     157                        int clearWidth = (int) highlightShape.getBounds().getWidth(); 
     158                        int clearHeight = (int) highlightShape.getBounds().getHeight(); 
     159 
     160                        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     161                         
     162                        graphics.clearRect(clearX, clearY, clearWidth, clearHeight); 
     163 
     164                        graphics.setColor(bgColor.toAwtColor()); 
     165                        graphics.fill(areaBounding); 
     166 
     167 
     168                        graphics.setColor(fgColor.toAwtColor()); 
     169                        graphics.fill(areaOuline); 
    139170                } 
     171                 
    140172                if (withCaret) { 
    141173                        HotPos caretPos = end; 
    142174                        HotPos textEnd = this.text.getEnd(); 
  • modules/org.sophie2.base.scene/src/main/java/org/sophie2/base/scene/helpers/HotTextElementHelper.java

     
    9595                         
    9696                        Map<HotAttr<?>, Object> styleValues = new HashMap<HotAttr<?>, Object>(); 
    9797                        styleValues.put(CommonAttr.BACKGROUND_COLOR, SELECTION_BACKGROUND_COLOR); 
     98                        styleValues.put(CommonAttr.FOREGROUND_COLOR, ImmColor.WHITE); 
    9899                        HotStyleDef style = HotStyleDef.getEmpty().derive(styleValues); 
    99100                        HotHighlight selectionHighlight = new HotHighlight(new HotInterval(markPos, caretPos),  
    100101                                        style); 
  • modules/org.sophie2.main.func.text/src/main/java/org/sophie2/main/func/text/view/HeadTextFrameView.java

     
    6060 * @author kyli 
    6161 */ 
    6262public class HeadTextFrameView extends TextFrameView { 
     63         
     64        /** 
     65         * The color of the background of links. 
     66         */ 
     67        static ImmColor BACKGROUND_LINKS_COLOR = ImmColor.YELLOW; 
    6368 
    6469        /** 
    6570         * A constructor with {@link ResourceAccess}. 
     
    246251 
    247252                                                                        private HotHighlight createBgHighlight(HotInterval interval, ImmColor color) { 
    248253                                                                                Map<HotAttr<?>, Object> styleValues = new HashMap<HotAttr<?>, Object>(); 
    249                                                                                 styleValues.put(CommonAttr.BACKGROUND_COLOR, color); 
     254                                                                                styleValues.put(CommonAttr.FOREGROUND_COLOR, color); 
     255                                                                                styleValues.put(CommonAttr.BACKGROUND_COLOR, BACKGROUND_LINKS_COLOR); 
    250256                                                                                HotStyleDef style = HotStyleDef.getEmpty().derive(styleValues); 
    251257 
    252258                                                                                return new HotHighlight(interval, style);