43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
|
/*
|
||
|
This file is part of Telegram Desktop,
|
||
|
the official desktop application for the Telegram messaging service.
|
||
|
|
||
|
For license and copyright information please follow this link:
|
||
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||
|
*/
|
||
|
#include "layout/layout_selection.h"
|
||
|
|
||
|
bool IsSubGroupSelection(TextSelection selection) {
|
||
|
return (selection.from == 0xFFFF) && (selection.to != 0xFFFF);
|
||
|
}
|
||
|
|
||
|
bool IsGroupItemSelection(
|
||
|
TextSelection selection,
|
||
|
int index) {
|
||
|
Expects(index >= 0 && index < 0x0F);
|
||
|
|
||
|
return IsSubGroupSelection(selection) && (selection.to & (1 << index));
|
||
|
}
|
||
|
|
||
|
TextSelection AddGroupItemSelection(
|
||
|
TextSelection selection,
|
||
|
int index) {
|
||
|
Expects(index >= 0 && index < 0x0F);
|
||
|
|
||
|
const auto bit = uint16(1U << index);
|
||
|
return TextSelection(
|
||
|
0xFFFF,
|
||
|
IsSubGroupSelection(selection) ? (selection.to | bit) : bit);
|
||
|
}
|
||
|
|
||
|
TextSelection RemoveGroupItemSelection(
|
||
|
TextSelection selection,
|
||
|
int index) {
|
||
|
Expects(index >= 0 && index < 0x0F);
|
||
|
|
||
|
const auto bit = uint16(1U << index);
|
||
|
return IsSubGroupSelection(selection)
|
||
|
? TextSelection(0xFFFF, selection.to & ~bit)
|
||
|
: selection;
|
||
|
}
|