WinEQ, never (limitations in the program). IS, immediately.
5+ seconds for swapping seems pretty bad. And, I'll tell you why it happens. With EQ2 (and even WoW, probably many other games as well), when you resize the window, you cause the game to reset the Direct3D device so it can set the resolution to the size of the visible portion of the window. This is in contrast to EQ1, where resizing simply scales the picture, not involving setting the resolution or resetting Direct3D. When the reset happens, all Direct3D resources have to be loaded again. Every texture, etc. That's why it will take so long at present.
Now for what you're looking for.
You may or may not have discovered with IS that PiP.iss is just a script that runs on a single session when it becomes foreground.
Here's the part you would want to customize:
Code: Select all
;Do not remove or change this line. --IS0.94
; Picture-in-Picture
; This is the upper left corner, given in pixels, of where Picture windows will start. They will
; be lined up in a single direction from this point. The direction is chosen below
#define LEFT 20
#define TOP 20
; Height and width by default are calculated to 1/4 of the height and width of the active window
#define HEIGHT ${Math.Calc[${Display.ViewableHeight}/4]}
#define WIDTH ${Math.Calc[${Display.ViewableWidth}/4]}
; They can be numbers, as below
;#define HEIGHT 320
;#define WIDTH 240
; Select one direction by changing the line below to one of the four possibilities
#define DIRECTION DIRECTION_DOWN
; Don't change these four lines
#define DIRECTION_DOWN y:Inc[${cy}]
#define DIRECTION_UP y:Dec[${cy}]
#define DIRECTION_RIGHT x:Inc[${cx}]
#define DIRECTION_LEFT x:Dec[${cx}]
It's fairly simple. If you want 5 320x240 sessions, uncomment the 320 and 240 lines, and comment the 2 lines above it with calculations. By default, the PIP windows start at 20,20, you can set that too. And if you want them across the top, you can do that by changing DIRECTION_DOWN in the #define DIRECTION to DIRECTION_LEFT. Etc. Then, if you want to change the size of the main window, you can simply change the "normal" size in PreInit.iss here:
Code: Select all
function NormalSession()
{
; customize this part for other games
alias normalsize WindowSize -viewable [color=red]1024x768[/color]
alias tinysize WindowSize -viewable 256x192
noparse alias normalposition WindowPos -viewable ${Display.DesktopX},${Display.DesktopY}
noparse alias tinyposition WindowPos ${Math.Calc[${Display.DesktopX}+10].Int},${Math.Calc[${Display.DesktopY}+10].Int}
alias fullscreenmouse
alias normalmouse
alias tinymouse
alias pipforeground normal
bind fullscreenkey SHIFT+ALT+f fullscreen
bind normalkey SHIFT+ALT+n normal
bind tinykey SHIFT+ALT+t tiny
bind next CTRL+ALT+x "uplink focus -next"
bind previous CTRL+ALT+z "uplink focus -previous"
}
The only thing difficult from the above at this point is a strip across the bottom, if it needs to be part of a session (for displaying a HUD, etc). Though you could have a dummy Direct3D process and have sessions relay info to it to display.