Ejemplo n.º 1
0
        /// <summary>
        /// Apply DPI scale factor and transform toolbar
        /// </summary>
        /// <param name="toolbar">The toolbar to update</param>
        /// <param name="baseHeight">The base height of toolbar</param>
        public static void TransformToolbar(ref ToolStripToolTip toolbar, int baseHeight)
        {
            // Update size of toolbar
            toolbar.Height = TransformNumber(baseHeight);

            // Get new toolbar item height
            int newBtnHeight = (int)Math.Floor(toolbar.Height * 0.8);

            // Update toolbar items size of Tool bar buttons
            foreach (var item in toolbar.Items.OfType <ToolStripButton>())
            {
                item.Size = new Size(newBtnHeight, newBtnHeight);
            }

            // Update toolbar items size of Tool bar menu buttons
            foreach (var item in toolbar.Items.OfType <ToolStripDropDownButton>())
            {
                item.Size = new Size(newBtnHeight, newBtnHeight);
            }

            // get correct icon height
            var hIcon = ThemeImage.GetCorrectBaseIconHeight();

            // Tool bar separators
            foreach (var item in toolbar.Items.OfType <ToolStripSeparator>())
            {
                item.Size   = new Size(5, (int)(hIcon * 1.2));
                item.Margin = new Padding((int)(hIcon * 0.15), 0, (int)(hIcon * 0.15), 0);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Reload the image icons to adapt DPI changes
        /// </summary>
        /// <param name="iconHeight">The height of toolbar icons</param>
        public void ReloadIcons(int iconHeight)
        {
            ToolbarIcons.ViewPreviousImage.Refresh(iconHeight);
            ToolbarIcons.ViewNextImage.Refresh(iconHeight);
            ToolbarIcons.RotateLeft.Refresh(iconHeight);
            ToolbarIcons.RotateRight.Refresh(iconHeight);
            ToolbarIcons.FlipHorz.Refresh(iconHeight);
            ToolbarIcons.FlipVert.Refresh(iconHeight);
            ToolbarIcons.Delete.Refresh(iconHeight);
            ToolbarIcons.Edit.Refresh(iconHeight);
            ToolbarIcons.Crop.Refresh(iconHeight);
            ToolbarIcons.ColorPicker.Refresh(iconHeight);
            ToolbarIcons.ZoomIn.Refresh(iconHeight);
            ToolbarIcons.ZoomOut.Refresh(iconHeight);
            ToolbarIcons.ScaleToFit.Refresh(iconHeight);
            ToolbarIcons.ActualSize.Refresh(iconHeight);
            ToolbarIcons.LockRatio.Refresh(iconHeight);
            ToolbarIcons.AutoZoom.Refresh(iconHeight);
            ToolbarIcons.ScaleToWidth.Refresh(iconHeight);
            ToolbarIcons.ScaleToHeight.Refresh(iconHeight);
            ToolbarIcons.ScaleToFill.Refresh(iconHeight);
            ToolbarIcons.AdjustWindowSize.Refresh(iconHeight);
            ToolbarIcons.OpenFile.Refresh(iconHeight);
            ToolbarIcons.Refresh.Refresh(iconHeight);
            ToolbarIcons.GoToImage.Refresh(iconHeight);
            ToolbarIcons.ThumbnailBar.Refresh(iconHeight);
            ToolbarIcons.Checkerboard.Refresh(iconHeight);
            ToolbarIcons.FullScreen.Refresh(iconHeight);
            ToolbarIcons.Slideshow.Refresh(iconHeight);
            ToolbarIcons.Convert.Refresh(iconHeight);
            ToolbarIcons.Print.Refresh(iconHeight);
            ToolbarIcons.Settings.Refresh(iconHeight);
            ToolbarIcons.About.Refresh(iconHeight);
            ToolbarIcons.Menu.Refresh(iconHeight);
            ToolbarIcons.ViewFirstImage.Refresh(iconHeight);
            ToolbarIcons.ViewLastImage.Refresh(iconHeight);

            #region Navigation arrows (derived from toolbar)

            var arrowHeight = (int)(DPIScaling.Transform(Constants.DEFAULT_TOOLBAR_ICON_HEIGHT) * NavArrowMultiplier);

            var navArrowTemp = new ThemeImage(ToolbarIcons.ViewPreviousImage.Filename, arrowHeight);
            navArrowTemp.Refresh(arrowHeight);
            NavArrowLeft = navArrowTemp.Image;

            navArrowTemp = new ThemeImage(ToolbarIcons.ViewNextImage.Filename, arrowHeight);
            navArrowTemp.Refresh(arrowHeight);
            NavArrowRight = navArrowTemp.Image;

            #endregion
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Reload the image icons to adapt DPI changes
        /// </summary>
        public void ReloadIcons()
        {
            ToolbarIcons.ViewPreviousImage.Refresh();
            ToolbarIcons.ViewNextImage.Refresh();
            ToolbarIcons.RotateLeft.Refresh();
            ToolbarIcons.RotateRight.Refresh();
            ToolbarIcons.FlipHorz.Refresh();
            ToolbarIcons.FlipVert.Refresh();
            ToolbarIcons.Detele.Refresh();
            ToolbarIcons.Edit.Refresh();
            ToolbarIcons.ZoomIn.Refresh();
            ToolbarIcons.ZoomOut.Refresh();
            ToolbarIcons.ScaleToFit.Refresh();
            ToolbarIcons.ActualSize.Refresh();
            ToolbarIcons.LockRatio.Refresh();
            ToolbarIcons.AutoZoom.Refresh();
            ToolbarIcons.ScaleToWidth.Refresh();
            ToolbarIcons.ScaleToHeight.Refresh();
            ToolbarIcons.ScaleToFill.Refresh();
            ToolbarIcons.AdjustWindowSize.Refresh();
            ToolbarIcons.OpenFile.Refresh();
            ToolbarIcons.Refresh.Refresh();
            ToolbarIcons.GoToImage.Refresh();
            ToolbarIcons.ThumbnailBar.Refresh();
            ToolbarIcons.Checkerboard.Refresh();
            ToolbarIcons.FullScreen.Refresh();
            ToolbarIcons.Slideshow.Refresh();
            ToolbarIcons.Convert.Refresh();
            ToolbarIcons.Print.Refresh();
            ToolbarIcons.Settings.Refresh();
            ToolbarIcons.About.Refresh();
            ToolbarIcons.Menu.Refresh();
            ToolbarIcons.ViewFirstImage.Refresh();
            ToolbarIcons.ViewLastImage.Refresh();


            #region Arrow cursors (derived from toolbar)

            var arrowHeight = DPIScaling.TransformNumber(Constants.TOOLBAR_ICON_HEIGHT) * 2;
            var prevImage = new ThemeImage(ToolbarIcons.ViewPreviousImage.Filename, arrowHeight);
            var icon = prevImage.Image.GetHicon();
            PreviousArrowCursor = new Cursor(icon);

            var nextImage = new ThemeImage(ToolbarIcons.ViewNextImage.Filename, arrowHeight);
            icon = nextImage.Image.GetHicon();
            NextArrowCursor = new Cursor(icon);

            #endregion
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Read theme data from theme configuration file (Version 1.5+).
        /// Return TRUE if successful, FALSE if the theme format is invalid
        /// </summary>
        /// <param name="themeFolderPath">The absolute path of theme folder.</param>
        /// <param name="startUpDir">The absolute startup folder of ImageGlass</param>
        /// <returns></returns>
        public bool LoadTheme(string themeFolderPath)
        {
            var configFilePath = Path.Combine(themeFolderPath, "config.xml");

            if (!File.Exists(configFilePath))
            {
                configFilePath = App.StartUpDir(Dir.DefaultTheme, "config.xml");
            }

            this.ConfigFilePath = configFilePath;
            this.FolderName     = Path.GetFileName(themeFolderPath); // get folder name

            var dir = Path.GetDirectoryName(configFilePath);
            var doc = new XmlDocument();

            doc.Load(configFilePath);

            var        root  = doc.DocumentElement;
            XmlElement nType = null;
            XmlElement n     = null;

            try {
                //Load theme version 1.5+ as default
                nType = (XmlElement)root.SelectNodes("Theme")[0]; //<Theme>
                n     = (XmlElement)nType.SelectNodes("Info")[0]; //<Info>
            }
            catch {
                this.IsValid = false;
            }


            #region Theme <Info>
            try { Name = n.GetAttribute("name"); }
            catch { };
            try { Version = n.GetAttribute("version"); }
            catch { };
            try { Author = n.GetAttribute("author"); }
            catch { };
            try { Email = n.GetAttribute("email"); }
            catch { };
            try { Website = n.GetAttribute("website"); }
            catch { };
            try { Description = n.GetAttribute("description"); }
            catch { };
            try { Type = n.GetAttribute("type"); }
            catch { };
            try { Compatibility = n.GetAttribute("compatibility"); }
            catch { };
            #endregion


            #region Theme <main>
            PreviewImage = LoadThemeImage(dir, n, "preview");

            n = (XmlElement)nType.SelectNodes("main")[0]; //<main>

            ToolbarBackgroundImage = LoadThemeImage(dir, n, "topbar");

            var color = FetchColorAttribute(n, "topbarcolor");
            if (color != Color.Transparent)
            {
                ToolbarBackgroundColor = color;
            }

            ThumbnailBackgroundImage = LoadThemeImage(dir, n, "bottombar");

            color = FetchColorAttribute(n, "bottombarcolor");
            if (color != Color.Transparent)
            {
                ThumbnailBackgroundColor = color;
            }

            color = FetchColorAttribute(n, "backcolor");
            if (color != Color.Transparent)
            {
                BackgroundColor = color;
            }

            color = FetchColorAttribute(n, "statuscolor");
            if (color != Color.Transparent)
            {
                TextInfoColor = color;
            }

            color = FetchColorAttribute(n, "menubackgroundcolor");
            if (color != Color.Transparent)
            {
                MenuBackgroundColor = color;
            }

            color = FetchColorAttribute(n, "menutextcolor");
            if (color != Color.Transparent)
            {
                MenuTextColor = color;
            }


            // For 7.6: add ability to control the size of the navigation arrows
            // Minimum value is 1.0, default is 2.0.
            try {
                var colorString = n.GetAttribute("navarrowsize");
                if (!string.IsNullOrWhiteSpace(colorString))
                {
                    if (!double.TryParse(colorString, out var val))
                    {
                        val = 2.0;
                    }
                    val = Math.Max(val, 1.0);

                    NavArrowMultiplier = val;
                }
            }
            catch (Exception ex) { };

            #endregion


            #region Theme <toolbar_icon>
            n = (XmlElement)nType.SelectNodes("toolbar_icon")[0]; //<toolbar_icon>

            ToolbarIcons.ViewPreviousImage = LoadThemeImage(dir, n, "back");
            ToolbarIcons.ViewNextImage     = LoadThemeImage(dir, n, "next");
            ToolbarIcons.RotateLeft        = LoadThemeImage(dir, n, "leftrotate");
            ToolbarIcons.RotateRight       = LoadThemeImage(dir, n, "rightrotate");
            ToolbarIcons.FlipHorz          = LoadThemeImage(dir, n, "fliphorz");
            ToolbarIcons.FlipVert          = LoadThemeImage(dir, n, "flipvert");
            ToolbarIcons.Delete            = LoadThemeImage(dir, n, "delete");
            ToolbarIcons.Edit             = LoadThemeImage(dir, n, "edit");
            ToolbarIcons.Crop             = LoadThemeImage(dir, n, "crop");
            ToolbarIcons.ColorPicker      = LoadThemeImage(dir, n, "colorpicker");
            ToolbarIcons.ZoomIn           = LoadThemeImage(dir, n, "zoomin");
            ToolbarIcons.ZoomOut          = LoadThemeImage(dir, n, "zoomout");
            ToolbarIcons.ScaleToFit       = LoadThemeImage(dir, n, "zoomtofit");
            ToolbarIcons.ActualSize       = LoadThemeImage(dir, n, "scaletofit");
            ToolbarIcons.LockRatio        = LoadThemeImage(dir, n, "zoomlock");
            ToolbarIcons.AutoZoom         = LoadThemeImage(dir, n, "autozoom");
            ToolbarIcons.ScaleToWidth     = LoadThemeImage(dir, n, "scaletowidth");
            ToolbarIcons.ScaleToHeight    = LoadThemeImage(dir, n, "scaletoheight");
            ToolbarIcons.ScaleToFill      = LoadThemeImage(dir, n, "scaletofill");
            ToolbarIcons.AdjustWindowSize = LoadThemeImage(dir, n, "autosizewindow");
            ToolbarIcons.OpenFile         = LoadThemeImage(dir, n, "open");
            ToolbarIcons.Refresh          = LoadThemeImage(dir, n, "refresh");
            ToolbarIcons.GoToImage        = LoadThemeImage(dir, n, "gotoimage");
            ToolbarIcons.ThumbnailBar     = LoadThemeImage(dir, n, "thumbnail");
            ToolbarIcons.Checkerboard     = LoadThemeImage(dir, n, "checkerboard");
            ToolbarIcons.FullScreen       = LoadThemeImage(dir, n, "fullscreen");
            ToolbarIcons.Slideshow        = LoadThemeImage(dir, n, "slideshow");
            ToolbarIcons.Convert          = LoadThemeImage(dir, n, "convert");
            ToolbarIcons.Print            = LoadThemeImage(dir, n, "print");
            ToolbarIcons.Settings         = LoadThemeImage(dir, n, "settings");
            ToolbarIcons.About            = LoadThemeImage(dir, n, "about");
            ToolbarIcons.Menu             = LoadThemeImage(dir, n, "menu");
            ToolbarIcons.ViewFirstImage   = LoadThemeImage(dir, n, "gofirst");
            ToolbarIcons.ViewLastImage    = LoadThemeImage(dir, n, "golast");
            #endregion


            #region Arrow cursors (derived from toolbar)

            var arrowHeight = (int)(DPIScaling.Transform(Constants.TOOLBAR_ICON_HEIGHT) * NavArrowMultiplier);

            NavArrowLeft  = new ThemeImage(ToolbarIcons.ViewPreviousImage.Filename, arrowHeight).Image;
            NavArrowRight = new ThemeImage(ToolbarIcons.ViewNextImage.Filename, arrowHeight).Image;

            #endregion


            this.IsValid = true;
            return(this.IsValid);


            // Fetch a color attribute value from the theme config file.
            // Returns: a Color value if valid; Color.Transparent if an error
            Color FetchColorAttribute(XmlElement xmlElement, string attribute)
            {
                try {
                    var colorString = xmlElement.GetAttribute(attribute);

                    if (IsValidHex(colorString))
                    {
                        return(ConvertHexStringToColor(colorString, true));
                    }

                    return(Color.FromArgb(255, Color.FromArgb(int.Parse(colorString))));
                }
                catch {
                    // ignored
                }

                return(Color.Transparent);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Read theme data from theme configuration file (Version 1.5+).
        /// Return TRUE if successful, FALSE if the theme format is invalid
        /// </summary>
        /// <param name="iconHeight">The height of toolbar icons</param>
        /// <param name="themeFolderPath">The absolute path of theme folder.</param>
        /// <returns></returns>
        public bool LoadTheme(int iconHeight, string themeFolderPath)
        {
            // check and process legacy config filename
            this.ConfigFilePath = ProcessLegacyTheme(themeFolderPath);
            this.FolderName     = Path.GetFileName(themeFolderPath); // get folder name

            var dir = Path.GetDirectoryName(this.ConfigFilePath);
            var doc = new XmlDocument();

            doc.Load(this.ConfigFilePath);

            var        root  = doc.DocumentElement;
            XmlElement nType = null;
            XmlElement n     = null;

            try {
                //Load theme version 1.5+ as default
                nType = (XmlElement)root.SelectNodes("Theme")[0]; //<Theme>
                n     = (XmlElement)nType.SelectNodes("Info")[0]; //<Info>
            }
            catch {
                this.IsValid = false;
            }


            #region Theme <Info>
            try { Name = n.GetAttribute("name"); }
            catch { }
            try { Version = n.GetAttribute("version"); }
            catch { }
            try { Author = n.GetAttribute("author"); }
            catch { }
            try { Email = n.GetAttribute("email"); }
            catch { }
            try { Website = n.GetAttribute("website"); }
            catch { }
            try { Description = n.GetAttribute("description"); }
            catch { }
            try { Type = n.GetAttribute("type"); }
            catch { }
            try {
                ConfigVersion = n.GetAttribute("configversion");
                ConfigVersion = string.IsNullOrWhiteSpace(ConfigVersion) ? CONFIG_VERSION : ConfigVersion;
            }
            catch { }
            #endregion


            #region Theme <main>
            PreviewImage = LoadThemeImage(dir, n, "preview", iconHeight);

            n = (XmlElement)nType.SelectNodes("main")[0]; //<main>

            ToolbarBackgroundImage = LoadThemeImage(dir, n, "topbar", iconHeight);

            var color = FetchColorAttribute(n, "topbarcolor");
            if (color != Color.Transparent)
            {
                ToolbarBackgroundColor = color;
            }

            ThumbnailBackgroundImage = LoadThemeImage(dir, n, "bottombar", iconHeight);

            color = FetchColorAttribute(n, "bottombarcolor");
            if (color != Color.Transparent)
            {
                ThumbnailBackgroundColor = color;
            }

            color = FetchColorAttribute(n, "backcolor");
            if (color != Color.Transparent)
            {
                BackgroundColor = color;
            }

            color = FetchColorAttribute(n, "statuscolor");
            if (color != Color.Transparent)
            {
                TextInfoColor = color;
            }

            color = FetchColorAttribute(n, "menubackgroundcolor");
            if (color != Color.Transparent)
            {
                MenuBackgroundColor = color;
            }

            color = FetchColorAttribute(n, "menubackgroundhovercolor");
            if (color != Color.Transparent)
            {
                MenuBackgroundHoverColor = color;
            }

            color = FetchColorAttribute(n, "menutextcolor");
            if (color != Color.Transparent)
            {
                MenuTextColor = color;
            }

            color = FetchColorAttribute(n, "menutexthovercolor");
            if (color != Color.Transparent)
            {
                MenuTextHoverColor = color;
            }

            // For 7.6: add ability to control the size of the navigation arrows
            // Minimum value is 1.0, default is 2.0.
            try {
                var colorString = n.GetAttribute("navarrowsize");
                if (!string.IsNullOrWhiteSpace(colorString))
                {
                    if (!double.TryParse(colorString, out var val))
                    {
                        val = 2.0;
                    }

                    val = Math.Max(val, 1.0);

                    NavArrowMultiplier = val;
                }
            }
            catch { }

            // v8.0: Accent colors
            color = FetchColorAttribute(n, "accentcolor");
            if (color != Color.Transparent)
            {
                AccentColor = color;
            }

            color = FetchColorAttribute(n, "accentlightcolor");
            if (color != Color.Transparent)
            {
                AccentLightColor = color;
            }

            color = FetchColorAttribute(n, "accentdarkcolor");
            if (color != Color.Transparent)
            {
                AccentDarkColor = color;
            }

            // v8.0: Form icon
            Logo = LoadThemeImage(dir, n, "logo", 128);
            if (Logo.Image is null)
            {
                Logo.Image = Properties.Resources.DefaultLogo;
            }

            // v8.0: Show icon on title bar
            if (bool.TryParse(n.GetAttribute("isshowtitlebarlogo"), out var showLogo))
            {
                IsShowTitlebarLogo = showLogo;
            }

            #endregion


            #region Theme <toolbar_icon>
            n = (XmlElement)nType.SelectNodes("toolbar_icon")[0]; //<toolbar_icon>

            ToolbarIcons.ViewPreviousImage = LoadThemeImage(dir, n, "back", iconHeight);
            ToolbarIcons.ViewNextImage     = LoadThemeImage(dir, n, "next", iconHeight);
            ToolbarIcons.RotateLeft        = LoadThemeImage(dir, n, "leftrotate", iconHeight);
            ToolbarIcons.RotateRight       = LoadThemeImage(dir, n, "rightrotate", iconHeight);
            ToolbarIcons.FlipHorz          = LoadThemeImage(dir, n, "fliphorz", iconHeight);
            ToolbarIcons.FlipVert          = LoadThemeImage(dir, n, "flipvert", iconHeight);
            ToolbarIcons.Delete            = LoadThemeImage(dir, n, "delete", iconHeight);
            ToolbarIcons.Edit             = LoadThemeImage(dir, n, "edit", iconHeight);
            ToolbarIcons.Crop             = LoadThemeImage(dir, n, "crop", iconHeight);
            ToolbarIcons.ColorPicker      = LoadThemeImage(dir, n, "colorpicker", iconHeight);
            ToolbarIcons.ZoomIn           = LoadThemeImage(dir, n, "zoomin", iconHeight);
            ToolbarIcons.ZoomOut          = LoadThemeImage(dir, n, "zoomout", iconHeight);
            ToolbarIcons.ScaleToFit       = LoadThemeImage(dir, n, "zoomtofit", iconHeight);
            ToolbarIcons.ActualSize       = LoadThemeImage(dir, n, "scaletofit", iconHeight);
            ToolbarIcons.LockRatio        = LoadThemeImage(dir, n, "zoomlock", iconHeight);
            ToolbarIcons.AutoZoom         = LoadThemeImage(dir, n, "autozoom", iconHeight);
            ToolbarIcons.ScaleToWidth     = LoadThemeImage(dir, n, "scaletowidth", iconHeight);
            ToolbarIcons.ScaleToHeight    = LoadThemeImage(dir, n, "scaletoheight", iconHeight);
            ToolbarIcons.ScaleToFill      = LoadThemeImage(dir, n, "scaletofill", iconHeight);
            ToolbarIcons.AdjustWindowSize = LoadThemeImage(dir, n, "autosizewindow", iconHeight);
            ToolbarIcons.OpenFile         = LoadThemeImage(dir, n, "open", iconHeight);
            ToolbarIcons.Refresh          = LoadThemeImage(dir, n, "refresh", iconHeight);
            ToolbarIcons.GoToImage        = LoadThemeImage(dir, n, "gotoimage", iconHeight);
            ToolbarIcons.ThumbnailBar     = LoadThemeImage(dir, n, "thumbnail", iconHeight);
            ToolbarIcons.Checkerboard     = LoadThemeImage(dir, n, "checkerboard", iconHeight);
            ToolbarIcons.FullScreen       = LoadThemeImage(dir, n, "fullscreen", iconHeight);
            ToolbarIcons.Slideshow        = LoadThemeImage(dir, n, "slideshow", iconHeight);
            ToolbarIcons.Convert          = LoadThemeImage(dir, n, "convert", iconHeight);
            ToolbarIcons.Print            = LoadThemeImage(dir, n, "print", iconHeight);
            ToolbarIcons.Settings         = LoadThemeImage(dir, n, "settings", iconHeight);
            ToolbarIcons.About            = LoadThemeImage(dir, n, "about", iconHeight);
            ToolbarIcons.Menu             = LoadThemeImage(dir, n, "menu", iconHeight);
            ToolbarIcons.ViewFirstImage   = LoadThemeImage(dir, n, "gofirst", iconHeight);
            ToolbarIcons.ViewLastImage    = LoadThemeImage(dir, n, "golast", iconHeight);
            #endregion


            #region Arrow cursors (derived from toolbar)

            var arrowHeight = (int)(DPIScaling.Transform(iconHeight) * NavArrowMultiplier);

            var navArrowTemp = new ThemeImage(ToolbarIcons.ViewPreviousImage.Filename, arrowHeight);
            navArrowTemp.Refresh(arrowHeight);
            NavArrowLeft = navArrowTemp.Image;

            NavArrowRight = new ThemeImage(ToolbarIcons.ViewNextImage.Filename, arrowHeight).Image;

            #endregion


            this.IsValid = true;
            return(this.IsValid);