mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-18 07:34:54 +00:00
Revert most JS changes in commit:
Fri Nov 28 20:12:20 2008 +0000
Convert all JS style to be uniform, add Eclipse settings bits
Instead, just add 'indent-tabs-mode: nil' to the mode lines and convert
tabs to spaces. The indentation no longer exactly matches the Eclipse
settings, since they differ in some ways from the style we are trying
to achieve.
svn path=/trunk/; revision=97
117 lines
4.5 KiB
JavaScript
117 lines
4.5 KiB
JavaScript
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
|
|
const Clutter = imports.gi.Clutter;
|
|
const Tweener = imports.tweener.tweener;
|
|
|
|
const DEFAULT_BUTTON_COLOR = new Clutter.Color();
|
|
DEFAULT_BUTTON_COLOR.from_pixel(0xeeddccff);
|
|
|
|
const DEFAULT_PRESSED_BUTTON_COLOR = new Clutter.Color();
|
|
DEFAULT_PRESSED_BUTTON_COLOR.from_pixel(0xccbbaaff);
|
|
|
|
// Time for animation making the button darker
|
|
const ANIMATION_TIME = 0.3;
|
|
|
|
const NO_OPACITY = 0;
|
|
|
|
const PARTIAL_OPACITY = 0.4 * 255;
|
|
|
|
const FULL_OPACITY = 255;
|
|
|
|
function Button(text, buttonColor, pressedButtonColor, staysPressed, minWidth, minHeight) {
|
|
this._init(text, buttonColor, pressedButtonColor, staysPressed, minWidth, minHeight);
|
|
}
|
|
|
|
Button.prototype = {
|
|
_init : function(text, buttonColor, pressedButtonColor, staysPressed, minWidth, minHeight) {
|
|
let me = this;
|
|
|
|
this._buttonColor = buttonColor
|
|
if (buttonColor == null)
|
|
this._buttonColor = DEFAULT_BUTTON_COLOR;
|
|
|
|
this._pressedButtonColor = pressedButtonColor
|
|
if (pressedButtonColor == null)
|
|
this._pressedButtonColor = DEFAULT_PRESSED_BUTTON_COLOR;
|
|
|
|
if (staysPressed == null)
|
|
staysPressed = false;
|
|
if (minWidth == null)
|
|
minWidth = 0;
|
|
if (minHeight == null)
|
|
minHeight = 0;
|
|
|
|
// if staysPressed is true, this.active will be true past the first release of a button, untill a subsequent one (the button
|
|
// is unpressed) or untill release() is called explicitly
|
|
this._active = false;
|
|
this._isBetweenPressAndRelease = false;
|
|
this._mouseIsOverButton = false;
|
|
|
|
this.button = new Clutter.Group({reactive: true});
|
|
this._background = new Clutter.Rectangle({ color: this._buttonColor});
|
|
this._pressedBackground = new Clutter.Rectangle({ color: this._pressedButtonColor, opacity: NO_OPACITY});
|
|
this._label = new Clutter.Label({ font_name: "Sans Bold 16px",
|
|
text: text});
|
|
this._label.set_position(5, 5);
|
|
let backgroundWidth = Math.max(this._label.get_width()+10, minWidth);
|
|
let backgroundHeight = Math.max(this._label.get_height()+10, minHeight);
|
|
this._background.set_width(backgroundWidth)
|
|
this._background.set_height(backgroundHeight)
|
|
this._pressedBackground.set_width(backgroundWidth)
|
|
this._pressedBackground.set_height(backgroundHeight)
|
|
this.button.add_actor(this._background);
|
|
this.button.add_actor(this._pressedBackground);
|
|
this.button.add_actor(this._label);
|
|
this.button.connect('button-press-event',
|
|
function(o, event) {
|
|
me._isBetweenPressAndRelease = true;
|
|
Tweener.addTween(me._pressedBackground,
|
|
{ time: ANIMATION_TIME,
|
|
opacity: FULL_OPACITY,
|
|
transition: "linear"
|
|
});
|
|
return false;
|
|
});
|
|
this.button.connect('button-release-event',
|
|
function(o, event) {
|
|
me._isBetweenPressAndRelease = false;
|
|
if (!staysPressed || me._active) {
|
|
me.release();
|
|
} else {
|
|
me._active = true;
|
|
}
|
|
return false;
|
|
});
|
|
this.button.connect('enter-event',
|
|
function(o, event) {
|
|
me._mouseIsOverButton = true;
|
|
if (!me._active) {
|
|
Tweener.removeTweens(me._pressedBackground);
|
|
me._pressedBackground.set_opacity(PARTIAL_OPACITY);
|
|
}
|
|
return false;
|
|
});
|
|
this.button.connect('leave-event',
|
|
function(o, event) {
|
|
me._isBetweenPressAndRelease = false;
|
|
me._mouseIsOverButton = false;
|
|
if (!me._active) {
|
|
Tweener.removeTweens(me._pressedBackground);
|
|
me._pressedBackground.set_opacity(NO_OPACITY);
|
|
}
|
|
return false;
|
|
});
|
|
},
|
|
|
|
release : function() {
|
|
if (!this._isBetweenPressAndRelease) {
|
|
this._active = false;
|
|
Tweener.removeTweens(this._pressedBackground);
|
|
if (this._mouseIsOverButton) {
|
|
this._pressedBackground.set_opacity(PARTIAL_OPACITY);
|
|
} else {
|
|
this._pressedBackground.set_opacity(NO_OPACITY);
|
|
}
|
|
}
|
|
}
|
|
};
|