Paletas de Photoshop de ScriptUI

Estoy trabajando en un script de Photoshop que contiene una GUI para recopilar información. Esta es la primera vez que uso Script UI y me encuentro con 2 problemas que no estoy seguro de cómo abordar.

  1. Problema 1, la paleta no es el foco cuando ejecuto mi script. El usuario tiene que hacer clic manualmente en la paleta para enfocarla e ingresar su información. No es un gran problema, pero es un paso adicional que me gustaría evitar.
  2. Estoy escribiendo este guión para mi equipo en el trabajo, la mayoría de nosotros tenemos varios monitores, todos de diferentes resoluciones y tamaños, en varias configuraciones. Al probar esto, actualmente me encuentro con un problema (Problema 2) en el que la paleta aparece en el centro del monitor principal, y no en el monitor donde está la ventana de Photoshop (ver capturas de pantalla adjuntas). ¿Hay alguna manera de cambiar esto para que el cuadro de diálogo aparezca en la parte superior de la ventana de Photoshop y no en algún otro monitor?Supervisar 1 vista Vista del monitor 2

Mi código es el siguiente:

    #target photoshop
    var isDone, sTID, waitForRedraw, win, windowResource;
    windowResource = "palette";
    win = new Window(windowResource);
    var oldInputGroup = win.add("group");
    oldInputGroup.add("statictext", undefined, "Search for");
        var oText = oldInputGroup.add("edittext", undefined, "Search for");
        oText.characters = 25;
        oText.active = true;
    var newInputGroup = win.add("group");
        newInputGroup.add("statictext", undefined, "Replace with");
        var nText = newInputGroup.add("edittext", undefined, "Replace with");
        nText.characters = 25;
        nText.active = false;
    var caseCheck = win.add("checkbox", undefined, "Case Sensitive?");
    var bottomGroup = win.add("group");
        var btnOK = bottomGroup.add("button", undefined, "OK");
        var btnCancel = bottomGroup.add("button", undefined, "Cancel");

    main();

En principal tengo:

    isDone = false;

        win.onClose = function(){
            return isDone = true;
        };
        btnOK.onClick = function(){
            dataEntry = getInfo();
            return isDone = true;
        };
        btnCancel.onClick = function(){
            return isDone = true;
        };

        win.show();
        while (isDone === false) {
            try{
                app.refresh();
            } catch(e){
                isDone = true;
            };
        }
    //getInfo collects data from the window
    //then my script does its thing

Respuestas (2)

Si mi suposición es correcta, esto tiene más que ver con las cosas generales del sistema operativo y/o el comportamiento de Photoshop, en lugar de solo los diálogos de scriptui. Creo que tienes dos opciones.

Opción 1:

Convierte esa segunda pantalla en tu pantalla principal en Mac System Preferences > Displays > Arrangementarrastrando la barra blanca de una de las pantallas a la otra.


Opcion 2:

Active "La pantalla tiene espacios separados" en mac System Preferences > Mission control> Displays have separate spacescasilla de verificación.

Creo que ya lo tiene activado, pero cuando tenga la aplicación en la pantalla/espacio que desee, haga clic con el botón derecho en el icono de la aplicación en el muelle y, a continuación, elija la Optionspantalla Assing to:que Desktop on screen 2sea. Estoy sacando la redacción de la memoria, pero si eso no es exacto, de todos modos se explica por sí mismo una vez que lo ves.

Yo mismo he notado algunas rarezas con esto, donde la ubicación de la ventana dentro de la pantalla está un poco mal. Eso no es un problema para la mayoría de las ventanas, como la ventana de preferencias de PS, porque simplemente puede moverlas y la próxima vez que abra esa ventana, se abrirá en la misma ubicación.

Desafortunadamente, los diálogos de scriptui no retienen la última ubicación (¿a menos que lo haga cumplir tal vez?). Recuerdo haber tenido este problema con los cuadros de diálogo que no tienen una ubicación establecida, por lo que, por defecto/normalmente, estarían centrados en la pantalla, pero a veces simplemente insisten en abrazar el lado derecho de la pantalla cada vez que abro un cuadro de diálogo. No estoy seguro de si establecer una ubicación estática ayudaría con ese problema. Pero al menos comprarán en la pantalla secundaria.


Hay una cosa más a considerar. Para algunas personas, esta configuración de "Las pantallas tienen espacios separados" es una especie de compensación. Obtiene la barra de menú en cada pantalla, fondos separados, los espacios de pantalla completa están separados para cada pantalla y puede resolver problemas de ubicación de ventanas como este, pero tal como lo indica el nombre de la configuración, cada pantalla tiene sus propios espacios. Esto no es necesariamente una gran cosa y en realidad puede ser bastante útil, pero muchos están acostumbrados al valor predeterminado donde todas las pantallas comparten el mismo espacio en todo momento.

