Skip to content

Commit bf719ba

Browse files
committed
Added ipadding property support by the tk::Overlay widget
1 parent 7d0a75c commit bf719ba

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

include/lsp-plug.in/tk/widgets/containers/Overlay.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace lsp
4747
prop::Integer sShadowSize; // Shadow size
4848
prop::Color sShadowStart; // Shadow start color
4949
prop::Color sShadowEnd; // Shadow end color
50+
prop::Padding sIPadding; // Internal padding
5051
LSP_TK_STYLE_DEF_END
5152
}
5253

@@ -87,6 +88,7 @@ namespace lsp
8788
prop::Integer sShadowSize; // Shadow size
8889
prop::Color sShadowStart; // Shadow start color
8990
prop::Color sShadowEnd; // Shadow end color
91+
prop::Padding sIPadding; // Internal padding
9092

9193
overlay_position_t pPosFunc; // Position calculation function
9294
void *pPosData; // Position data function
@@ -141,6 +143,7 @@ namespace lsp
141143
LSP_TK_PROPERTY(Integer, shadow_size, &sShadowSize)
142144
LSP_TK_PROPERTY(Color, shadow_start, &sShadowStart)
143145
LSP_TK_PROPERTY(Color, shadow_end, &sShadowEnd)
146+
LSP_TK_PROPERTY(Padding, ipadding, &sIPadding)
144147

145148
public:
146149
virtual void draw(ws::ISurface *s, bool force) override;

src/main/widgets/containers/Overlay.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ namespace lsp
4444
sShadowSize.bind("shadow.size", this);
4545
sShadowStart.bind("shadow.start", this);
4646
sShadowEnd.bind("shadow.end", this);
47+
sIPadding.bind("ipadding", this);
4748

4849
// Configure
4950
sTransparency.set(0.25f);
@@ -59,6 +60,7 @@ namespace lsp
5960
sShadowSize.set(0);
6061
sShadowStart.set_rgba32(0x00000000);
6162
sShadowEnd.set_rgba32(0xff000000);
63+
sIPadding.set_all(0);
6264

6365
// Override
6466
sLayout.override();
@@ -83,7 +85,8 @@ namespace lsp
8385
sBorderColor(&sProperties),
8486
sShadowSize(&sProperties),
8587
sShadowStart(&sProperties),
86-
sShadowEnd(&sProperties)
88+
sShadowEnd(&sProperties),
89+
sIPadding(&sProperties)
8790
{
8891
pClass = &metadata;
8992

@@ -117,6 +120,7 @@ namespace lsp
117120
sShadowSize.bind("shadow.size", &sStyle);
118121
sShadowStart.bind("shadow.start", &sStyle);
119122
sShadowEnd.bind("shadow.end", &sStyle);
123+
sIPadding.bind("ipadding", &sStyle);
120124

121125
return STATUS_OK;
122126
}
@@ -151,7 +155,7 @@ namespace lsp
151155

152156
if (prop->one_of(sTransparency, sPriority, sBorderColor))
153157
query_draw();
154-
if (prop->one_of(sLayout, sConstraints, sPosition, sBorderRadius, sBorderRounding, sBorderSize))
158+
if (prop->one_of(sLayout, sConstraints, sPosition, sBorderRadius, sBorderRounding, sBorderSize, sIPadding))
155159
query_resize();
156160
}
157161

src/main/widgets/containers/Window.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,16 +1387,15 @@ namespace lsp
13871387

13881388
// Query for size
13891389
ws::size_limit_t sr;
1390-
float scaling = lsp_max(sScaling.get(), 0.0f);
1391-
size_t border = lsp_max(0, sBorderSize.get()) * scaling;
1390+
const float scaling = lsp_max(sScaling.get(), 0.0f);
1391+
const size_t border = lsp_max(0, sBorderSize.get()) * scaling;
13921392

13931393
pChild->get_padded_size_limits(&sr);
13941394

13951395
// Compute size of window without border
1396-
ws::rectangle_t rc = *r;
1396+
ws::rectangle_t rc;
13971397
rc.nLeft = border;
13981398
rc.nTop = border;
1399-
14001399
rc.nWidth = lsp_max(0, ssize_t(r->nWidth - border*2));
14011400
rc.nHeight = lsp_max(0, ssize_t(r->nHeight - border*2));
14021401

@@ -1417,24 +1416,33 @@ namespace lsp
14171416
continue;
14181417

14191418
// Calculate position of the overlay
1419+
const float ov_scaling = lsp_max(0.0f, ov->scaling()->get());
14201420
ov->get_size_limits(&sr);
14211421
rc.nLeft = 0;
14221422
rc.nTop = 0;
1423-
rc.nWidth = lsp_max(sr.nMinWidth, 1);
1424-
rc.nHeight = lsp_max(sr.nMinHeight, 1);
1423+
rc.nWidth = lsp_max((sr.nPreWidth > 0) ? sr.nPreWidth : sr.nMinWidth, 1);
1424+
rc.nHeight = lsp_max((sr.nPreHeight > 0) ? sr.nPreHeight : sr.nMinHeight, 1);
14251425

14261426
ov->position()->get(&rc.nLeft, &rc.nTop);
1427+
ov->ipadding()->leave(&rc, ov_scaling);
14271428

1428-
if (!ov->calculate_position(&rc))
1429+
// Query position of the overlay widget. Use temporary rectangle to prevent of modifying size of the rectangle
1430+
ws::rectangle_t qrc = rc;
1431+
if (!ov->calculate_position(&qrc))
14291432
{
14301433
ov->visibility()->set(false);
14311434
continue;
14321435
}
1436+
rc.nLeft = qrc.nLeft;
1437+
rc.nTop = qrc.nTop;
1438+
1439+
// Exclude internal padding now
1440+
ov->ipadding()->enter(&rc, ov_scaling);
14331441

14341442
// Apply window-related padding
14351443
tk::padding_t padding;
1436-
const float scaling = lsp_max(0.0f, ov->scaling()->get());
1437-
ov->padding()->compute(&padding, scaling);
1444+
1445+
ov->padding()->compute(&padding, ov_scaling);
14381446

14391447
padding.nRight = r->nWidth - padding.nRight;
14401448
padding.nBottom = r->nHeight - padding.nBottom;

0 commit comments

Comments
 (0)