]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/graphical-element.hh
release: 1.1.18
[lilypond.git] / lily / include / graphical-element.hh
1 /*
2   graphical-element.hh -- declare Graphical_element
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9
10 #ifndef GRAPHICAL_ELEMENT_HH
11 #define GRAPHICAL_ELEMENT_HH
12
13 #include "offset.hh"
14 #include "lily-proto.hh"
15 #include "interval.hh"
16 #include "virtual-methods.hh"
17 #include "dimension-cache.hh"
18
19
20
21 /** The 2d geometric aspects of a score-element.  It was put in a
22   separate class, because Score_element got quite big.
23   */
24 class Graphical_element 
25 {
26   void init ();
27 public:
28   Dimension_cache dim_cache_[NO_AXES];
29
30   char const * name () const;
31   void set_empty (bool);
32   bool empty_b () const;
33   
34   Graphical_element ();
35   Graphical_element (Graphical_element const&);
36   virtual ~Graphical_element ();
37   
38   void invalidate_cache (Axis);
39   Interval extent (Axis) const;
40  
41   /**
42     translate the symbol. The symbol does not have to be created yet. 
43     */
44   void translate (Offset);
45   /**
46     translate in one direction
47     */
48     
49   void translate_axis (Real, Axis);
50
51   Real relative_coordinate (Dimension_cache*group, Axis) const;
52   Offset absolute_offset() const;
53   Real absolute_coordinate (Axis) const;
54   /**
55     Find the group-element which has both #this# and #s#
56    */
57   Dimension_cache*common_group (Graphical_element const* s, Axis a) const;
58   Dimension_cache*common_group (Link_array<Graphical_element> elems, Axis a) const;
59   
60   Graphical_element *parent_l (Axis a) const;
61   
62   void unlink ();
63   void junk_links ();
64   virtual void do_print () const;
65 protected:
66   virtual Interval do_height () const=0;
67   virtual Interval do_width () const=0;
68 };
69
70 #endif // GRAPHICAL_ELEMENT_HH
71