Si desea los otros beneficios de esta configuración pero realmente no le importan los espacios separados, puede usar TotalSpaces para sincronizarlos, esencialmente asegurándose de que cada pantalla esté en el mismo número de espacio en todo momento. Tiene una casilla de verificación Preferences > Layoutllamada Sync spaces, que solo es visible cuando la opción "Las pantallas tienen espacios separados" está activada.

Si bien tengo activado "Las pantallas tienen espacios separados", no tengo espacios separados configurados (efectivamente, mis 3 monitores están en 1 espacio). Confío en que la mayoría de mi equipo está en un barco similar para esto (todos los monitores en un espacio), por lo que no estoy seguro de que la sugerencia de espacios funcione para mi equipo, ya que tendría que alentarlos a configurar eso. solo para este script. Sin embargo, veré si configurar una ubicación estática para la ventana evitará que se muestre en un monitor diferente. ¡Merece un intento!
@RyanWalker, no veo por qué no funcionaría. Siempre tendrás al menos un espacio. Y con la configuración activada, tendrá al menos tantos espacios como pantallas. Además, si usa una aplicación en pantalla completa, eso crea automáticamente un espacio temporal de pantalla completa. Aunque tienes razón. Dado que es una solución de nivel de sistema operativo, todos deben tenerlo configurado de esa manera. Solo podemos culpar a Apple o Adobe por eso. No es tu guión el problema. Si podría o no solucionar el problema desde el script... No tengo idea.
mientras que establecer una ubicación estática no solucionó el problema del monitor; cambiar el monitor predeterminado parece haber funcionado bien. Puede ser un período de ajuste para mí, pero al menos ahora aparece en el lugar esperado. Según la sugerencia de Sergey, también cambié a dialoglo que debería ayudar al problema del enfoque. Estoy empezando a pensar que está en lo cierto cuando dice que es posible que no haya una manera de solucionar este problema del monitor desde el script.
@RyanWalker, no debería haber ninguna razón por la que ninguna de mis sugerencias funcione. Por lo tanto, no creo que necesitara cambiar la pantalla principal ya que ya tenía activada la configuración "las pantallas tienen espacios separados". Esas fueron 2 soluciones diferentes, no el paso 1 y el paso 2.
@RyanWalker, tal vez ya haya terminado el diálogo... Pero en caso de que no lo haya hecho, puse mi Scriptui Dialog Builder en línea hoy, si desea comprobarlo. Todavía tiene algunos contratiempos aquí y allá...
¡Oh Dios, esto es lo mejor que he visto nunca, Joonas! que hipo tiene
@SergeyKritskiy, tengo dos que sé que se agregaron a los problemas de github en este momento. Puede encontrar el icono de github en la parte inferior izquierda junto a los paneles grises.
Ya terminé mi diálogo, ¡pero definitivamente lo marcaré como favorito y lo usaré en el futuro! ¡Gracias por compartir Joonas!
  1. ¿Tiene alguna razón en particular por la que desea usar a palettey no a dialog? Encuentro paletas muy inestables en Photoshop, pero supongo que has leído sobre esto.

  2. Como mencionó Joonas, de forma predeterminada, las ventanas de scriptui no retienen la posición, pero puede configurar win.locationdesde win.onShowel evento y guardar la ubicación al cerrar el panel ( win.onClose) para uso futuro

Este es mi primer proyecto de ScriptUI y recuerdo que hubo una razón por la que elegí palettey no dialog, pero no recuerdo cuál fue esa razón. Intentaré ajustar mi código para ver si eso ayuda a resolver el problema (1), pero... ...eso hace que el problema 2 sea aún más difícil. Si el cuadro de diálogo se abre en un monitor diferente y no puede usar el resto de la aplicación, puedo entender que el resto de mi equipo no sepa por qué su Photoshop está congelado (si no pueden encontrar la ventana de diálogo, entonces efectivamente he congelado su aplicación).
dialogparece haber solucionado el problema de enfoque. Desafortunadamente, actualizar la propiedad win.location no soluciona el problema del monitor. Sin embargo, esta parece ser la solución ideal por ahora.
para ayudar a solucionar el problema del monitor con win.location, debe guardar las coordenadas cada vez que el usuario cierra la ventana y luego usar estas coordenadas cuando reaparece la ventana. De esta manera, la primera vez que las coordenadas serán incorrectas, el usuario moverá la ventana a la pantalla correcta, la próxima vez estará en el lugar correcto.