Added selection of monospace text on press.

This commit is contained in:
23rd 2022-01-08 08:15:26 +03:00
parent 4e4e54dcc5
commit b1f71ccab3

View file

@ -1510,7 +1510,9 @@ private:
QFixed from; QFixed from;
QFixed width; QFixed width;
} fillSpoiler; } fillSpoiler;
if (_localFrom + si.position < _selection.to) { if (_background.selectActiveBlock) {
fillSelect = { x, x + si.width };
} else if (_localFrom + si.position < _selection.to) {
auto chFrom = _str + currentBlock->from(); auto chFrom = _str + currentBlock->from();
auto chTo = chFrom + ((nextBlock ? nextBlock->from() : _t->_text.size()) - currentBlock->from()); auto chTo = chFrom + ((nextBlock ? nextBlock->from() : _t->_text.size()) - currentBlock->from());
if (_localFrom + si.position >= _selection.from) { // could be without space if (_localFrom + si.position >= _selection.from) { // could be without space
@ -1652,7 +1654,9 @@ private:
auto hasSelected = false; auto hasSelected = false;
auto hasNotSelected = true; auto hasNotSelected = true;
auto selectedRect = QRect(); auto selectedRect = QRect();
if (_localFrom + itemStart < _selection.to && _localFrom + itemEnd > _selection.from) { if (_background.selectActiveBlock) {
fillSelectRange(x, x + itemWidth);
} else if (_localFrom + itemStart < _selection.to && _localFrom + itemEnd > _selection.from) {
hasSelected = true; hasSelected = true;
auto selX = x; auto selX = x;
auto selWidth = itemWidth; auto selWidth = itemWidth;
@ -2615,6 +2619,7 @@ private:
void applyBlockProperties(const AbstractBlock *block) { void applyBlockProperties(const AbstractBlock *block) {
eSetFont(block); eSetFont(block);
if (_p) { if (_p) {
const auto isMono = IsMono(block->flags());
if (block->spoilerIndex()) { if (block->spoilerIndex()) {
const auto handler const auto handler
= _t->_spoilers.at(block->spoilerIndex() - 1); = _t->_spoilers.at(block->spoilerIndex() - 1);
@ -2639,10 +2644,15 @@ private:
*_background.color); *_background.color);
mutableCache.color = (*_background.color)->c; mutableCache.color = (*_background.color)->c;
} }
} else if (isMono && block->lnkIndex()) {
_background = {
.selectActiveBlock = ClickHandler::showAsPressed(
_t->_links.at(block->lnkIndex() - 1)),
};
} else { } else {
_background = {}; _background = {};
} }
if (IsMono(block->flags())) { if (isMono) {
_currentPen = &_textPalette->monoFg->p; _currentPen = &_textPalette->monoFg->p;
_currentPenSelected = &_textPalette->selectMonoFg->p; _currentPenSelected = &_textPalette->selectMonoFg->p;
} else if (block->lnkIndex() } else if (block->lnkIndex()
@ -2672,6 +2682,8 @@ private:
bool inFront = false; bool inFront = false;
crl::time startMs = 0; crl::time startMs = 0;
uint16 spoilerIndex = 0; uint16 spoilerIndex = 0;
bool selectActiveBlock = false; // For monospace.
} _background; } _background;
int _yFrom = 0; int _yFrom = 0;
int _yTo = 0; int _yTo = 0;