Beispiel #1
0
        /// <summary>
        /// Retrieves a color of the specified DeviceKeys key from the bitmap
        /// </summary>
        /// <param name="key">Key</param>
        /// <returns>Color of the Key</returns>
        public Color Get(Devices.DeviceKeys key)
        {
            try
            {
                BitmapRectangle keymaping = Effects.GetBitmappingFromDeviceKey(key);

                if (keymaping.IsEmpty && key == Devices.DeviceKeys.Peripheral)
                {
                    return(peripheral);
                }
                else
                {
                    if (keymaping.IsEmpty)
                    {
                        return(Color.FromArgb(0, 0, 0));
                    }

                    return(Utils.BitmapUtils.GetRegionColor(colormap, keymaping.Rectangle));
                }
            }
            catch (Exception exc)
            {
                Global.logger.LogLine("EffectLayer.Get() Exception: " + exc, Logging_Level.Error);

                return(Color.FromArgb(0, 0, 0));
            }
        }
Beispiel #2
0
        public static Color GetRegionColor(Bitmap map, BitmapRectangle rectangle)
        {
            try
            {
                if (rectangle.IsEmpty)
                {
                    return(Color.FromArgb(0, 0, 0));
                }

                long Red   = 0;
                long Green = 0;
                long Blue  = 0;
                long Alpha = 0;

                BitmapData srcData = map.LockBits(
                    rectangle.Rectangle,
                    ImageLockMode.ReadOnly,
                    PixelFormat.Format32bppArgb);

                int stride = srcData.Stride;

                IntPtr Scan0 = srcData.Scan0;

                unsafe
                {
                    byte *p = (byte *)(void *)Scan0;

                    for (int y = 0; y < rectangle.Height; y++)
                    {
                        for (int x = 0; x < rectangle.Width; x++)
                        {
                            Blue  += p[(y * stride) + x * 4];
                            Green += p[(y * stride) + x * 4 + 1];
                            Red   += p[(y * stride) + x * 4 + 2];
                            Alpha += p[(y * stride) + x * 4 + 3];
                        }
                    }
                }

                map.UnlockBits(srcData);

                return(Color.FromArgb((int)(Alpha / rectangle.Area), (int)(Red / rectangle.Area), (int)(Green / rectangle.Area), (int)(Blue / rectangle.Area)));
            }
            catch (Exception exc)
            {
                Global.logger.Error("BitmapUtils.GetRegionColor() Exception: " + exc);

                return(Color.FromArgb(0, 0, 0));
            }
        }
Beispiel #3
0
        public RectangleF GetAffectedRegion()
        {
            switch (type)
            {
            case KeySequenceType.FreeForm:
                return(new RectangleF((this.freeform.X + Effects.grid_baseline_x) * Effects.editor_to_canvas_width, (this.freeform.Y + Effects.grid_baseline_y) * Effects.editor_to_canvas_height, this.freeform.Width * Effects.editor_to_canvas_width, this.freeform.Height * Effects.editor_to_canvas_height));

            default:

                float left   = 0.0f;
                float top    = left;
                float right  = top;
                float bottom = right;

                foreach (Devices.DeviceKeys key in this.keys)
                {
                    BitmapRectangle keyMapping = Effects.GetBitmappingFromDeviceKey(key);

                    if (left == top && top == right && right == bottom && bottom == 0.0f)
                    {
                        left   = keyMapping.Left;
                        top    = keyMapping.Top;
                        right  = keyMapping.Right;
                        bottom = keyMapping.Bottom;
                    }
                    else
                    {
                        if (keyMapping.Left < left)
                        {
                            left = keyMapping.Left;
                        }
                        if (keyMapping.Top < top)
                        {
                            top = keyMapping.Top;
                        }
                        if (keyMapping.Right > right)
                        {
                            right = keyMapping.Right;
                        }
                        if (keyMapping.Bottom > bottom)
                        {
                            bottom = keyMapping.Bottom;
                        }
                    }
                }

                return(new RectangleF(left, top, (right - left), (bottom - top)));
            }
        }
