Default layout now emulates the pod interior
[ MFD UL ] [ MFD UC ] [ MFD UR ] [ plasma (reduced) ][ main screen (centered) ] [ MFD LL ] [ Map ] [ MFD LR ] SVGA16 moves the main game window into the middle band (centered under the MFD columns) and shrinks the plasma glass to fill the space at its left via a new PlasmaScreen::Position hook (the glass paint stretches to the client area, so resizing rescales it). Lower row sits below the main screen band. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+49
-13
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "l4vb16.h"
|
||||
#include "l4mfdview.h"
|
||||
#include "l4plasmascreen.h"
|
||||
#include "../munga/gaugrend.h"
|
||||
#include "L4VIDEO.h"
|
||||
#include "DXUtils.h"
|
||||
@@ -3858,14 +3859,49 @@ SVGA16::SVGA16(
|
||||
int cell_h = (init_height * scale_percent) / 100;
|
||||
int frame_h = GetSystemMetrics(SM_CYCAPTION) + 2 * GetSystemMetrics(SM_CYFIXEDFRAME);
|
||||
int frame_w = 2 * GetSystemMetrics(SM_CXFIXEDFRAME);
|
||||
int grid_x = init_width + frame_w;
|
||||
|
||||
// The pod stacks its displays vertically: upper MFDs above the
|
||||
// viewscreen, weapon MFDs + secondary below it. On the desktop
|
||||
// the upper row sits level with the main screen's top and the
|
||||
// lower row drops below its bottom edge, so the main screen
|
||||
// reads as the middle band.
|
||||
int row2_y = (int) L4Application::GetScreenHeight();
|
||||
//---------------------------------------------------------------
|
||||
// Emulate the pod interior:
|
||||
// [ MFD UL ] [ MFD UC ] [ MFD UR ]
|
||||
// [ plasma (reduced) ][ main screen (centered) ]
|
||||
// [ MFD LL ] [ Map ] [ MFD LR ]
|
||||
// The main game window is moved into the middle band; the plasma
|
||||
// glass shrinks to fill the space at its left.
|
||||
//---------------------------------------------------------------
|
||||
int strip_h = cell_h / 8;
|
||||
if (strip_h < 18) strip_h = 18;
|
||||
if (strip_h > 40) strip_h = 40;
|
||||
int mfd_extra_h = 2 * (strip_h + 8);
|
||||
|
||||
int col_span = cell_w + frame_w;
|
||||
int row_w = 3 * col_span;
|
||||
int band_y = cell_h + mfd_extra_h + frame_h; // below the upper row
|
||||
|
||||
int main_w = (int) L4Application::GetScreenWidth();
|
||||
int main_h = (int) L4Application::GetScreenHeight();
|
||||
int main_x = (row_w - main_w) / 2;
|
||||
if (main_x < 0) main_x = 0;
|
||||
|
||||
HWND main_window = ApplicationManager::GetCurrentManager()->GetHWnd();
|
||||
if (main_window != NULL)
|
||||
{
|
||||
SetWindowPos(main_window, NULL, main_x, band_y, 0, 0,
|
||||
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
}
|
||||
|
||||
// plasma: reduced to fit left of the main screen, centered
|
||||
// vertically in the band (128x32 glass aspect)
|
||||
int plasma_avail = main_x - 12;
|
||||
if (plasma_avail >= 128)
|
||||
{
|
||||
int glass_w = plasma_avail;
|
||||
int glass_h = glass_w / 4;
|
||||
PlasmaScreen::Position(
|
||||
4, band_y + (main_h - glass_h - frame_h) / 2,
|
||||
glass_w, glass_h);
|
||||
}
|
||||
|
||||
int lower_y = band_y + main_h;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Button banks per display (addresses per vRIO CockpitLayout,
|
||||
@@ -3876,23 +3912,23 @@ SVGA16::SVGA16(
|
||||
//---------------------------------------------------------------
|
||||
splitView[SplitMFDUpperLeft] = new MFDSplitView(
|
||||
"MFD upper left", init_width, init_height,
|
||||
cell_w, cell_h, grid_x, 0,
|
||||
cell_w, cell_h, 0, 0,
|
||||
MFDSplitView::MFDStrips, 0x2F);
|
||||
splitView[SplitMFDUpperCenter] = new MFDSplitView(
|
||||
"MFD upper center", init_width, init_height,
|
||||
cell_w, cell_h, grid_x + (cell_w + frame_w), 0,
|
||||
cell_w, cell_h, col_span, 0,
|
||||
MFDSplitView::MFDStrips, 0x27);
|
||||
splitView[SplitMFDUpperRight] = new MFDSplitView(
|
||||
"MFD upper right", init_width, init_height,
|
||||
cell_w, cell_h, grid_x + 2 * (cell_w + frame_w), 0,
|
||||
cell_w, cell_h, 2 * col_span, 0,
|
||||
MFDSplitView::MFDStrips, 0x37);
|
||||
splitView[SplitMFDLowerLeft] = new MFDSplitView(
|
||||
"MFD lower left", init_width, init_height,
|
||||
cell_w, cell_h, grid_x, row2_y,
|
||||
cell_w, cell_h, 0, lower_y,
|
||||
MFDSplitView::MFDStrips, 0x0F);
|
||||
splitView[SplitMFDLowerRight] = new MFDSplitView(
|
||||
"MFD lower right", init_width, init_height,
|
||||
cell_w, cell_h, grid_x + 2 * (cell_w + frame_w), row2_y,
|
||||
cell_w, cell_h, 2 * col_span, lower_y,
|
||||
MFDSplitView::MFDStrips, 0x07);
|
||||
// map is portrait: source rotated 90 degrees clockwise; shift left
|
||||
// by one side-button column so the GLASS (not the window) centers
|
||||
@@ -3903,7 +3939,7 @@ SVGA16::SVGA16(
|
||||
splitView[SplitMap] = new MFDSplitView(
|
||||
"Map", init_height, init_width,
|
||||
cell_h, cell_w,
|
||||
grid_x + (cell_w + frame_w) + (cell_w - cell_h) / 2 - (map_col_w + 8), row2_y,
|
||||
col_span + (cell_w - cell_h) / 2 - (map_col_w + 8), lower_y,
|
||||
MFDSplitView::SideColumns, 0x10, 0x18);
|
||||
|
||||
DEBUG_STREAM << "SVGA16: split views active - 5 MFD windows + rotated map, cockpit buttons on (scale "
|
||||
|
||||
Reference in New Issue
Block a user