From: Carl Hetherington Date: Sat, 10 Dec 2022 00:39:38 +0000 (+0100) Subject: Extract crop.h X-Git-Tag: v2.16.36~21 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=9063624bd62c8fb513b51077300a74c7e46a56d9 Extract crop.h --- diff --git a/src/lib/crop.cc b/src/lib/crop.cc new file mode 100644 index 000000000..105baaaf5 --- /dev/null +++ b/src/lib/crop.cc @@ -0,0 +1,61 @@ +/* + Copyright (C) 2013-2019 Carl Hetherington + + 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 . + +*/ + + +#include "crop.h" +#include +#include + + +using std::shared_ptr; +using std::string; +using dcp::raw_convert; + + +Crop::Crop(shared_ptr node) +{ + left = node->number_child("LeftCrop"); + right = node->number_child("RightCrop"); + top = node->number_child("TopCrop"); + bottom = node->number_child("BottomCrop"); +} + + +void +Crop::as_xml(xmlpp::Node* node) const +{ + node->add_child("LeftCrop")->add_child_text(raw_convert(left)); + node->add_child("RightCrop")->add_child_text(raw_convert(right)); + node->add_child("TopCrop")->add_child_text(raw_convert(top)); + node->add_child("BottomCrop")->add_child_text(raw_convert(bottom)); +} + + +bool operator==(Crop const & a, Crop const & b) +{ + return (a.left == b.left && a.right == b.right && a.top == b.top && a.bottom == b.bottom); +} + + +bool operator!=(Crop const & a, Crop const & b) +{ + return !(a == b); +} + diff --git a/src/lib/crop.h b/src/lib/crop.h new file mode 100644 index 000000000..00734d5e9 --- /dev/null +++ b/src/lib/crop.h @@ -0,0 +1,76 @@ +/* + Copyright (C) 2013-2021 Carl Hetherington + + 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 . + +*/ + + +#ifndef DCPOMATIC_CROP_H +#define DCPOMATIC_CROP_H + + +#include +#include + + +namespace cxml { + class Node; +} + + +/** @struct Crop + * @brief A description of the crop of an image or video. + */ +struct Crop +{ + Crop() {} + Crop(int l, int r, int t, int b) : left (l), right (r), top (t), bottom (b) {} + explicit Crop(std::shared_ptr); + + /** Number of pixels to remove from the left-hand side */ + int left = 0; + /** Number of pixels to remove from the right-hand side */ + int right = 0; + /** Number of pixels to remove from the top */ + int top = 0; + /** Number of pixels to remove from the bottom */ + int bottom = 0; + + dcp::Size apply(dcp::Size s, int minimum = 4) const { + s.width -= left + right; + s.height -= top + bottom; + + if (s.width < minimum) { + s.width = minimum; + } + + if (s.height < minimum) { + s.height = minimum; + } + + return s; + } + + void as_xml (xmlpp::Node *) const; +}; + + +extern bool operator==(Crop const & a, Crop const & b); +extern bool operator!=(Crop const & a, Crop const & b); + + +#endif diff --git a/src/lib/guess_crop.h b/src/lib/guess_crop.h index d74912042..f18c2db5e 100644 --- a/src/lib/guess_crop.h +++ b/src/lib/guess_crop.h @@ -19,8 +19,8 @@ */ +#include "crop.h" #include "dcpomatic_time.h" -#include "types.h" #include diff --git a/src/lib/image.h b/src/lib/image.h index 73d08b902..60e65c20a 100644 --- a/src/lib/image.h +++ b/src/lib/image.h @@ -25,6 +25,8 @@ #ifndef DCPOMATIC_IMAGE_H #define DCPOMATIC_IMAGE_H + +#include "crop.h" #include "position.h" #include "position_image.h" #include "types.h" @@ -34,9 +36,11 @@ extern "C" { #include #include + struct AVFrame; class Socket; + class Image : public std::enable_shared_from_this { public: diff --git a/src/lib/types.cc b/src/lib/types.cc index e9b412ded..6bac0cf3e 100644 --- a/src/lib/types.cc +++ b/src/lib/types.cc @@ -42,15 +42,6 @@ using std::shared_ptr; using std::vector; using dcp::raw_convert; -bool operator== (Crop const & a, Crop const & b) -{ - return (a.left == b.left && a.right == b.right && a.top == b.top && a.bottom == b.bottom); -} - -bool operator!= (Crop const & a, Crop const & b) -{ - return !(a == b); -} /** @param r Resolution. * @return Untranslated string representation. @@ -85,22 +76,6 @@ string_to_resolution (string s) return Resolution::TWO_K; } -Crop::Crop (shared_ptr node) -{ - left = node->number_child ("LeftCrop"); - right = node->number_child ("RightCrop"); - top = node->number_child ("TopCrop"); - bottom = node->number_child ("BottomCrop"); -} - -void -Crop::as_xml (xmlpp::Node* node) const -{ - node->add_child("LeftCrop")->add_child_text (raw_convert (left)); - node->add_child("RightCrop")->add_child_text (raw_convert (right)); - node->add_child("TopCrop")->add_child_text (raw_convert (top)); - node->add_child("BottomCrop")->add_child_text (raw_convert (bottom)); -} TextType string_to_text_type (string s) diff --git a/src/lib/types.h b/src/lib/types.h index f2a79b2fd..ab3f15841 100644 --- a/src/lib/types.h +++ b/src/lib/types.h @@ -167,44 +167,6 @@ extern std::string text_type_to_string (TextType t); extern std::string text_type_to_name (TextType t); extern TextType string_to_text_type (std::string s); -/** @struct Crop - * @brief A description of the crop of an image or video. - */ -struct Crop -{ - Crop () : left (0), right (0), top (0), bottom (0) {} - Crop (int l, int r, int t, int b) : left (l), right (r), top (t), bottom (b) {} - explicit Crop (std::shared_ptr); - - /** Number of pixels to remove from the left-hand side */ - int left; - /** Number of pixels to remove from the right-hand side */ - int right; - /** Number of pixels to remove from the top */ - int top; - /** Number of pixels to remove from the bottom */ - int bottom; - - dcp::Size apply (dcp::Size s, int minimum = 4) const { - s.width -= left + right; - s.height -= top + bottom; - - if (s.width < minimum) { - s.width = minimum; - } - - if (s.height < minimum) { - s.height = minimum; - } - - return s; - } - - void as_xml (xmlpp::Node *) const; -}; - -extern bool operator== (Crop const & a, Crop const & b); -extern bool operator!= (Crop const & a, Crop const & b); struct CPLSummary { diff --git a/src/lib/video_content.h b/src/lib/video_content.h index cff141e4e..087a92245 100644 --- a/src/lib/video_content.h +++ b/src/lib/video_content.h @@ -25,9 +25,9 @@ #include "colour_conversion.h" #include "content_part.h" +#include "crop.h" #include "dcpomatic_time.h" #include "pixel_quanta.h" -#include "types.h" #include "user_property.h" #include #include diff --git a/src/lib/wscript b/src/lib/wscript index cf97623f9..3a3c8fd51 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -59,6 +59,7 @@ sources = """ combine_dcp_job.cc copy_dcp_details_to_film.cc create_cli.cc + crop.cc cross_common.cc crypto.cc curl_uploader.cc diff --git a/src/wx/auto_crop_dialog.h b/src/wx/auto_crop_dialog.h index 0615c14bb..6c02acbdd 100644 --- a/src/wx/auto_crop_dialog.h +++ b/src/wx/auto_crop_dialog.h @@ -20,7 +20,7 @@ #include "table_dialog.h" -#include "lib/types.h" +#include "lib/crop.h" #include