Beispiel #4
0
        /// <summary>
        /// Sets one DeviceKeys key with a specific color on the bitmap
        /// </summary>
        /// <param name="key">DeviceKey to be set</param>
        /// <param name="color">Color to be used</param>
        /// <returns>Itself</returns>
        private EffectLayer SetOneKey(Devices.DeviceKeys key, Color color)
        {
            BitmapRectangle keymaping = Effects.GetBitmappingFromDeviceKey(key);

            if (key == Devices.DeviceKeys.Peripheral)
            {
                peripheral = color;
                using (Graphics g = Graphics.FromImage(colormap))
                {
                    foreach (Devices.DeviceKeys peri_key in possible_peripheral_keys)
                    {
                        BitmapRectangle peri_keymaping = Effects.GetBitmappingFromDeviceKey(peri_key);

                        if (peri_keymaping.IsValid)
                        {
                            g.FillRectangle(new SolidBrush(color), peri_keymaping.Rectangle);
                        }
                    }

                    needsRender = true;
                }
            }
            else
            {
                if (keymaping.Top < 0 || keymaping.Bottom > Effects.canvas_height ||
                    keymaping.Left < 0 || keymaping.Right > Effects.canvas_width)
                {
                    Global.logger.LogLine("Coudln't set key color " + key.ToString(), Logging_Level.Warning);
                    return(this);;
                }
                else
                {
                    using (Graphics g = Graphics.FromImage(colormap))
                    {
                        g.FillRectangle(new SolidBrush(color), keymaping.Rectangle);
                        needsRender = true;
                    }
                }
            }

            return(this);
        }
Beispiel #5
0
        public bool UpdateDevice(DeviceColorComposition colorComposition, bool forced = false)
        {
            Dictionary <DeviceKeys, Color> keyColors = colorComposition.keyColors;

            try
            {
                foreach (KeyValuePair <DeviceKeys, Color> pair in keyColors)
                {
                    if (useGlobalPeriphericColors)
                    {
                        if (pair.Key == DeviceKeys.Peripheral) // This is not working anymore. Was working in MASTER
                        {
                            ColorKBLeft   = pair.Value;
                            ColorKBCenter = pair.Value;
                            ColorKBRight  = pair.Value;
                            ColorTouchpad = pair.Value;
                            ColorUpdated  = true;
                        }
                    }
                    else
                    {
                        // TouchPad (It would be nice to have a Touchpad Peripheral)
                        if (pair.Key == DeviceKeys.Peripheral)
                        {
                            ColorTouchpad = pair.Value;
                            ColorUpdated  = true;
                        }
                    }
                }

                if (!useGlobalPeriphericColors)   // Clevo 3 region keyboard

                // Left Side (From ESC to Half Spacebar)
                {
                    BitmapRectangle keymap_esc      = Effects.GetBitmappingFromDeviceKey(DeviceKeys.ESC);
                    BitmapRectangle keymap_space    = Effects.GetBitmappingFromDeviceKey(DeviceKeys.SPACE);
                    PointF          spacebar_center = keymap_space.Center; // Key Center

                    int spacebar_x = (int)spacebar_center.X - keymap_esc.Left;
                    int height     = (int)spacebar_center.Y - keymap_esc.Top;

                    BitmapRectangle region_left     = new BitmapRectangle(keymap_esc.Left, keymap_esc.Top, spacebar_x, height);
                    Color           RegionLeftColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_left);
                    if (!ColorKBLeft.Equals(RegionLeftColor))
                    {
                        ColorKBLeft  = RegionLeftColor;
                        ColorUpdated = true;
                    }

                    // Center (Other Half of Spacebar to F11) - Clevo keyboards are very compact and the right side color bleeds over to the up/left/right/down keys)
                    BitmapRectangle keymap_f11 = Effects.GetBitmappingFromDeviceKey(DeviceKeys.F11);

                    int f11_x_width = Convert.ToInt32(keymap_f11.Center.X - spacebar_x);

                    BitmapRectangle region_center     = new BitmapRectangle(spacebar_x, keymap_esc.Top, f11_x_width, height);
                    Color           RegionCenterColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_center);
                    if (!ColorKBCenter.Equals(RegionCenterColor))
                    {
                        ColorKBCenter = RegionCenterColor;
                        ColorUpdated  = true;
                    }

                    // Right Side
                    BitmapRectangle keymap_numenter  = Effects.GetBitmappingFromDeviceKey(DeviceKeys.NUM_ENTER);
                    BitmapRectangle region_right     = new BitmapRectangle(Convert.ToInt32(keymap_f11.Center.X), keymap_esc.Top, Convert.ToInt32(keymap_numenter.Center.X - keymap_f11.Center.X), height);
                    Color           RegionRightColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_right);

                    if (!ColorKBRight.Equals(RegionRightColor))
                    {
                        ColorKBRight = RegionRightColor;
                        ColorUpdated = true;
                    }
                }

                SendColorsToKeyboard(forced);
                return(true);
            }
            catch (Exception exception)
            {
                Global.logger.LogLine("Clevo device, error when updating device. Error: " + exception, Logging_Level.Error, true);
                Console.WriteLine(exception);
                return(false);
            }
        }