wxTimelineCtrlWidget
Loading...
Searching...
No Matches
FloatingItemPopupWindow.h
Go to the documentation of this file.
1#ifndef FLOATINGITEMPOPUPWINDOW_H
2#define FLOATINGITEMPOPUPWINDOW_H
3
4#include <wx/wx.h>
5#include <wx/popupwin.h>
6#include <wx/dcbuffer.h>
7#include <wx/dcgraph.h>
8
9#include "TimelineItem.h"
10#include "TimelineArtProvider.h"
11
12template<typename T>
13class FloatingItemPopupWindow : public wxPopupWindow
14{
15public:
16 FloatingItemPopupWindow(wxWindow* parent,
17 const TimelineItem<T>& itemToDraw,
18 const wxSize& size,
19 TimelineArtProvider* artProvider)
20 : wxPopupWindow(),
21 m_itemVisual(itemToDraw),
22 m_itemDrawSize(size),
23 m_artProviderRef(artProvider)
24 {
25 SetBackgroundStyle(wxBG_STYLE_TRANSPARENT);
26
27 if (!wxPopupWindow::Create(parent, wxBORDER_NONE))
28 {
29 wxLogError("FloatingItemPopupWindow: Failed to create the window.");
30 return;
31 }
32
33 wxSize finalSize = size;
34 if (!finalSize.IsFullySpecified() || finalSize.x <= 0 || finalSize.y <= 0) {
35 finalSize.Set(50, 20);
36 }
37
38 m_itemDrawSize = finalSize;
39 SetSize(m_itemDrawSize);
40
41 if (m_itemDrawSize.x > 0 && m_itemDrawSize.y > 0) {
42 if (!m_buffer.Create(m_itemDrawSize, 32)) {
43 wxLogError("FloatingItemPopupWindow Ctor: Failed to create m_buffer with size %d x %d", m_itemDrawSize.x, m_itemDrawSize.y);
44 }
45 }
46 else {
47 wxSize emergencySize(30, 15);
48 if (!m_buffer.Create(emergencySize, 32)) {
49 wxLogError("FloatingItemPopupWindow Ctor: Failed to create emergency m_buffer.");
50 }
51 }
52 Bind(wxEVT_PAINT, &FloatingItemPopupWindow<T>::OnPaint, this);
53 }
54
58
59 void OnPaint(wxPaintEvent& )
60 {
61 if (!m_itemVisual.Data || !m_artProviderRef || !m_buffer.IsOk()) {
62 wxPaintDC dc(this);
63 dc.SetBackground(*wxTRANSPARENT_BRUSH);
64 dc.Clear();
65 return;
66 }
67
68 wxBufferedPaintDC dc(this, m_buffer);
69 wxGCDC gdc(dc);
70
71 wxGraphicsContext* gc = gdc.GetGraphicsContext();
72 if (gc)
73 {
74 gc->SetBrush(*wxTRANSPARENT_BRUSH);
75 wxSize clientSize = GetClientSize();
76 gc->DrawRectangle(0, 0, clientSize.GetWidth(), clientSize.GetHeight());
77 }
78
79 TimelineItem<T> itemToRender = m_itemVisual;
80 itemToRender.Colour = itemToRender.Colour.ChangeLightness(110);
81 wxColour c = itemToRender.Colour;
82 itemToRender.Colour.Set(c.Red(), c.Green(), c.Blue(), 220);
84
85 wxRect drawRect(0, 0, m_itemDrawSize.GetWidth(), m_itemDrawSize.GetHeight());
86
87 gdc.SetPen(wxPen(itemToRender.Colour, 0, wxPENSTYLE_TRANSPARENT));
88 gdc.SetBrush(wxBrush(itemToRender.Colour));
89
90 gdc.DrawRectangle(drawRect);
91
92 m_artProviderRef->DrawItem(gdc, drawRect,
93 drawRect,
94 itemToRender,
95 false,
96 false);
97 }
98
99private:
103 wxBitmap m_buffer;
104};
105
106#endif // FLOATINGITEMPOPUPWINDOW_H
107
108
Definition FloatingItemPopupWindow.h:14
void OnPaint(wxPaintEvent &)
Definition FloatingItemPopupWindow.h:59
wxBitmap m_buffer
Definition FloatingItemPopupWindow.h:103
TimelineItem< T > m_itemVisual
Definition FloatingItemPopupWindow.h:100
~FloatingItemPopupWindow()
Definition FloatingItemPopupWindow.h:55
wxSize m_itemDrawSize
Definition FloatingItemPopupWindow.h:101
TimelineArtProvider * m_artProviderRef
Definition FloatingItemPopupWindow.h:102
FloatingItemPopupWindow(wxWindow *parent, const TimelineItem< T > &itemToDraw, const wxSize &size, TimelineArtProvider *artProvider)
Definition FloatingItemPopupWindow.h:16
Definition TimelineArtProvider.h:15
void DrawItem(wxDC &dc, const wxRect &rect, const wxRect &parentRect, const TimelineItem< T > &item, bool isScrollerContext=false, bool makeTransparentDueToOverlap=false)
Definition TimelineArtProvider.h:424
Definition TimelineItem.h:22
wxColour Colour
Definition TimelineItem.h:57
TimelineElementState State
Definition TimelineItem.h:56