/* ptrnt - print labels on linux Copyright (C) 2025 Moritz Martinius This program 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. This program 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 this program. If not, see . */ #pragma once #include #include #include "ILabel.hpp" namespace ptprnt::graphics { /** * @brief Builder interface for creating labels with text and formatting options * * The LabelBuilder provides a fluent API for constructing labels with various * text elements, fonts, sizes, and alignment options. It separates the construction * logic from the label rendering logic, making it easier to test and maintain. */ class ILabelBuilder { public: virtual ~ILabelBuilder() = default; /** * @brief Add text to the label with current formatting settings * @param text The text to add * @return Reference to this builder for method chaining */ virtual ILabelBuilder& addText(const std::string& text) = 0; /** * @brief Set the font family for subsequent text additions * @param fontFamily Font family name (e.g., "sans", "serif", "monospace") * @return Reference to this builder for method chaining */ virtual ILabelBuilder& setFontFamily(const std::string& fontFamily) = 0; /** * @brief Set the font size for subsequent text additions * @param fontSize Font size in points * @return Reference to this builder for method chaining */ virtual ILabelBuilder& setFontSize(double fontSize) = 0; /** * @brief Set horizontal alignment for subsequent text additions * @param hAlign Horizontal alignment position * @return Reference to this builder for method chaining */ virtual ILabelBuilder& setHAlign(HAlignPosition hAlign) = 0; /** * @brief Set vertical alignment for subsequent text additions * @param vAlign Vertical alignment position * @return Reference to this builder for method chaining */ virtual ILabelBuilder& setVAlign(VAlignPosition vAlign) = 0; /** * @brief Build and return the label with all added content * @return Unique pointer to the constructed label */ virtual std::unique_ptr build() = 0; /** * @brief Reset the builder to initial state * @return Reference to this builder for method chaining */ virtual ILabelBuilder& reset() = 0; }; } // namespace ptprnt::graphics