tests: Stop using Shell.GenericContainer

The test doesn't look and behave like before, but they are
already broken in master anyway. This commit makes it work
without Shell.GenericContainer, but the test itself remains
to be fixed.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/153
This commit is contained in:
Georges Basile Stavracas Neto 2018-07-13 11:01:42 -03:00
parent b4c674900f
commit 2ee321e0d8
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -32,26 +32,22 @@ const BOX_WIDTHS = [
const SPACING = 10; const SPACING = 10;
function FlowedBoxes() { var FlowedBoxes = new Lang.Class({
this._init(); Name: 'FlowedBoxes',
} Extends: St.Widget,
FlowedBoxes.prototype = {
_init() { _init() {
this.actor = new Shell.GenericContainer(); this.parent();
this.actor.connect('get-preferred-width', this._getPreferredWidth.bind(this));
this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
this.actor.connect('allocate', this._allocate.bind(this));
for (let i = 0; i < BOX_WIDTHS.length; i++) { for (let i = 0; i < BOX_WIDTHS.length; i++) {
let child = new St.Bin({ width: BOX_WIDTHS[i], height: BOX_HEIGHT, let child = new St.Bin({ width: BOX_WIDTHS[i], height: BOX_HEIGHT,
style: 'border: 1px solid #444444; background: #00aa44' }) style: 'border: 1px solid #444444; background: #00aa44' })
this.actor.add_actor(child); this.add_actor(child);
} }
}, },
_getPreferredWidth(actor, forHeight, alloc) { vfunc_get_preferred_width(forHeight) {
let children = this.actor.get_children(); let children = this.get_children();
let maxMinWidth = 0; let maxMinWidth = 0;
let totalNaturalWidth = 0; let totalNaturalWidth = 0;
@ -65,12 +61,11 @@ FlowedBoxes.prototype = {
totalNaturalWidth += naturalWidth; totalNaturalWidth += naturalWidth;
} }
alloc.min_size = maxMinWidth; return [maxMinWidth, totalNaturalWidth];
alloc.natural_size = totalNaturalWidth;
}, },
_layoutChildren(forWidth, callback) { _layoutChildren(forWidth, callback) {
let children = this.actor.get_children(); let children = this.get_children();
let x = 0; let x = 0;
let y = 0; let y = 0;
@ -99,24 +94,26 @@ FlowedBoxes.prototype = {
}, },
_getPreferredHeight(actor, forWidth, alloc) { vfunc_get_preferred_height(forWidth) {
let height = 0; let height = 0;
this._layoutChildren(forWidth, this._layoutChildren(forWidth,
function(child, x1, y1, x2, y2) { function(child, x1, y1, x2, y2) {
height = Math.max(height, y2); height = Math.max(height, y2);
}); });
alloc.min_size = alloc.natural_size = height; return [height, height];
}, },
_allocate(actor, box, flags) { vfunc_allocate(box, flags) {
this.set_allocation(box, flags);
this._layoutChildren(box.x2 - box.x1, this._layoutChildren(box.x2 - box.x1,
function(child, x1, y1, x2, y2) { function(child, x1, y1, x2, y2) {
child.allocate(new Clutter.ActorBox({ x1: x1, y1: y1, x2: x2, y2: y2 }), child.allocate(new Clutter.ActorBox({ x1: x1, y1: y1, x2: x2, y2: y2 }),
flags); flags);
}); });
} }
}; });
/****************************************************************************/ /****************************************************************************/
@ -127,39 +124,34 @@ FlowedBoxes.prototype = {
// //
// This is currently only written for the case where the child is height-for-width // This is currently only written for the case where the child is height-for-width
function SizingIllustrator() { var SizingIllustrator = new Lang.Class({
this._init(); Name: 'SizingIllustrator',
} Extends: St.Widget,
SizingIllustrator.prototype = {
_init() { _init() {
this.actor = new Shell.GenericContainer(); this.parent();
this.actor.connect('get-preferred-width', this._getPreferredWidth.bind(this));
this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
this.actor.connect('allocate', this._allocate.bind(this));
this.minWidthLine = new St.Bin({ style: 'background: red' }); this.minWidthLine = new St.Bin({ style: 'background: red' });
this.actor.add_actor(this.minWidthLine); this.add_actor(this.minWidthLine);
this.minHeightLine = new St.Bin({ style: 'background: red' }); this.minHeightLine = new St.Bin({ style: 'background: red' });
this.actor.add_actor(this.minHeightLine); this.add_actor(this.minHeightLine);
this.naturalWidthLine = new St.Bin({ style: 'background: #4444ff' }); this.naturalWidthLine = new St.Bin({ style: 'background: #4444ff' });
this.actor.add_actor(this.naturalWidthLine); this.add_actor(this.naturalWidthLine);
this.naturalHeightLine = new St.Bin({ style: 'background: #4444ff' }); this.naturalHeightLine = new St.Bin({ style: 'background: #4444ff' });
this.actor.add_actor(this.naturalHeightLine); this.add_actor(this.naturalHeightLine);
this.currentWidthLine = new St.Bin({ style: 'background: #aaaaaa' }); this.currentWidthLine = new St.Bin({ style: 'background: #aaaaaa' });
this.actor.add_actor(this.currentWidthLine); this.add_actor(this.currentWidthLine);
this.currentHeightLine = new St.Bin({ style: 'background: #aaaaaa' }); this.currentHeightLine = new St.Bin({ style: 'background: #aaaaaa' });
this.actor.add_actor(this.currentHeightLine); this.add_actor(this.currentHeightLine);
this.handle = new St.Bin({ style: 'background: yellow; border: 1px solid black;', this.handle = new St.Bin({ style: 'background: yellow; border: 1px solid black;',
reactive: true }); reactive: true });
this.handle.connect('button-press-event', this._handlePressed.bind(this)); this.handle.connect('button-press-event', this._handlePressed.bind(this));
this.handle.connect('button-release-event', this._handleReleased.bind(this)); this.handle.connect('button-release-event', this._handleReleased.bind(this));
this.handle.connect('motion-event', this._handleMotion.bind(this)); this.handle.connect('motion-event', this._handleMotion.bind(this));
this.actor.add_actor(this.handle); this.add_actor(this.handle);
this._inDrag = false; this._inDrag = false;
@ -169,12 +161,12 @@ SizingIllustrator.prototype = {
add(child) { add(child) {
this.child = child; this.child = child;
this.actor.add_actor(this.child); this.add_child(child);
this.child.lower_bottom(); this.child.lower_bottom();
}, },
_getPreferredWidth(actor, forHeight, alloc) { vfunc_get_preferred_width(forHeight) {
let children = this.actor.get_children(); let children = this.get_children();
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {
let child = children[i]; let child = children[i];
let [minWidth, naturalWidth] = child.get_preferred_width(-1); let [minWidth, naturalWidth] = child.get_preferred_width(-1);
@ -184,27 +176,28 @@ SizingIllustrator.prototype = {
} }
} }
alloc.min_size = 0; return [0, 400];
alloc.natural_size = 400;
}, },
_getPreferredHeight(actor, forWidth, alloc) { vfunc_get_preferred_height(forWidth) {
let children = this.actor.get_children(); let children = this.get_children();
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {
let child = children[i]; let child = children[i];
if (child == this.child) { if (child == this.child) {
[this.minHeight, this.naturalHeight] = child.get_preferred_height(this.width); [this.minHeight, this.naturalHeight] = child.get_preferred_height(this.width);
} else { } else {
let [minWidth, naturalWidth] = child.get_preferred_width(-1); let [minWidth, naturalWidth] = child.get_preferred_height(naturalWidth);
child.get_preferred_height(naturalWidth);
} }
} }
alloc.min_size = 0; return [0, 400];
alloc.natural_size = 400;
}, },
_allocate(actor, box, flags) { vfunc_allocate(box, flags) {
this.set_allocation(box, flags);
box = this.get_theme_node().get_content_box(box);
let allocWidth = box.x2 - box.x1; let allocWidth = box.x2 - box.x1;
let allocHeight = box.y2 - box.y1; let allocHeight = box.y2 - box.y1;
@ -244,13 +237,13 @@ SizingIllustrator.prototype = {
_handleMotion(handle, event) { _handleMotion(handle, event) {
if (this._inDrag) { if (this._inDrag) {
let [x, y] = event.get_coords(); let [x, y] = event.get_coords();
let [actorX, actorY] = this.actor.get_transformed_position(); let [actorX, actorY] = this.get_transformed_position();
this.width = x - this._dragX - actorX; this.width = x - this._dragX - actorX;
this.height = y - this._dragY - actorY; this.height = y - this._dragY - actorY;
this.actor.queue_relayout(); this.queue_relayout();
} }
} }
}; });
/****************************************************************************/ /****************************************************************************/
@ -278,7 +271,7 @@ function test() {
mainBox.add(bin, { x_fill: true, y_fill: true, expand: true }); mainBox.add(bin, { x_fill: true, y_fill: true, expand: true });
let illustrator = new SizingIllustrator(); let illustrator = new SizingIllustrator();
bin.add_actor(illustrator.actor); bin.add_actor(illustrator);
let scrollView = new St.ScrollView(); let scrollView = new St.ScrollView();
illustrator.add(scrollView); illustrator.add(scrollView);
@ -287,7 +280,7 @@ function test() {
scrollView.add_actor(box); scrollView.add_actor(box);
let flowedBoxes = new FlowedBoxes(); let flowedBoxes = new FlowedBoxes();
box.add(flowedBoxes.actor, { expand: false, x_fill: true, y_fill: true }); box.add(flowedBoxes, { expand: false, x_fill: true, y_fill: true });
let policyBox = new St.BoxLayout({ vertical: false }); let policyBox = new St.BoxLayout({ vertical: false });
mainBox.add(policyBox); mainBox.add(policyBox);