X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fdemos%2FDemo6.java;h=41d1f2c3f323b84a4feaa583534a34c793f06344;hb=cfdaf6052ddc5ca44cf19f1f6d9f154cc8443024;hp=fba67a07a80101904018d56cddc4e9b21b6a1053;hpb=88a99379dca67603ee80819cb31716e52aa72362;p=fanfix.git diff --git a/src/jexer/demos/Demo6.java b/src/jexer/demos/Demo6.java index fba67a0..41d1f2c 100644 --- a/src/jexer/demos/Demo6.java +++ b/src/jexer/demos/Demo6.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -28,13 +28,26 @@ */ package jexer.demos; +import java.util.ResourceBundle; + +import jexer.TApplication; import jexer.backend.*; +import jexer.demos.DemoApplication; /** * This class shows off the use of MultiBackend and MultiScreen. */ public class Demo6 { + /** + * Translated strings. + */ + private static final ResourceBundle i18n = ResourceBundle.getBundle(Demo6.class.getName()); + + // ------------------------------------------------------------------------ + // Demo6 ------------------------------------------------------------------ + // ------------------------------------------------------------------------ + /** * Main entry point. * @@ -42,22 +55,91 @@ public class Demo6 { */ public static void main(final String [] args) { try { + + /* + * In this demo we will create two applications spanning three + * screens. One of the applications will have both an ECMA48 + * screen and a Swing screen, with all I/O mirrored between them. + * The second application will have a Swing screen containing a + * window showing the first application, also mirroring I/O + * between the window and the other two screens. + */ + /* - * Spin up a Swing backend to match the ECMA48 backend on - * System.in/out. + * We create the first screen and use it to establish a + * MultiBackend. */ - ECMA48Backend ecmaBackend = new ECMA48Backend(new Object(), null, - null); + ECMA48Backend ecmaBackend = new ECMA48Backend(); MultiBackend multiBackend = new MultiBackend(ecmaBackend); + + /* + * Now we create the first application (a standard demo). + */ DemoApplication demoApp = new DemoApplication(multiBackend); + + /* + * We will need the width and height of the ECMA48 screen, so get + * the Screen reference now. + */ Screen multiScreen = multiBackend.getScreen(); - SwingBackend swingBackend = new SwingBackend(new Object(), - multiScreen.getWidth(), multiScreen.getHeight(), 16); + /* + * Now we create the second screen (backend) for the first + * application. It will be the same size as the ECMA48 screen, + * with a font size of 16 points. + */ + SwingBackend swingBackend = new SwingBackend(multiScreen.getWidth(), + multiScreen.getHeight(), 16); + + /* + * Add this screen to the MultiBackend, and at this point we have + * one demo application spanning two physical screens. + */ multiBackend.addBackend(swingBackend); multiBackend.setListener(demoApp); + /* + * Time for the second application. This one will have a single + * window mirroring the contents of the first application. Let's + * make it a little larger than the first application's + * width/height. + */ + int width = multiScreen.getWidth(); + int height = multiScreen.getHeight(); + + /* + * Make a new Swing window for the second application. + */ + SwingBackend monitorBackend = new SwingBackend(width + 5, + height + 5, 20); + + /* + * Setup the second application, give it the basic file and + * window menus. + */ + TApplication monitor = new TApplication(monitorBackend); + monitor.addToolMenu(); + monitor.addFileMenu(); + monitor.addWindowMenu(); + + /* + * Now add the third screen to the first application. We want to + * change the object it locks on in its draw() method to the + * MultiScreen, that will dramatically reduce (not totally + * eliminate) screen tearing/artifacts. + */ + TWindowBackend windowBackend = new TWindowBackend(demoApp, + monitor, i18n.getString("monitorWindow"), + width + 2, height + 2); + windowBackend.setDrawLock(multiScreen); + windowBackend.setOtherApplication(demoApp); + multiBackend.addBackend(windowBackend); + + /* + * Three screens, two applications: spin them up! + */ (new Thread(demoApp)).start(); + (new Thread(monitor)).start(); } catch (Exception e) { e.printStackTrace(); }