示例#1
0
    public override void GetSize(Widget widget, ref Gdk.Rectangle cell_area, out int x_offset, out int y_offset, out int width, out int height)
    {
        int calc_width = (int) this.Xpad * 2 + 10;
        int calc_height = (int) this.Ypad * 2 + 10;

        width = calc_width;
        height = calc_height;

        x_offset = 0;
        y_offset = 0;
        if (!cell_area.Equals (Gdk.Rectangle.Zero)) {
            x_offset = (int) (this.Xalign * (cell_area.Width - calc_width));
            x_offset = Math.Max (x_offset, 0);

            y_offset = (int) (this.Yalign * (cell_area.Height - calc_height));
            y_offset = Math.Max (y_offset, 0);
        }
    }
示例#2
0
		//from MonoDevelop.Components.Commands.KeyBindingManager
		internal static void MapRawKeys (Gdk.EventKey evt, out Gdk.Key key, out Gdk.ModifierType mod)
		{
			mod = evt.State;
			key = evt.Key;
			
			uint keyval;
			int effectiveGroup, level;
			Gdk.ModifierType consumedModifiers;
			keymap.TranslateKeyboardState (evt.HardwareKeycode, evt.State, evt.Group, out keyval, out effectiveGroup,
			                               out level, out consumedModifiers);
			
			key = (Gdk.Key)keyval;
			mod = evt.State & ~consumedModifiers;
			
			if (IsX11) {
				//this is a workaround for a common X mapping issue
				//where the alt key is mapped to the meta key when the shift modifier is active
				if (key.Equals (Gdk.Key.Meta_L) || key.Equals (Gdk.Key.Meta_R))
					key = Gdk.Key.Alt_L;
			}
			
			//HACK: the MAC GTK+ port currently does some horrible, un-GTK-ish key mappings
			// so we work around them by playing some tricks to remap and decompose modifiers.
			// We also decompose keys to the root physical key so that the Mac command 
			// combinations appear as expected, e.g. shift-{ is treated as shift-[.
			if (IsMac && !IsX11) {
				// Mac GTK+ maps the command key to the Mod1 modifier, which usually means alt/
				// We map this instead to meta, because the Mac GTK+ has mapped the cmd key
				// to the meta key (yay inconsistency!). IMO super would have been saner.
				if ((mod & Gdk.ModifierType.Mod1Mask) != 0) {
					mod ^= Gdk.ModifierType.Mod1Mask;
					mod |= Gdk.ModifierType.MetaMask;
				}
				
				// If Mod5 is active it *might* mean that opt/alt is active,
				// so we can unset this and map it back to the normal modifier.
				if ((mod & Gdk.ModifierType.Mod5Mask) != 0) {
					mod ^= Gdk.ModifierType.Mod5Mask;
					mod |= Gdk.ModifierType.Mod1Mask;
				}
				
				// When opt modifier is active, we need to decompose this to make the command appear correct for Mac.
				// In addition, we can only inspect whether the opt/alt key is pressed by examining
				// the key's "group", because the Mac GTK+ treats opt as a group modifier and does
				// not expose it as an actual GDK modifier.
				if (evt.Group == (byte) 1) {
					mod |= Gdk.ModifierType.Mod1Mask;
					key = GetGroupZeroKey (key, evt);
				}
			}
			
			//fix shift-tab weirdness. There isn't a nice name for untab, so make it shift-tab
			if (key == Gdk.Key.ISO_Left_Tab) {
				key = Gdk.Key.Tab;
				mod |= Gdk.ModifierType.ShiftMask;
			}
		}
