UI: Add padding to scene edges for editing

Add a 10 pixel padding to the sides and remove viewport cutting to
ensure that the editing rectangles are visible even when in the upper
corners.

Also, add a black background for the actual 'scene' in the preview
window so that the scene boundries are actually visible in relation to
the rest of the preview space.
This commit is contained in:
jp9000 2014-06-15 19:48:02 -07:00
parent 452e0695f4
commit 98ddb846dc
2 changed files with 56 additions and 4 deletions

View file

@ -48,6 +48,8 @@
#include <QScreen>
#include <QWindow>
#define PREVIEW_EDGE_SIZE 10
using namespace std;
Q_DECLARE_METATYPE(OBSScene);
@ -816,6 +818,35 @@ void OBSBasic::ChannelChanged(void *data, calldata_t params)
Q_ARG(OBSSource, OBSSource(source)));
}
void OBSBasic::DrawBackdrop(float cx, float cy)
{
if (!box)
return;
effect_t solid = obs_get_solid_effect();
eparam_t color = effect_getparambyname(solid, "color");
technique_t tech = effect_gettechnique(solid, "Solid");
vec4 colorVal;
vec4_set(&colorVal, 0.0f, 0.0f, 0.0f, 1.0f);
effect_setvec4(solid, color, &colorVal);
technique_begin(tech);
technique_beginpass(tech, 0);
gs_matrix_push();
gs_matrix_identity();
gs_matrix_scale3f(float(cx), float(cy), 1.0f);
gs_load_vertexbuffer(box);
gs_draw(GS_TRISTRIP, 0, 0);
gs_matrix_pop();
technique_endpass(tech);
technique_end(tech);
gs_load_vertexbuffer(nullptr);
}
void OBSBasic::RenderMain(void *data, uint32_t cx, uint32_t cy)
{
OBSBasic *window = static_cast<OBSBasic*>(data);
@ -828,18 +859,33 @@ void OBSBasic::RenderMain(void *data, uint32_t cx, uint32_t cy)
gs_viewport_push();
gs_projection_push();
/* --------------------------------------- */
gs_ortho(0.0f, float(ovi.base_width), 0.0f, float(ovi.base_height),
-100.0f, 100.0f);
gs_setviewport(window->previewX, window->previewY,
window->previewCX, window->previewCY);
obs_render_main_view();
window->DrawBackdrop(float(ovi.base_width), float(ovi.base_height));
gs_ortho(0.0f, float(window->previewCX), 0.0f, float(window->previewCY),
-100.0f, 100.0f);
obs_render_main_view();
gs_load_vertexbuffer(nullptr);
/* --------------------------------------- */
float right = float(window->ui->preview->width()) - window->previewX;
float bottom = float(window->ui->preview->height()) - window->previewY;
gs_ortho(-window->previewX, right,
-window->previewY, bottom,
-100.0f, 100.0f);
gs_resetviewport();
window->ui->preview->DrawSceneEditing();
/* --------------------------------------- */
gs_projection_pop();
gs_viewport_pop();
@ -1014,9 +1060,13 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
/* resize preview panel to fix to the top section of the window */
targetSize = GetPixelSize(ui->preview);
GetScaleAndCenterPos(int(cx), int(cy),
targetSize.width(), targetSize.height(),
targetSize.width() - PREVIEW_EDGE_SIZE * 2,
targetSize.height() - PREVIEW_EDGE_SIZE * 2,
previewX, previewY, previewScale);
previewX += float(PREVIEW_EDGE_SIZE);
previewY += float(PREVIEW_EDGE_SIZE);
if (isVisible()) {
if (resizeTimer)
killTimer(resizeTimer);

View file

@ -82,6 +82,8 @@ private:
int activeRefs = 0;
void DrawBackdrop(float cx, float cy);
void SetupEncoders();
void CreateDefaultScene();