Perception Tool Kit (PTK) API Guide
Label.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2018 Texas Instruments Incorporated
4  *
5  * All rights reserved not granted herein.
6  *
7  * Limited License.
8  *
9  * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10  * license under copyrights and patents it now or hereafter owns or controls to make,
11  * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12  * terms herein. With respect to the foregoing patent license, such license is granted
13  * solely to the extent that any such patent is necessary to Utilize the software alone.
14  * The patent license shall not apply to any combinations which include this software,
15  * other than combinations with devices manufactured by or for TI ("TI Devices").
16  * No hardware patent is licensed hereunder.
17  *
18  * Redistributions must preserve existing copyright notices and reproduce this license
19  * (including the above copyright notice and the disclaimer and (if applicable) source
20  * code license limitations below) in the documentation and/or other materials provided
21  * with the distribution
22  *
23  * Redistribution and use in binary form, without modification, are permitted provided
24  * that the following conditions are met:
25  *
26  * * No reverse engineering, decompilation, or disassembly of this software is
27  * permitted with respect to any software provided in binary form.
28  *
29  * * any redistribution and use are licensed by TI for use only with TI Devices.
30  *
31  * * Nothing shall obligate TI to provide you with source code for the software
32  * licensed and provided to you in object code.
33  *
34  * If software source code is provided to you, modification and redistribution of the
35  * source code are permitted provided that the following conditions are met:
36  *
37  * * any redistribution and use of the source code, including any resulting derivative
38  * works, are licensed by TI for use only with TI Devices.
39  *
40  * * any redistribution and use of any object code compiled from the source code
41  * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42  *
43  * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44  *
45  * may be used to endorse or promote products derived from this software without
46  * specific prior written permission.
47  *
48  * DISCLAIMER.
49  *
50  * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53  * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59  * OF THE POSSIBILITY OF SUCH DAMAGE.
60  *
61  */
62 #pragma once
63 #ifndef PTK_GUI_LABEL_H
64 #define PTK_GUI_LABEL_H
65 
66 #include <vector>
67 
68 #include <perception/gui/GLlibs.h>
69 
70 #include <glm/glm.hpp>
71 #include <glm/gtc/type_precision.hpp>
72 
73 #include <perception/gui/Visible.h>
76 #include <perception/gui/Padded.h>
79 
80 namespace ptk
81 {
82 
83 class Renderer;
84 class String;
85 
86 class Label :
88  public Visible<Label>,
89  public ZOrderable<Label>,
90  public Padded<Label>,
91  public Renderable
92 {
93 public:
94  enum Alignment
95  {
99  };
100 
101 public:
102  Label(Renderer *r);
103  virtual ~Label();
104 
105  virtual Label *show();
106  virtual Label *hide();
107 
108  virtual Label *setZ(float z);
109  virtual Label *setZ(GLushort z);
110 
111  float getRequiredHeight() const;
112  float getTextWidth() const;
113 
114  Label *addString(String *str);
115  Label *setBackgroundColor(const glm::vec4& color);
116  Label *setBorderColor(const glm::vec4& color);
117  Label *setAlignment(Alignment align) { _align = align; return this; }
118 
119  virtual void render(uint64_t delta, Dimensions d);
120  virtual void windowResize() { _modified = true; }
121  void update();
122 
123 private:
124  static const int QUAD_BG = 0;
125  static const int QUAD_BORDER_LEFT = 1;
126  static const int QUAD_BORDER_RIGHT = 2;
127  static const int QUAD_BORDER_TOP = 3;
128  static const int QUAD_BORDER_BOTTOM = 4;
129 
130 private:
133 
134  glm::vec4 _backgroundColor;
135  glm::vec4 _borderColor;
136 
137  std::vector<String *> _strings;
138  bool _modified;
139 };
140 
141 };
142 
143 #endif
Definition: Label.h:96
Label * setBackgroundColor(const glm::vec4 &color)
Alignment _align
Definition: Label.h:131
Definition: Label.h:98
Definition: ZOrderable.h:75
Label(Renderer *r)
static const int QUAD_BORDER_TOP
Definition: Label.h:127
Definition: Visible.h:73
Definition: Dimensions.h:92
bool _modified
Definition: Label.h:138
std::vector< String * > _strings
Definition: Label.h:137
Definition: Label.h:97
Definition: Renderer.h:169
struct String String
Definition: c/Renderer.h:77
Definition: Renderable.h:76
virtual void render(uint64_t delta, Dimensions d)
The Padded class is an interface which specifies that a GUI element implementing it supports internal...
Definition: Padded.h:84
Definition: sensor.h:74
Label * addString(String *str)
static const int QUAD_BORDER_BOTTOM
Definition: Label.h:128
virtual Label * hide()
struct Renderer Renderer
Definition: c/Renderer.h:81
glm::vec4 _backgroundColor
Definition: Label.h:134
virtual ~Label()
Definition: UntexturedQuadRenderable.h:82
virtual Label * setZ(float z)
float getTextWidth() const
Alignment
Definition: Label.h:94
static const int QUAD_BORDER_LEFT
Definition: Label.h:125
Dimensions _lastDimensions
Definition: Label.h:132
static const int QUAD_BORDER_RIGHT
Definition: Label.h:126
Definition: String.h:100
Label * setBorderColor(const glm::vec4 &color)
virtual Label * show()
void update()
Label * setAlignment(Alignment align)
Definition: Label.h:117
virtual void windowResize()
Definition: Label.h:120
glm::vec4 _borderColor
Definition: Label.h:135
static const int QUAD_BG
Definition: Label.h:124
Definition: Label.h:86
float getRequiredHeight() const