示例#3
0
		//from MonoDevelop.Components.Commands.KeyBindingManager
		internal static void MapRawKeys (Gdk.EventKey evt, out Gdk.Key key, out Gdk.ModifierType mod, out uint keyval)
		{
			mod = evt.State;
			key = evt.Key;
			keyval = evt.KeyValue;
			
			int effectiveGroup, level;
			Gdk.ModifierType consumedModifiers;
			ModifierType modifier = evt.State;
			byte grp = evt.Group;
			// Workaround for bug "Bug 688247 - Ctrl+Alt key not work on windows7 with bootcamp on a Mac Book Pro"
			// Ctrl+Alt should behave like right alt key - unfortunately TranslateKeyboardState doesn't handle it. 
			if (IsWindows && (modifier & ~ModifierType.LockMask) == (ModifierType.Mod1Mask | ModifierType.ControlMask)) {
				modifier = ModifierType.Mod2Mask;
				grp = 1;
			}
			
			keymap.TranslateKeyboardState (evt.HardwareKeycode, modifier, grp, out keyval, out effectiveGroup,
			                               out level, out consumedModifiers);
			key = (Gdk.Key)keyval;
			mod = modifier & ~consumedModifiers;
			
			if (IsX11) {
				//this is a workaround for a common X mapping issue
				//where the alt key is mapped to the meta key when the shift modifier is active
				if (key.Equals (Gdk.Key.Meta_L) || key.Equals (Gdk.Key.Meta_R))
					key = Gdk.Key.Alt_L;
			}
			
			//HACK: the MAC GTK+ port currently does some horrible, un-GTK-ish key mappings
			// so we work around them by playing some tricks to remap and decompose modifiers.
			// We also decompose keys to the root physical key so that the Mac command 
			// combinations appear as expected, e.g. shift-{ is treated as shift-[.
			if (IsMac && !IsX11) {
				// Mac GTK+ maps the command key to the Mod1 modifier, which usually means alt/
				// We map this instead to meta, because the Mac GTK+ has mapped the cmd key
				// to the meta key (yay inconsistency!). IMO super would have been saner.
				if ((mod & Gdk.ModifierType.Mod1Mask) != 0) {
					mod ^= Gdk.ModifierType.Mod1Mask;
					mod |= Gdk.ModifierType.MetaMask;
				}
				
				// If Mod5 is active it *might* mean that opt/alt is active,
				// so we can unset this and map it back to the normal modifier.
				if ((mod & Gdk.ModifierType.Mod5Mask) != 0) {
					mod ^= Gdk.ModifierType.Mod5Mask;
					mod |= Gdk.ModifierType.Mod1Mask;
				}
				
				// When opt modifier is active, we need to decompose this to make the command appear correct for Mac.
				// In addition, we can only inspect whether the opt/alt key is pressed by examining
				// the key's "group", because the Mac GTK+ treats opt as a group modifier and does
				// not expose it as an actual GDK modifier.
				if (evt.Group == (byte) 1) {
					mod |= Gdk.ModifierType.Mod1Mask;
					key = GetGroupZeroKey (key, evt);
				}
				
				// Fix for allow ctrl+shift+a/ctrl+shift+e keys on mac (select to line begin/end actions)
				if ((key == Gdk.Key.A || key == Gdk.Key.E) && (evt.State & (Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask)) == (Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask))
					mod = Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask;
			}
			
			//fix shift-tab weirdness. There isn't a nice name for untab, so make it shift-tab
			if (key == Gdk.Key.ISO_Left_Tab) {
				key = Gdk.Key.Tab;
				mod |= Gdk.ModifierType.ShiftMask;
			}
			
			if ((key == Gdk.Key.space || key == Gdk.Key.parenleft || key == Gdk.Key.parenright) && (mod & Gdk.ModifierType.ShiftMask) == Gdk.ModifierType.ShiftMask)
				mod = ModifierType.None;
		}
        // ============================================
        // PUBLIC Methods
        // ============================================
        /// Obtains the width and height needed to render the cell
        public override void GetSize(Gtk.Widget widget, 
										 ref Gdk.Rectangle cell_area, 
										 out int x_offset, out int y_offset, 
										 out int width, out int height)
        {
            int calc_height;
            int calc_width;

            x_offset = 0;
            y_offset = 0;
            if (!cell_area.Equals(Gdk.Rectangle.Zero)) {
                calc_width  = Math.Max(MIN_CELL_WIDTH, cell_area.Width);
                calc_height = Math.Max(MIN_CELL_HEIGHT, cell_area.Height);

                x_offset = (int) (this.Xalign * (cell_area.Width - calc_width));
                x_offset = Math.Max(x_offset, 0);

                y_offset = (int) (this.Yalign * (cell_area.Height - calc_height));
                y_offset = Math.Max (y_offset, 0);
            } else {
                calc_width  = MIN_CELL_WIDTH;
                calc_height = MIN_CELL_HEIGHT;
            }

            width = calc_width;
            height = calc_height;
        }
