42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			42 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;
 | 
						|
}
 |