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;
 | |
| }
 | 
