mirror of
https://github.com/zadam/trilium.git
synced 2024-11-11 01:23:57 +08:00
Various window border related fixes (#2077)
* Remove gap between window control buttons and top of screen, add square hitbox to window control buttons * Add better overflow detection for context menu * Remove gap between tabs and top of screen
This commit is contained in:
parent
9da8d466b8
commit
89d28ef27c
3 changed files with 48 additions and 17 deletions
|
@ -25,21 +25,46 @@ class ContextMenu {
|
|||
positionMenu() {
|
||||
// code below tries to detect when dropdown would overflow from page
|
||||
// in such case we'll position it above click coordinates so it will fit into client
|
||||
|
||||
const CONTEXT_MENU_PADDING = 5; // How many pixels to pad context menu from edge of screen
|
||||
const CONTEXT_MENU_OFFSET = 10; // How many pixels to offset context menu by relative to cursor
|
||||
|
||||
const clientHeight = document.documentElement.clientHeight;
|
||||
const contextMenuHeight = this.$widget.outerHeight() + 30;
|
||||
const clientWidth = document.documentElement.clientWidth;
|
||||
const contextMenuHeight = this.$widget.outerHeight();
|
||||
const contextMenuWidth = this.$widget.outerWidth();
|
||||
let top, left;
|
||||
|
||||
if (this.options.y + contextMenuHeight > clientHeight) {
|
||||
top = clientHeight - contextMenuHeight - 10;
|
||||
if (this.options.y + contextMenuHeight - CONTEXT_MENU_OFFSET > clientHeight - CONTEXT_MENU_PADDING) {
|
||||
// Overflow: bottom
|
||||
top = clientHeight - contextMenuHeight - CONTEXT_MENU_PADDING;
|
||||
} else if (this.options.y - CONTEXT_MENU_OFFSET < CONTEXT_MENU_PADDING) {
|
||||
// Overflow: top
|
||||
top = CONTEXT_MENU_PADDING;
|
||||
} else {
|
||||
top = this.options.y - 10;
|
||||
top = this.options.y - CONTEXT_MENU_OFFSET;
|
||||
}
|
||||
|
||||
if (this.options.orientation === 'left') {
|
||||
left = this.options.x - this.$widget.outerWidth() + 20;
|
||||
}
|
||||
else {
|
||||
left = this.options.x - 20;
|
||||
if (this.options.x + CONTEXT_MENU_OFFSET > clientWidth - CONTEXT_MENU_PADDING) {
|
||||
// Overflow: right
|
||||
left = clientWidth - contextMenuWidth - CONTEXT_MENU_OFFSET;
|
||||
} else if (this.options.x - contextMenuWidth + CONTEXT_MENU_OFFSET < CONTEXT_MENU_PADDING) {
|
||||
// Overflow: left
|
||||
left = CONTEXT_MENU_PADDING;
|
||||
} else {
|
||||
left = this.options.x - contextMenuWidth + CONTEXT_MENU_OFFSET;
|
||||
}
|
||||
} else {
|
||||
if (this.options.x + contextMenuWidth - CONTEXT_MENU_OFFSET > clientWidth - CONTEXT_MENU_PADDING) {
|
||||
// Overflow: right
|
||||
left = clientWidth - contextMenuWidth - CONTEXT_MENU_PADDING;
|
||||
} else if (this.options.x - CONTEXT_MENU_OFFSET < CONTEXT_MENU_PADDING) {
|
||||
// Overflow: left
|
||||
left = CONTEXT_MENU_PADDING;
|
||||
} else {
|
||||
left = this.options.x - CONTEXT_MENU_OFFSET;
|
||||
}
|
||||
}
|
||||
|
||||
this.$widget.css({
|
||||
|
|
|
@ -51,7 +51,6 @@ const TAB_ROW_TPL = `
|
|||
width: 100%;
|
||||
background: var(--main-background-color);
|
||||
overflow: hidden;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.tab-row-widget * {
|
||||
|
|
|
@ -6,25 +6,32 @@ const TPL = `
|
|||
<div class="title-bar-buttons">
|
||||
<style>
|
||||
.title-bar-buttons {
|
||||
margin-top: 4px;
|
||||
margin-right: 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.title-bar-buttons button.icon-action {
|
||||
|
||||
.title-bar-buttons div button.icon-action {
|
||||
border: none !important;
|
||||
background: none !important;
|
||||
font-size: 150%;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.title-bar-buttons button:hover {
|
||||
.title-bar-buttons div:hover button {
|
||||
background-color: var(--accented-background-color) !important;
|
||||
}
|
||||
|
||||
.title-bar-buttons div {
|
||||
display: inline-block;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<button class="btn icon-action bx bx-minus minimize-btn"></button>
|
||||
<button class="btn icon-action bx bx-checkbox maximize-btn"></button>
|
||||
<button class="btn icon-action bx bx-x close-btn"></button>
|
||||
<!-- divs act as a hitbox for the buttons, making them clickable on corners -->
|
||||
<div class="minimize-btn"><button class="btn icon-action bx bx-minus"></button></div>
|
||||
<div class="maximize-btn"><button class="btn icon-action bx bx-checkbox"></button></div>
|
||||
<div class="close-btn"><button class="btn icon-action bx bx-x"></button></div>
|
||||
</div>`;
|
||||
|
||||
export default class TitleBarButtonsWidget extends BasicWidget {
|
||||
|
|
Loading…
Reference in a new issue