diff options
Diffstat (limited to 'messagebox.c')
-rw-r--r-- | messagebox.c | 154 |
1 files changed, 77 insertions, 77 deletions
diff --git a/messagebox.c b/messagebox.c index b399924..fd7acb9 100644 --- a/messagebox.c +++ b/messagebox.c @@ -1,55 +1,55 @@ #include "messagebox.h"
cMessageBoxThread::cMessageBoxThread(cPixmap *content, int displayTime) {
- this->content = content;
- FrameTime = 30; // ms
- FadeTime = 200; // ms
- this->displayTime = displayTime;
+ this->content = content;
+ FrameTime = 30; // ms
+ FadeTime = 200; // ms
+ this->displayTime = displayTime;
}
cMessageBoxThread::~cMessageBoxThread(void) {
Cancel(-1);
- while (Active())
+ while (Active())
cCondWait::SleepMs(10);
}
void cMessageBoxThread::Action(void) {
- uint64_t Start = cTimeMs::Now();
- while (Running()) {
- uint64_t Now = cTimeMs::Now();
- cPixmap::Lock();
- double t = min(double(Now - Start) / FadeTime, 1.0);
- int Alpha = t * ALPHA_OPAQUE;
- if (Running() && content) {
- content->SetAlpha(Alpha);
- osdManager.flush();
- }
- cPixmap::Unlock();
+ uint64_t Start = cTimeMs::Now();
+ while (Running()) {
+ uint64_t Now = cTimeMs::Now();
+ cPixmap::Lock();
+ double t = min(double(Now - Start) / FadeTime, 1.0);
+ int Alpha = t * ALPHA_OPAQUE;
+ if (Running() && content) {
+ content->SetAlpha(Alpha);
+ osdManager.flush();
+ }
+ cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Delta < FrameTime)
cCondWait::SleepMs(FrameTime - Delta);
- if ((Now - Start) > FadeTime)
- break;
+ if ((Now - Start) > FadeTime)
+ break;
}
- cCondWait::SleepMs(displayTime - 2*FadeTime);
- Start = cTimeMs::Now();
- while (Running()) {
- uint64_t Now = cTimeMs::Now();
- cPixmap::Lock();
- double t = min(double(Now - Start) / FadeTime, 1.0);
- int Alpha = (1-t) * ALPHA_OPAQUE;
- if (Running() && content) {
- content->SetAlpha(Alpha);
- osdManager.flush();
- }
- cPixmap::Unlock();
+ cCondWait::SleepMs(displayTime - 2*FadeTime);
+ Start = cTimeMs::Now();
+ while (Running()) {
+ uint64_t Now = cTimeMs::Now();
+ cPixmap::Lock();
+ double t = min(double(Now - Start) / FadeTime, 1.0);
+ int Alpha = (1-t) * ALPHA_OPAQUE;
+ if (Running() && content) {
+ content->SetAlpha(Alpha);
+ osdManager.flush();
+ }
+ cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Delta < FrameTime)
cCondWait::SleepMs(FrameTime - Delta);
- if ((Now - Start) > FadeTime)
- break;
+ if ((Now - Start) > FadeTime)
+ break;
}
- osdManager.flush();
+ osdManager.flush();
}
//--cMessageBox-------------------------------------------------------------
@@ -57,55 +57,55 @@ cMessageBoxThread *cMessageBox::msgboxThread = NULL; cPixmap *cMessageBox::content = NULL;
bool cMessageBox::Start(int displayTime, cString msg) {
- int width = (tvguideConfig.osdWidth - 600)/2;
- if (!content) {
- int height = 400;
- content = osdManager.requestPixmap(5, cRect((tvguideConfig.osdWidth - width)/2,
- (tvguideConfig.osdHeight- height)/2,
- width, height));
- }
- if (msgboxThread) {
- delete msgboxThread;
- msgboxThread = NULL;
- }
- if (!msgboxThread) {
- msgboxThread = new cMessageBoxThread(content, displayTime);
- cTextWrapper message;
- message.Set(msg, tvguideConfig.FontMessageBox, width - 40);
- int textHeight = tvguideConfig.FontMessageBox->Height();
- int textLines = message.Lines();
- int height = textLines * (textHeight+20);
- cPixmap::Lock();
- content->SetViewPort(cRect((tvguideConfig.osdWidth - width)/2,(tvguideConfig.osdHeight- height)/2, width, height));
- content->SetAlpha(0);
- content->Fill(theme.Color(clrBorder));
- content->DrawRectangle(cRect(2,2,width-4, height-4), theme.Color(clrBackground));
- int textWidth = 0;
- for (int i=0; i<textLines; i++) {
- textWidth = tvguideConfig.FontMessageBox->Width(message.GetLine(i));
- content->DrawText(cPoint((width - textWidth)/2, 20 + i*textHeight), message.GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontMessageBox);
- }
- cPixmap::Unlock();
- msgboxThread->Start();
+ int width = (tvguideConfig.osdWidth - 600)/2;
+ if (!content) {
+ int height = 400;
+ content = osdManager.requestPixmap(5, cRect((tvguideConfig.osdWidth - width)/2,
+ (tvguideConfig.osdHeight- height)/2,
+ width, height));
+ }
+ if (msgboxThread) {
+ delete msgboxThread;
+ msgboxThread = NULL;
+ }
+ if (!msgboxThread) {
+ msgboxThread = new cMessageBoxThread(content, displayTime);
+ cTextWrapper message;
+ message.Set(msg, tvguideConfig.FontMessageBox, width - 40);
+ int textHeight = tvguideConfig.FontMessageBox->Height();
+ int textLines = message.Lines();
+ int height = textLines * (textHeight+20);
+ cPixmap::Lock();
+ content->SetViewPort(cRect((tvguideConfig.osdWidth - width)/2,(tvguideConfig.osdHeight- height)/2, width, height));
+ content->SetAlpha(0);
+ content->Fill(theme.Color(clrBorder));
+ content->DrawRectangle(cRect(2,2,width-4, height-4), theme.Color(clrBackground));
+ int textWidth = 0;
+ for (int i=0; i<textLines; i++) {
+ textWidth = tvguideConfig.FontMessageBox->Width(message.GetLine(i));
+ content->DrawText(cPoint((width - textWidth)/2, 20 + i*textHeight), message.GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontMessageBox);
+ }
+ cPixmap::Unlock();
+ msgboxThread->Start();
return true;
- }
- return false;
+ }
+ return false;
}
void cMessageBox::Stop(void) {
- if (msgboxThread) {
- delete msgboxThread;
- msgboxThread = NULL;
- }
+ if (msgboxThread) {
+ delete msgboxThread;
+ msgboxThread = NULL;
+ }
}
void cMessageBox::Destroy(void) {
- if (msgboxThread) {
- delete msgboxThread;
- msgboxThread = NULL;
- }
- if (content) {
- osdManager.releasePixmap(content);
- content = NULL;
- }
+ if (msgboxThread) {
+ delete msgboxThread;
+ msgboxThread = NULL;
+ }
+ if (content) {
+ osdManager.releasePixmap(content);
+ content = NULL;
+ }
}
|