diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-07-14 22:51:44 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-09-27 22:41:38 +0200 |
| commit | 1dddce26733fc87e559e547003890357969350ca (patch) | |
| tree | cb6be65361fb492e88d7a008f08be9f5cf5372c9 /src/lib/layout_markers.h | |
| parent | 4e6e9f6303a0ea00c2bbc2978bde6f9284f6e02f (diff) | |
Draw markers better next to the position slider (#3005).
Diffstat (limited to 'src/lib/layout_markers.h')
| -rw-r--r-- | src/lib/layout_markers.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/lib/layout_markers.h b/src/lib/layout_markers.h new file mode 100644 index 000000000..5c615f20e --- /dev/null +++ b/src/lib/layout_markers.h @@ -0,0 +1,93 @@ +/* + Copyright (C) 2025 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic 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 2 of the License, or + (at your option) any later version. + + DCP-o-matic 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. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "dcpomatic_time.h" +#include <dcp/types.h> +#include <string> +#include <utility> +#include <vector> + + +class MarkerLayoutComponent +{ +public: + enum class Type { + LEFT, + RIGHT, + LINE, + LABEL + }; + + MarkerLayoutComponent(Type type_, int x1_, int y_, dcp::Marker marker_, dcpomatic::DCPTime t1_) + : type(type_) + , x1(x1_) + , y(y_) + , marker(marker_) + , t1(t1_) + {} + + MarkerLayoutComponent(Type type_, int x1_, int x2_, int y_) + : type(type_) + , x1(x1_) + , x2(x2_) + , y(y_) + {} + + MarkerLayoutComponent(Type type_, int x1_, int width, int y_, std::string text_) + : type(type_) + , x1(x1_) + , x2(x1_ + width) + , y(y_) + , text(text_) + {} + + Type type = Type::LINE; + int x1 = 0; + int x2 = 0; + int y = 0; + boost::optional<dcp::Marker> marker; + dcpomatic::DCPTime t1; + std::string text; +}; + + +class AllocationRow +{ +public: + AllocationRow() = default; + + /** @return true if allocation succeded, otherwise false */ + bool allocate(int x1, int x2); + +private: + std::vector<std::pair<int, int>> _allocated; +}; + + +std::vector<MarkerLayoutComponent> layout_markers( + std::map<dcp::Marker, dcpomatic::DCPTime> const& markers, + int width_in_pixels, + dcpomatic::DCPTime width_in_time, + int label_to_end_gap, + int outside_label_gap, + std::function<int (std::string)> text_width +); + |
