예제 #1
0
        private FontFamily GetFontFamily(FontAndColorsResourceKey key)
        {
            const __FCSTORAGEFLAGS flags = __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS |
                                           __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS;

            fncStorage.OpenCategory(key.Category, (uint)flags);
            try {
                var fontInfos = new FontInfo[1];
                if (fncStorage.GetFont(null, fontInfos) != VSConstants.S_OK)
                {
                    return(null);
                }

                if (fontInfos[0].bFaceNameValid == 1)
                {
                    return(new FontFamily(fontInfos[0].bstrFaceName));
                }

                return(null);
            } finally {
                fncStorage.CloseCategory();
            }
        }
예제 #2
0
        private object RealizeValue(FontAndColorsResourceKey key)
        {
            if (key.KeyType == FontAndColorsResourceKeyType.FontFamily)
            {
                return(GetFontFamily(key));
            }
            if (key.KeyType == FontAndColorsResourceKeyType.FontSize)
            {
                return(GetFontSize(key));
            }

            Color color = GetRgbaColorValue(key).ToColorFromRgba();

            if (!IsBrushKeyType(key.KeyType))
            {
                return(color);
            }

            var brush = new SolidColorBrush(color);

            brush.Freeze();
            return(brush);
        }
예제 #3
0
        private uint GetRgbaColorValue(FontAndColorsResourceKey key)
        {
            const __FCSTORAGEFLAGS flags = __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS |
                                           __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS;

            fncStorage.OpenCategory(key.Category, (uint)flags);
            try {
                var itemInfos = new ColorableItemInfo[1];
                if (fncStorage.GetItem(key.Name, itemInfos) != VSConstants.S_OK)
                {
                    return(0xFF000000);
                }

                uint color;
                switch (key.KeyType)
                {
                case FontAndColorsResourceKeyType.ForegroundColor:
                case FontAndColorsResourceKeyType.ForegroundBrush:
                    color = itemInfos[0].crForeground;
                    break;

                case FontAndColorsResourceKeyType.BackgroundColor:
                case FontAndColorsResourceKeyType.BackgroundBrush:
                    color = itemInfos[0].crBackground;
                    break;

                default:
                    color = 0;
                    break;
                }

                color |= 0xFF000000;
                return(color);
            } finally {
                fncStorage.CloseCategory();
            }
        }
예제 #4
0
        private double GetFontSize(FontAndColorsResourceKey key)
        {
            const __FCSTORAGEFLAGS flags = __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS |
                                           __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS;
            const double defaultFontSize = 9;

            fncStorage.OpenCategory(key.Category, (uint)flags);
            try {
                var fontInfos = new FontInfo[1];
                if (fncStorage.GetFont(null, fontInfos) != VSConstants.S_OK)
                {
                    return(defaultFontSize);
                }

                if (fontInfos[0].bPointSizeValid == 1)
                {
                    return(FontUtils.FontSizeFromPointSize(fontInfos[0].wPointSize));
                }

                return(defaultFontSize);
            } finally {
                fncStorage.CloseCategory();
            }
        }