tdesktop/Telegram/SourceFiles/layout.h

154 lines
4.2 KiB
C
Raw Normal View History

2015-12-20 14:05:07 +00:00
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
2015-12-20 14:05:07 +00:00
*/
#pragma once
2017-04-06 14:38:10 +00:00
#include "base/runtime_composer.h"
constexpr auto FullSelection = TextSelection { 0xFFFF, 0xFFFF };
2015-12-20 14:05:07 +00:00
extern TextParseOptions _textNameOptions, _textDlgOptions;
extern TextParseOptions _historyTextOptions, _historyBotOptions, _historyTextNoMonoOptions, _historyBotNoMonoOptions;
const TextParseOptions &itemTextOptions(History *h, PeerData *f);
const TextParseOptions &itemTextOptions(const HistoryItem *item);
2015-12-20 14:05:07 +00:00
const TextParseOptions &itemTextNoMonoOptions(History *h, PeerData *f);
const TextParseOptions &itemTextNoMonoOptions(const HistoryItem *item);
2015-12-20 14:05:07 +00:00
2015-12-21 13:14:29 +00:00
enum RoundCorners {
SmallMaskCorners = 0x00, // for images
LargeMaskCorners,
BoxCorners,
2016-11-09 13:40:51 +00:00
MenuCorners,
2016-10-31 12:29:26 +00:00
BotKbOverCorners,
2016-07-08 10:06:41 +00:00
StickerCorners,
StickerSelectedCorners,
SelectedOverlaySmallCorners,
SelectedOverlayLargeCorners,
2015-12-21 13:14:29 +00:00
DateCorners,
DateSelectedCorners,
ForwardCorners,
MediaviewSaveCorners,
EmojiHoverCorners,
StickerHoverCorners,
BotKeyboardCorners,
BotKeyboardOverCorners,
BotKeyboardDownCorners,
PhotoSelectOverlayCorners,
Doc1Corners,
Doc2Corners,
Doc3Corners,
Doc4Corners,
2015-12-21 13:14:29 +00:00
InShadowCorners, // for photos without bg
InSelectedShadowCorners,
MessageInCorners, // with shadow
MessageInSelectedCorners,
MessageOutCorners,
MessageOutSelectedCorners,
RoundCornersCount
};
static const int32 FileStatusSizeReady = 0x7FFFFFF0;
static const int32 FileStatusSizeLoaded = 0x7FFFFFF1;
static const int32 FileStatusSizeFailed = 0x7FFFFFF2;
QString formatSizeText(qint64 size);
QString formatDownloadText(qint64 ready, qint64 total);
QString formatDurationText(qint64 duration);
QString formatDurationAndSizeText(qint64 duration, qint64 size);
QString formatGifAndSizeText(qint64 size);
QString formatPlayedText(qint64 played, qint64 duration);
int32 documentColorIndex(DocumentData *document, QString &ext);
style::color documentColor(int colorIndex);
style::color documentDarkColor(int colorIndex);
style::color documentOverColor(int colorIndex);
style::color documentSelectedColor(int colorIndex);
RoundCorners documentCorners(int colorIndex);
bool documentIsValidMediaFile(const QString &filepath);
bool documentIsExecutableName(const QString &filename);
2015-12-21 13:14:29 +00:00
class PaintContextBase {
public:
2016-12-01 19:20:33 +00:00
PaintContextBase(TimeMs ms, bool selecting) : ms(ms), selecting(selecting) {
}
2016-12-01 19:20:33 +00:00
TimeMs ms;
bool selecting;
};
class LayoutItemBase : public RuntimeComposer, public ClickHandlerHost {
2015-12-20 14:05:07 +00:00
public:
LayoutItemBase() {
2015-12-20 14:05:07 +00:00
}
LayoutItemBase(const LayoutItemBase &other) = delete;
LayoutItemBase &operator=(const LayoutItemBase &other) = delete;
2015-12-20 14:05:07 +00:00
int32 maxWidth() const {
return _maxw;
}
int32 minHeight() const {
return _minh;
}
virtual void initDimensions() = 0;
virtual int32 resizeGetHeight(int32 width) {
_width = qMin(width, _maxw);
_height = _minh;
return _height;
}
virtual void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const {
link.clear();
2015-12-20 14:05:07 +00:00
cursor = HistoryDefaultCursorState;
}
virtual void getSymbol(uint16 &symbol, bool &after, bool &upon, int x, int y) const { // from text
2015-12-20 14:05:07 +00:00
upon = hasPoint(x, y);
symbol = upon ? 0xFFFF : 0;
after = false;
}
int32 width() const {
return _width;
}
int32 height() const {
return _height;
}
bool hasPoint(int x, int y) const {
2015-12-20 14:05:07 +00:00
return (x >= 0 && y >= 0 && x < width() && y < height());
}
virtual ~LayoutItemBase() {
}
protected:
int _width = 0;
int _height = 0;
int _maxw = 0;
int _minh = 0;
};