added missing string rendering functions, on Haiku, there should be support for drawing bitmaps in all colorspaces that BBitmap::ImportBits knows how to convert to B_RGB32

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@11965 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2005-03-23 22:34:45 +00:00
parent 8df0e71d06
commit 6fb68b835c
+80 -5
View File
@@ -243,6 +243,21 @@ Painter::SetFont(const BFont& font)
_UpdateFont();
}
// SetFont
void
Painter::SetFont(const ServerFont& font)
{
// NOTE: this is just a transitional function
// to help integrate Painter with app_server later
fFont.SetFamilyAndStyle(font.GetFamily(), font.GetStyle());
fFont.SetSpacing(font.Spacing());
fFont.SetShear(font.Shear());
fFont.SetRotation(font.Rotation());
fFont.SetSize(font.Size());
_UpdateFont();
}
// #pragma mark -
// StrokeLine
@@ -540,18 +555,38 @@ Painter::FillArc(BPoint center, float xRadius, float yRadius,
// #pragma mark -
// DrawString
// DrawChar
void
Painter::DrawString(const char* utf8String, const escapement_delta* delta)
Painter::DrawChar(char aChar)
{
// TODO: to be moved elsewhere
DrawString(utf8String, fPenLocation, delta);
DrawChar(aChar, fPenLocation);
}
// DrawChar
void
Painter::DrawChar(char aChar, BPoint baseLine)
{
// TODO: to be moved elsewhere
char wrapper[2];
wrapper[0] = aChar;
wrapper[1] = 0;
DrawString(wrapper, 1, baseLine);
}
// DrawString
void
Painter::DrawString(const char* utf8String, BPoint baseLine,
Painter::DrawString(const char* utf8String, uint32 length,
const escapement_delta* delta)
{
// TODO: to be moved elsewhere
DrawString(utf8String, length, fPenLocation, delta);
}
// DrawString
void
Painter::DrawString(const char* utf8String, uint32 length,
BPoint baseLine, const escapement_delta* delta)
{
fPatternHandler->SetPattern(B_SOLID_HIGH);
@@ -564,6 +599,7 @@ Painter::DrawString(const char* utf8String, BPoint baseLine,
transform.TranslateBy(fOrigin);
fTextRenderer->RenderString(utf8String,
length,
fFontRendererSolid,
fFontRendererBin,
transform,
@@ -576,6 +612,23 @@ Painter::DrawString(const char* utf8String, BPoint baseLine,
transform.Transform(&fPenLocation);
}
// DrawString
void
Painter::DrawString(const char* utf8String, const escapement_delta* delta)
{
// TODO: to be moved elsewhere
DrawString(utf8String, strlen(utf8String), fPenLocation, delta);
}
// DrawString
void
Painter::DrawString(const char* utf8String, BPoint baseLine,
const escapement_delta* delta)
{
// TODO: to be moved elsewhere
DrawString(utf8String, strlen(utf8String), baseLine, delta);
}
// #pragma mark -
// DrawBitmap
@@ -933,7 +986,29 @@ Painter::_DrawBitmap(const agg::rendering_buffer& srcBuffer, color_space format,
_DrawBitmap32(srcBuffer, actualBitmapRect, bitmapRect, viewRect);
break;
default:
fprintf(stderr, "Painter::DrawBitmap() - unsupported colorspace: %d\n", format);
fprintf(stderr, "Painter::_DrawBitmap() - non-native colorspace: %d\n", format);
#ifdef __HAIKU__
// TODO: this is only a temporary implementation,
// to really handle other colorspaces, one would
// rather do the conversion with much less overhead,
// for example in the nn filter (hm), or in the
// scanline generator
BBitmap temp(actualBitmapRect, 0, B_RGB32);
status_t err = temp.ImportBits(srcBuffer.buf(),
srcBuffer.height() * srcBuffer.stride(),
srcBuffer.stride(),
0, format);
if (err >= B_OK) {
agg::rendering_buffer convertedBuffer;
convertedBuffer.attach((uint8*)temp.Bits(),
(uint32)actualBitmapRect.IntegerWidth() + 1,
(uint32)actualBitmapRect.IntegerHeight() + 1,
temp.BytesPerRow());
_DrawBitmap32(convertedBuffer, actualBitmapRect, bitmapRect, viewRect);
} else {
fprintf(stderr, "Painter::_DrawBitmap() - colorspace conversion failed: %s\n", strerror(err));
}
#endif // __HAIKU__
break;
}
}