示例#5
0
        static string ModifierToPartialAccel(Gdk.ModifierType mod, Gdk.Key key, out bool keyIsModifier)
        {
            //Console.WriteLine("PRESSED MOD: {0} ; KEY {1}",mod,key);

            string labelMod = String.Empty;
            string labelKey = String.Empty;

            if ((mod & Gdk.ModifierType.ControlMask) != 0)
                labelMod += "Control+";
            if ((mod & Gdk.ModifierType.Mod1Mask) != 0)
                labelMod += "Alt+";
            if ((mod & Gdk.ModifierType.ShiftMask) != 0)
                labelMod += "Shift+";
            if ((mod & Gdk.ModifierType.MetaMask) != 0)
                labelMod += "Command+";//labelMod += "Meta+";
            if ((mod & Gdk.ModifierType.SuperMask) != 0)
                labelMod += "Super+";

            //Console.WriteLine("labelMod-> {0}",labelMod);

            keyIsModifier = true;
            if (key.Equals (Gdk.Key.Control_L) || key.Equals (Gdk.Key.Control_R))
                labelKey += "Control+";
            else if (key.Equals (Gdk.Key.Alt_L) || key.Equals (Gdk.Key.Alt_R))
                labelKey += "Alt+";
            else if (key.Equals (Gdk.Key.Shift_L) || key.Equals (Gdk.Key.Shift_R))
                labelKey += "Shift+";
            else if (key.Equals (Gdk.Key.Meta_L) || key.Equals (Gdk.Key.Meta_R))
                labelKey += "Command+";//labelKey += "Meta+";
            else if (key.Equals (Gdk.Key.Super_L) || key.Equals (Gdk.Key.Super_L))
                labelKey += "Super+";
            else
                keyIsModifier = false;

            //Console.WriteLine("labelKey-> {0}",labelKey);

            if(labelMod.Contains(labelKey)){

                return labelMod;
            } else return labelMod+labelKey;
        }
		static string ModifierToPartialAccel (Gdk.ModifierType mod, Gdk.Key key, out bool keyIsModifier)
		{
			string label = String.Empty;
			
			if ((mod & Gdk.ModifierType.ControlMask) != 0)
				label += "Control+";
			if ((mod & Gdk.ModifierType.Mod1Mask) != 0)
				label += "Alt+";
			if ((mod & Gdk.ModifierType.ShiftMask) != 0)
				label += "Shift+";
			if ((mod & Gdk.ModifierType.MetaMask) != 0)
				label += "Meta+";
			if ((mod & Gdk.ModifierType.SuperMask) != 0)
				label += "Super+";
			
			keyIsModifier = true;
			if (key.Equals (Gdk.Key.Control_L) || key.Equals (Gdk.Key.Control_R))
				label += "Control+";
			else if (key.Equals (Gdk.Key.Alt_L) || key.Equals (Gdk.Key.Alt_R))
				label += "Alt+";
			else if (key.Equals (Gdk.Key.Shift_L) || key.Equals (Gdk.Key.Shift_R))
				label += "Shift+";
			else if (key.Equals (Gdk.Key.Meta_L) || key.Equals (Gdk.Key.Meta_R))
				label += "Meta+";
			else if (key.Equals (Gdk.Key.Super_L) || key.Equals (Gdk.Key.Super_L))
				label += "Super+";
			else
				keyIsModifier = false;
			
			return label;
		}