void FWebBrowserWindow::SetViewportSize(FVector2D WindowSize) { // Magic number for texture size, can't access GetMax2DTextureDimension easily FIntPoint ClampedWindowSize = WindowSize.ClampAxes(1, 2048).IntPoint(); if (ViewportSize != ClampedWindowSize) { FIntPoint OldViewportSize = MoveTemp(ViewportSize); TArray<uint8> OldTextureData = MoveTemp(TextureData); ViewportSize = ClampedWindowSize; TextureData.SetNumZeroed(ViewportSize.X * ViewportSize.Y * 4); // copy row by row to avoid texture distortion const int32 WriteWidth = FMath::Min(OldViewportSize.X, ViewportSize.X) * 4; const int32 WriteHeight = FMath::Min(OldViewportSize.Y, ViewportSize.Y); for (int32 RowIndex = 0; RowIndex < WriteHeight; ++RowIndex) { FMemory::Memcpy(TextureData.GetData() + ViewportSize.X * RowIndex * 4, OldTextureData.GetData() + OldViewportSize.X * RowIndex * 4, WriteWidth); } if (UpdatableTexture != nullptr) { UpdatableTexture->ResizeTexture(ViewportSize.X, ViewportSize.Y); UpdatableTexture->UpdateTexture(TextureData); } if (IsValid()) { InternalCefBrowser->GetHost()->WasResized(); } } }