git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
install SubtitleDisplay.py
[enigma2.git]
/
lib
/
gdi
/
grc.cpp
diff --git
a/lib/gdi/grc.cpp
b/lib/gdi/grc.cpp
index de6761e810d4f0f335a4f338c95489c6e9339e53..a9bac4af0907a587a0c0922127424e75536b6c98 100644
(file)
--- a/
lib/gdi/grc.cpp
+++ b/
lib/gdi/grc.cpp
@@
-1,10
+1,4
@@
-// for debugging use:
-// #define SYNC_PAINT
#include <unistd.h>
#include <unistd.h>
-#ifndef SYNC_PAINT
-#include <pthread.h>
-#endif
-
#include <lib/gdi/grc.h>
#include <lib/gdi/font.h>
#include <lib/base/init.h>
#include <lib/gdi/grc.h>
#include <lib/gdi/font.h>
#include <lib/base/init.h>
@@
-84,10
+78,10
@@
void gRC::submit(const gOpcode &o)
queue[wp++]=o;
if ( wp == MAXSIZE )
wp = 0;
queue[wp++]=o;
if ( wp == MAXSIZE )
wp = 0;
- pthread_mutex_unlock(&mutex);
if (o.opcode==gOpcode::flush||o.opcode==gOpcode::shutdown||o.opcode==gOpcode::notify)
#ifndef SYNC_PAINT
pthread_cond_signal(&cond); // wakeup gdi thread
if (o.opcode==gOpcode::flush||o.opcode==gOpcode::shutdown||o.opcode==gOpcode::notify)
#ifndef SYNC_PAINT
pthread_cond_signal(&cond); // wakeup gdi thread
+ pthread_mutex_unlock(&mutex);
#else
thread(); // paint
#endif
#else
thread(); // paint
#endif
@@
-105,13
+99,17
@@
void *gRC::thread()
while (rp != wp)
{
#endif
while (rp != wp)
{
#endif
+#ifndef SYNC_PAINT
pthread_mutex_lock(&mutex);
pthread_mutex_lock(&mutex);
+#endif
if ( rp != wp )
{
gOpcode o(queue[rp++]);
if ( rp == MAXSIZE )
rp=0;
if ( rp != wp )
{
gOpcode o(queue[rp++]);
if ( rp == MAXSIZE )
rp=0;
+#ifndef SYNC_PAINT
pthread_mutex_unlock(&mutex);
pthread_mutex_unlock(&mutex);
+#endif
if (o.opcode==gOpcode::shutdown)
break;
else if (o.opcode==gOpcode::notify)
if (o.opcode==gOpcode::shutdown)
break;
else if (o.opcode==gOpcode::notify)
@@
-128,6
+126,7
@@
void *gRC::thread()
}
#ifndef SYNC_PAINT
pthread_cond_wait(&cond, &mutex);
}
#ifndef SYNC_PAINT
pthread_cond_wait(&cond, &mutex);
+ pthread_mutex_unlock(&mutex);
#endif
}
}
#endif
}
}
@@
-507,18
+506,24
@@
void gDC::exec(gOpcode *o)
{
case gOpcode::setBackgroundColor:
m_background_color = o->parm.setColor->color;
{
case gOpcode::setBackgroundColor:
m_background_color = o->parm.setColor->color;
+ m_background_color_rgb = getRGB(m_background_color);
delete o->parm.setColor;
break;
case gOpcode::setForegroundColor:
m_foreground_color = o->parm.setColor->color;
delete o->parm.setColor;
break;
case gOpcode::setForegroundColor:
m_foreground_color = o->parm.setColor->color;
+ m_background_color_rgb = getRGB(m_foreground_color);
delete o->parm.setColor;
break;
case gOpcode::setBackgroundColorRGB:
delete o->parm.setColor;
break;
case gOpcode::setBackgroundColorRGB:
- m_background_color = m_pixmap->surface->clut.findColor(o->parm.setColorRGB->color);
+ if (m_pixmap->needClut())
+ m_background_color = m_pixmap->surface->clut.findColor(o->parm.setColorRGB->color);
+ m_background_color_rgb = o->parm.setColorRGB->color;
delete o->parm.setColorRGB;
break;
case gOpcode::setForegroundColorRGB:
delete o->parm.setColorRGB;
break;
case gOpcode::setForegroundColorRGB:
- m_foreground_color = m_pixmap->surface->clut.findColor(o->parm.setColorRGB->color);
+ if (m_pixmap->needClut())
+ m_foreground_color = m_pixmap->surface->clut.findColor(o->parm.setColorRGB->color);
+ m_foreground_color_rgb = o->parm.setColorRGB->color;
delete o->parm.setColorRGB;
break;
case gOpcode::setFont:
delete o->parm.setColorRGB;
break;
case gOpcode::setFont:
@@
-550,13
+555,14
@@
void gDC::exec(gOpcode *o)
int correction = vcentered_top - bbox.top();
offset += ePoint(0, correction);
}
int correction = vcentered_top - bbox.top();
offset += ePoint(0, correction);
}
- para->blit(*this, offset, getRGB(m_background_color), getRGB(m_foreground_color));
+
+ para->blit(*this, offset, m_background_color_rgb, m_foreground_color_rgb);
delete o->parm.renderText;
break;
}
case gOpcode::renderPara:
{
delete o->parm.renderText;
break;
}
case gOpcode::renderPara:
{
- o->parm.renderPara->textpara->blit(*this, o->parm.renderPara->offset + m_current_offset,
getRGB(m_background_color), getRGB(m_foreground_color)
);
+ o->parm.renderPara->textpara->blit(*this, o->parm.renderPara->offset + m_current_offset,
m_background_color_rgb, m_foreground_color_rgb
);
o->parm.renderPara->textpara->Release();
delete o->parm.renderPara;
break;
o->parm.renderPara->textpara->Release();
delete o->parm.renderPara;
break;
@@
-566,7
+572,10
@@
void gDC::exec(gOpcode *o)
eRect area = o->parm.fill->area;
area.moveBy(m_current_offset);
gRegion clip = m_current_clip & area;
eRect area = o->parm.fill->area;
area.moveBy(m_current_offset);
gRegion clip = m_current_clip & area;
- m_pixmap->fill(clip, m_foreground_color);
+ if (m_pixmap->needClut())
+ m_pixmap->fill(clip, m_foreground_color);
+ else
+ m_pixmap->fill(clip, m_foreground_color_rgb);
delete o->parm.fill;
break;
}
delete o->parm.fill;
break;
}
@@
-574,12
+583,18
@@
void gDC::exec(gOpcode *o)
{
o->parm.fillRegion->region.moveBy(m_current_offset);
gRegion clip = m_current_clip & o->parm.fillRegion->region;
{
o->parm.fillRegion->region.moveBy(m_current_offset);
gRegion clip = m_current_clip & o->parm.fillRegion->region;
- m_pixmap->fill(clip, m_foreground_color);
+ if (m_pixmap->needClut())
+ m_pixmap->fill(clip, m_foreground_color);
+ else
+ m_pixmap->fill(clip, m_foreground_color_rgb);
delete o->parm.fillRegion;
break;
}
case gOpcode::clear:
delete o->parm.fillRegion;
break;
}
case gOpcode::clear:
- m_pixmap->fill(m_current_clip, m_background_color);
+ if (m_pixmap->needClut())
+ m_pixmap->fill(m_current_clip, m_background_color);
+ else
+ m_pixmap->fill(m_current_clip, m_background_color_rgb);
delete o->parm.fill;
break;
case gOpcode::blit:
delete o->parm.fill;
break;
case gOpcode::blit: