From 0015f09cc1e17881c137da4d24efc332ca5203cc Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 14 Jan 2015 14:59:18 +0300 Subject: [PATCH] rich copy: make text pasted in target application have same size as original text in IDEA editor --- .../editor/richcopy/TextWithMarkupProcessor.java | 14 +++++++++++++- .../openapi/editor/richcopy/model/SyntaxInfo.java | 10 +++++----- .../editor/richcopy/view/HtmlTransferableData.java | 2 +- .../editor/richcopy/view/RtfTransferableData.java | 6 +++--- .../richcopy/SyntaxInfoConstructionTest.java | 2 +- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java index a70eed809667..cdabd8b98641 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfoType; import com.intellij.codeInsight.editorActions.CopyPastePostProcessor; import com.intellij.codeInsight.editorActions.CopyPastePreProcessor; import com.intellij.ide.highlighter.HighlighterFactory; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.colors.EditorColorsScheme; @@ -45,6 +46,7 @@ import com.intellij.openapi.editor.richcopy.view.RtfTransferableData; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; @@ -271,7 +273,17 @@ public class TextWithMarkupProcessor extends CopyPastePostProcessor"); + myResultBuffer.append(String.format("font-size:%.1fpt;\">", mySyntaxInfo.getFontSize())); mySyntaxInfo.processOutputInfo(this); diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java index 9424a37dd64a..bce01e88853e 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java @@ -77,8 +77,8 @@ public class RtfTransferableData extends AbstractSyntaxAwareInputStreamTransfera return "US-ASCII"; } - private static void addFontSize(StringBuilder buffer, int fontSize) { - buffer.append("\\fs").append(fontSize * 2); + private static void addFontSize(StringBuilder buffer, float fontSize) { + buffer.append("\\fs").append(Math.round(fontSize * 2)); } private static class MyVisitor implements MarkupHandler { @@ -88,7 +88,7 @@ public class RtfTransferableData extends AbstractSyntaxAwareInputStreamTransfera private final int myMaxLength; private final int myDefaultBackgroundId; - private final int myFontSize; + private final float myFontSize; private int myForegroundId = -1; private int myFontNameId = -1; private int myFontStyle = -1; diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/richcopy/SyntaxInfoConstructionTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/richcopy/SyntaxInfoConstructionTest.java index b7811e0ae40d..bdeffd5a13db 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/richcopy/SyntaxInfoConstructionTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/richcopy/SyntaxInfoConstructionTest.java @@ -305,7 +305,7 @@ public class SyntaxInfoConstructionTest extends LightPlatformCodeInsightFixtureT final ColorRegistry colorRegistry = syntaxInfo.getColorRegistry(); assertEquals(JBColor.BLACK, colorRegistry.dataById(syntaxInfo.getDefaultForeground())); assertEquals(JBColor.WHITE, colorRegistry.dataById(syntaxInfo.getDefaultBackground())); - assertEquals(getFontSize(), syntaxInfo.getFontSize()); + assertEquals((float)getFontSize(), syntaxInfo.getFontSize(), 0.01f); syntaxInfo.processOutputInfo(new MarkupHandler() { @Override public void handleText(int startOffset, int endOffset) throws Exception {