mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-07 22:45:59 +01:00
windowrules: add nearestneighbor
This commit is contained in:
parent
50a80efad5
commit
03771d3aa9
5 changed files with 14 additions and 2 deletions
|
@ -516,6 +516,8 @@ void CWindow::applyDynamicRule(const SWindowRule& r) {
|
||||||
m_sAdditionalConfigData.forceOpaque = true;
|
m_sAdditionalConfigData.forceOpaque = true;
|
||||||
} else if (r.szRule == "immediate") {
|
} else if (r.szRule == "immediate") {
|
||||||
m_sAdditionalConfigData.forceTearing = true;
|
m_sAdditionalConfigData.forceTearing = true;
|
||||||
|
} else if (r.szRule == "nearestneighbor") {
|
||||||
|
m_sAdditionalConfigData.nearestNeighbor = true;
|
||||||
} else if (r.szRule.starts_with("rounding")) {
|
} else if (r.szRule.starts_with("rounding")) {
|
||||||
try {
|
try {
|
||||||
m_sAdditionalConfigData.rounding = std::stoi(r.szRule.substr(r.szRule.find_first_of(' ') + 1));
|
m_sAdditionalConfigData.rounding = std::stoi(r.szRule.substr(r.szRule.find_first_of(' ') + 1));
|
||||||
|
@ -605,6 +607,7 @@ void CWindow::updateDynamicRules() {
|
||||||
m_sAdditionalConfigData.keepAspectRatio = false;
|
m_sAdditionalConfigData.keepAspectRatio = false;
|
||||||
m_sAdditionalConfigData.xray = -1;
|
m_sAdditionalConfigData.xray = -1;
|
||||||
m_sAdditionalConfigData.forceTearing = false;
|
m_sAdditionalConfigData.forceTearing = false;
|
||||||
|
m_sAdditionalConfigData.nearestNeighbor = false;
|
||||||
|
|
||||||
const auto WINDOWRULES = g_pConfigManager->getMatchingRules(this);
|
const auto WINDOWRULES = g_pConfigManager->getMatchingRules(this);
|
||||||
for (auto& r : WINDOWRULES) {
|
for (auto& r : WINDOWRULES) {
|
||||||
|
|
|
@ -143,6 +143,7 @@ struct SWindowAdditionalConfigData {
|
||||||
CWindowOverridableVar<int> xray = -1; // -1 means unset, takes precedence over the renderdata one
|
CWindowOverridableVar<int> xray = -1; // -1 means unset, takes precedence over the renderdata one
|
||||||
CWindowOverridableVar<int> borderSize = -1; // -1 means unset, takes precedence over the renderdata one
|
CWindowOverridableVar<int> borderSize = -1; // -1 means unset, takes precedence over the renderdata one
|
||||||
CWindowOverridableVar<bool> forceTearing = false;
|
CWindowOverridableVar<bool> forceTearing = false;
|
||||||
|
CWindowOverridableVar<bool> nearestNeighbor = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SWindowRule {
|
struct SWindowRule {
|
||||||
|
|
|
@ -935,7 +935,7 @@ bool windowRuleValid(const std::string& RULE) {
|
||||||
RULE == "nomaximizerequest" || RULE == "fakefullscreen" || RULE == "nomaxsize" || RULE == "pin" || RULE == "noanim" || RULE == "dimaround" || RULE == "windowdance" ||
|
RULE == "nomaximizerequest" || RULE == "fakefullscreen" || RULE == "nomaxsize" || RULE == "pin" || RULE == "noanim" || RULE == "dimaround" || RULE == "windowdance" ||
|
||||||
RULE == "maximize" || RULE == "keepaspectratio" || RULE.starts_with("animation") || RULE.starts_with("rounding") || RULE.starts_with("workspace") ||
|
RULE == "maximize" || RULE == "keepaspectratio" || RULE.starts_with("animation") || RULE.starts_with("rounding") || RULE.starts_with("workspace") ||
|
||||||
RULE.starts_with("bordercolor") || RULE == "forcergbx" || RULE == "noinitialfocus" || RULE == "stayfocused" || RULE.starts_with("bordersize") || RULE.starts_with("xray") ||
|
RULE.starts_with("bordercolor") || RULE == "forcergbx" || RULE == "noinitialfocus" || RULE == "stayfocused" || RULE.starts_with("bordersize") || RULE.starts_with("xray") ||
|
||||||
RULE.starts_with("center") || RULE.starts_with("group") || RULE == "immediate";
|
RULE.starts_with("center") || RULE.starts_with("group") || RULE == "immediate" || RULE == "nearestneighbor";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool layerRuleValid(const std::string& RULE) {
|
bool layerRuleValid(const std::string& RULE) {
|
||||||
|
|
|
@ -1073,6 +1073,8 @@ std::string dispatchSetProp(std::string request) {
|
||||||
PWINDOW->m_sAdditionalConfigData.keepAspectRatio.forceSetIgnoreLocked(configStringToInt(VAL), lock);
|
PWINDOW->m_sAdditionalConfigData.keepAspectRatio.forceSetIgnoreLocked(configStringToInt(VAL), lock);
|
||||||
} else if (PROP == "immediate") {
|
} else if (PROP == "immediate") {
|
||||||
PWINDOW->m_sAdditionalConfigData.forceTearing.forceSetIgnoreLocked(configStringToInt(VAL), lock);
|
PWINDOW->m_sAdditionalConfigData.forceTearing.forceSetIgnoreLocked(configStringToInt(VAL), lock);
|
||||||
|
} else if (PROP == "nearestneighbor") {
|
||||||
|
PWINDOW->m_sAdditionalConfigData.nearestNeighbor.forceSetIgnoreLocked(configStringToInt(VAL), lock);
|
||||||
} else {
|
} else {
|
||||||
return "prop not found";
|
return "prop not found";
|
||||||
}
|
}
|
||||||
|
|
|
@ -427,7 +427,7 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS);
|
wd->draw(pMonitor, renderdata.alpha * renderdata.fadeAlpha, Vector2D{renderdata.x, renderdata.y} - PREOFFSETPOS);
|
||||||
|
|
||||||
static auto* const PXWLUSENN = &g_pConfigManager->getConfigValuePtr("xwayland:use_nearest_neighbor")->intValue;
|
static auto* const PXWLUSENN = &g_pConfigManager->getConfigValuePtr("xwayland:use_nearest_neighbor")->intValue;
|
||||||
if (pWindow->m_bIsX11 && *PXWLUSENN)
|
if ((pWindow->m_bIsX11 && *PXWLUSENN) || pWindow->m_sAdditionalConfigData.nearestNeighbor.toUnderlying())
|
||||||
g_pHyprOpenGL->m_RenderData.useNearestNeighbor = true;
|
g_pHyprOpenGL->m_RenderData.useNearestNeighbor = true;
|
||||||
|
|
||||||
wlr_surface_for_each_surface(pWindow->m_pWLSurface.wlr(), renderSurface, &renderdata);
|
wlr_surface_for_each_surface(pWindow->m_pWLSurface.wlr(), renderSurface, &renderdata);
|
||||||
|
@ -483,7 +483,13 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
renderdata.dontRound = true; // don't round popups
|
renderdata.dontRound = true; // don't round popups
|
||||||
renderdata.pMonitor = pMonitor;
|
renderdata.pMonitor = pMonitor;
|
||||||
renderdata.squishOversized = false; // don't squish popups
|
renderdata.squishOversized = false; // don't squish popups
|
||||||
|
|
||||||
|
if (pWindow->m_sAdditionalConfigData.nearestNeighbor.toUnderlying())
|
||||||
|
g_pHyprOpenGL->m_RenderData.useNearestNeighbor = true;
|
||||||
|
|
||||||
wlr_xdg_surface_for_each_popup_surface(pWindow->m_uSurface.xdg, renderSurface, &renderdata);
|
wlr_xdg_surface_for_each_popup_surface(pWindow->m_uSurface.xdg, renderSurface, &renderdata);
|
||||||
|
|
||||||
|
g_pHyprOpenGL->m_RenderData.useNearestNeighbor = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue