/** Connects up the menu item. This gets called when any descendant is added that is an * instance of MenuItem. */ protected void connectItem (MenuItem item) { _items.add(item); item.setRelay(Closeable.Util.join( item.layer.events().connect(_itemListener.pointer), item.layer.events().connect(_itemListener.mouse))); }
protected Widget () { _behave = createBehavior(); if (_behave != null) { // absorbs clicks and do not descend (propagate clicks to sublayers) set(Flag.HIT_DESCEND, false); set(Flag.HIT_ABSORB, true); // wire up our behavior as a layer listener layer.events().connect(_behave); } }
protected void giveFocus (ActiveScreen as) { try { _current = as; as.screen.gainedFocus(); // if we have a previous screen, and the direction supports manual untransitioning, // set up a listener to handle that ActiveScreen previous = (_screens.size() <= 1) ? null : _screens.get(1); _onPointer.close(); if (previous == null || !as.dir.canUntrans()) _onPointer = Closeable.Util.NOOP; else _onPointer = as.screen.layer.events().connect(new UntransListener(as, previous)); } catch (Exception e) { _game.plat.log().warn("Screen choked in gainedFocus() [screen=" + as.screen + "]", e); } checkSleep(); }
/** * Creates a new menu using the given layout for its elements. */ public Menu (Layout layout) { super(layout); // use a hit tester "eater" to pretend our layer covers all its siblings layer.setHitTester(new Layer.HitTester() { @Override public Layer hitTest (Layer layer, Point p) { Layer descendant = layer.hitTestDefault(p); return descendant == null ? absorbHits() ? layer : null : descendant; } }); // deactivate the menu on any pointer events (children will still get theirs) layer.events().connect(new Pointer.Listener() { @Override public void onStart (Pointer.Interaction iact) { if (iact.hitLayer == layer) deactivate(); } }); childAdded().connect(_descendantAdded); childRemoved().connect(_descendantRemoved); }
@Override protected Group createIface (Root root) { final float width = 410, height = 400; GroupLayer clip = new GroupLayer(410, 400); layer.addAt(clip, (size().width()-width)/2, (size().height()-height)/2); final GroupLayer scroll = new GroupLayer(); clip.add(scroll); // add a bunch of image layers to our root layer float y = 0; for (int ii = 0; ii < IMG_COUNT; ii++) { Canvas image = graphics().createCanvas(width, IMG_HEIGHT); StringBuffer text = new StringBuffer(); if (ii == 0) text.append("Tap & fling"); else if (ii == IMG_COUNT-1) text.append("Good job!"); else for (int tt = 0; tt < 25; tt++) text.append(ii); StyledText.span(graphics(), text.toString(), TEXT).render(image, 0, 0); ImageLayer layer = new ImageLayer(image.toTexture()); scroll.addAt(layer, 0, y); y += layer.scaledHeight(); } Flicker flicker = new Flicker(0, height-IMG_HEIGHT*IMG_COUNT, 0) { @Override protected float friction () { return 0.001f; } }; clip.events().connect(flicker); flicker.changed.connect(new Slot<Flicker>() { public void onEmit (Flicker flicker) { scroll.setTy(flicker.position); } }); closeOnHide(paint.connect(flicker.onPaint)); return null; }
mouse.layer.events().connect(new Mouse.Listener() { double start; @Override public void onButton(Mouse.ButtonEvent event, Mouse.Interaction iact) { pointer.layer.events().connect(new Pointer.Listener() { double start; @Override public void onStart(Pointer.Interaction iact) { touch.layer.events().connect(new Touch.Listener() { @Override public void onStart(Touch.Interaction iact) { Touch.Event event = iact.event;