LCOV - code coverage report
Current view: top level - src/engraving/dom - bracket.h Coverage Total Hit
Test: filtered_coverage.info Lines: 63.0 % 27 17
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-Studio-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #pragma once
      24              : 
      25              : #include "engravingitem.h"
      26              : #include "bracketitem.h"
      27              : 
      28              : namespace mu::engraving {
      29              : class Factory;
      30              : class System;
      31              : class Transaction;
      32              : enum class BracketType : signed char;
      33              : enum class InstrumentNameType : char;
      34              : 
      35              : //---------------------------------------------------------
      36              : //   @@ Bracket
      37              : //---------------------------------------------------------
      38              : 
      39              : class Bracket final : public EngravingItem
      40              : {
      41         4055 :     OBJECT_ALLOCATOR(engraving, Bracket)
      42         1866 :     DECLARE_CLASSOF(ElementType::BRACKET)
      43              : 
      44              : public:
      45              : 
      46              :     ~Bracket();
      47              : 
      48            0 :     Bracket* clone() const override { return new Bracket(*this); }
      49              : 
      50              :     void scanElements(std::function<void(EngravingItem*)> func) override;
      51              : 
      52         2069 :     void setBracketItem(BracketItem* i) { m_bi = i; }
      53         5298 :     BracketItem* bracketItem() const { return m_bi; }
      54              : 
      55        25903 :     BracketType bracketType() const { return m_bi->bracketType(); }
      56              : 
      57            0 :     int subtype() const override { return int(bracketType()); }
      58              :     TranslatableString subtypeUserName() const override;
      59              : 
      60         3921 :     size_t firstStaff() const { return m_firstStaff; }
      61         3921 :     size_t lastStaff() const { return m_lastStaff; }
      62              :     void setStaffSpan(size_t a, size_t b);
      63              : 
      64            0 :     InstrumentNameType labelType() const { return m_labelType; }
      65         2816 :     void setLabelType(InstrumentNameType t) { m_labelType = t; }
      66              : 
      67        11209 :     SymId braceSymbol() const { return m_braceSymbol; }
      68              :     void setBraceSymbol(const SymId& sym) { m_braceSymbol = sym; }
      69        11672 :     size_t column() const { return m_bi->column(); }
      70           35 :     size_t span() const { return m_bi->bracketSpan(); }
      71         3773 :     double magx() const { return m_magx; }
      72              : 
      73         6140 :     System* system() const { return (System*)ownershipParent(); }
      74              : 
      75         1666 :     Measure* measure() const { return m_measure; }
      76         1335 :     void setMeasure(Measure* measure) { m_measure = measure; }
      77              : 
      78         7436 :     const BracketItem* bi() const { return m_bi; }
      79              : 
      80              :     bool isEditable() const override;
      81              :     bool needStartEditingAfterSelecting() const override;
      82              :     void startEdit(EditData&) override;
      83              :     bool isEditAllowed(EditData&) const override;
      84              :     bool edit(EditData&) override;
      85              :     void endEdit(EditData&) override;
      86              :     void dragGrip(EditData&) override;
      87              :     void endDragGrip(EditData&) override;
      88              : 
      89            0 :     Color color() const override { return m_bi->color(); }
      90              : 
      91              :     bool acceptDrop(EditData&) const override;
      92              :     EngravingItem* drop(Transaction& tx, EditData&) override;
      93              : 
      94              :     PropertyValue getProperty(Pid propertyId) const override;
      95              :     bool setProperty(Pid propertyId, const PropertyValue&) override;
      96              :     PropertyValue propertyDefault(Pid) const override;
      97              : 
      98              :     void undoChangeProperty(Pid id, const PropertyValue& v, PropertyFlags ps) override;
      99              :     using EngravingObject::undoChangeProperty;
     100              : 
     101              :     Fraction tick() const override;
     102              : 
     103            0 :     int gripsCount() const override { return 1; }
     104            0 :     Grip initialEditModeGrip() const override { return Grip::START; }
     105            0 :     Grip defaultGrip() const override { return Grip::START; }
     106              :     std::vector<PointF> gripsPositions(const EditData&) const override;
     107              : 
     108              :     void setSelected(bool f) override;
     109              : 
     110            0 :     Text* text() const { return m_text; }
     111            0 :     void setText(Text* t) { m_text = t; }
     112              : 
     113              :     bool intersects(const Bracket* other) const;
     114              :     bool contains(staff_idx_t staffIdx) const;
     115              : 
     116              :     struct LayoutData : public EngravingItem::LayoutData {
     117              :         SymId braceSymbol = SymId::noSym;
     118              :         PainterPath path;
     119              :         Shape shape;
     120              :         ld_field<double> bracketHeight = { "[Bracket] bracketHeight", 0.0 };
     121              :         ld_field<double> bracketWidth = { "[Bracket] bracketWidth", 0.0 };
     122              : 
     123            0 :         double h2(LD_ACCESS mode = LD_ACCESS::CHECK) const { return bracketHeight.value(mode) * 0.5; }
     124              :     };
     125        23301 :     DECLARE_LAYOUTDATA_METHODS(Bracket)
     126              : 
     127              : private:
     128              :     friend class Factory;
     129              : 
     130              :     Bracket(DummyParentOr<EngravingItem> parent);
     131              : 
     132              :     BracketItem* m_bi = nullptr;
     133              :     double m_ay1 = 0.0;
     134              : 
     135              :     size_t m_firstStaff = 0;
     136              :     size_t m_lastStaff = 0;
     137              : 
     138              :     InstrumentNameType m_labelType;
     139              : 
     140              :     SymId m_braceSymbol = SymId::noSym;
     141              : 
     142              :     // horizontal scaling factor for brace symbol. Cannot be equal to magY or depend on h
     143              :     // because layout needs width of brace before knowing height of system...
     144              :     double m_magx = 0.0;
     145              :     Measure* m_measure = nullptr;
     146              : 
     147              :     Text* m_text = nullptr;
     148              : };
     149              : }
        

Generated by: LCOV version 2.0-1