|
nux-1.14.0
|
A cairo graphics container. More...
#include <NuxImage/CairoGraphics.h>
Public Types | |
| enum | Alignment { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFY } |
| Enum used to specify horizontal alignment. | |
| enum | VAlignment { VALIGN_TOP, VALIGN_MIDDLE, VALIGN_BOTTOM } |
| Enum used to specify vertical alignment. | |
| enum | Trimming { TRIMMING_NONE, TRIMMING_CHARACTER, TRIMMING_WORD, TRIMMING_CHARACTER_ELLIPSIS, TRIMMING_WORD_ELLIPSIS, TRIMMING_PATH_ELLIPSIS } |
| Enum used to specify trimming type. | |
| enum | TextFlag { TEXT_FLAGS_NONE = 0, TEXT_FLAGS_UNDERLINE = 1, TEXT_FLAGS_STRIKEOUT = 2, TEXT_FLAGS_WORDWRAP = 4 } |
| Enum used to specify text flags. | |
Public Member Functions | |
| CairoGraphics (cairo_format_t format, int width, int height) | |
| cairo_t * | GetContext () |
| Return a cairo context to the encapsulated surface. | |
| cairo_t * | GetInternalContext () |
| Return an internal cairo context to the encapsulated surface. Should not be destroyed. | |
| cairo_surface_t * | GetSurface () |
| NBitmapData * | GetBitmap () |
| Create a NBitmapData pointer to a 2D texture data. | |
| int | GetWidth () const |
| int | GetHeight () const |
| bool | PushState () |
| bool | PopState () |
| bool | ClearCanvas () |
| bool | ClearRect (double x, double y, double w, double h) |
| bool | DrawLine (double x0, double y0, double x1, double y1, double width, const Color &c) |
| bool | DrawFilledRect (double x, double y, double w, double h, const Color &c) |
| bool | DrawCanvas (double x, double y, CairoGraphics *cg) |
| bool | DrawRoundedRectangle (cairo_t *cr, double aspect, double x, double y, double cornerRadius, double width, double height, bool align=false) |
| bool | BlurSurface (unsigned int radius, cairo_surface_t *surf=NULL) |
| bool | IntersectRectClipRegion (double x, double y, double w, double h) |
| bool | IntersectGeneralClipRegion (std::list< Rect > ®ion) |
A cairo graphics container.
CairoGraphics encapsulates a cairo surface and context.
Definition at line 60 of file CairoGraphics.h.
| NBitmapData * nux::CairoGraphics::GetBitmap | ( | ) |
Create a NBitmapData pointer to a 2D texture data.
The returned data must be destroyed with delete.
Definition at line 86 of file CairoGraphics.cpp.
References nux::ImageSurface::GetPitch().
{
if ( (_width <= 0) || (_height <= 0) )
{
nuxDebugMsg (TEXT ("[CairoGraphics::GetBitmap] Invalid surface.") );
}
NUX_RETURN_VALUE_IF_NULL (_width, 0);
NUX_RETURN_VALUE_IF_NULL (_height, 0);
BitmapFormat bitmap_format = BITFMT_UNKNOWN;
if (m_surface_format == CAIRO_FORMAT_ARGB32)
{
// Each pixel is a 32-bit quantity, with alpha in the upper 8 bits,
// then red, then green, then blue. The 32-bit quantities are stored native-endian.
// Pre-multiplied alpha is used. (That is, 50% transparent red is 0x80800000, not 0x80ff0000.)
bitmap_format = BITFMT_B8G8R8A8;
}
if (m_surface_format == CAIRO_FORMAT_RGB24)
{
// Each pixel is a 32-bit quantity, with the upper 8 bits unused.
// Red, Green, and Blue are stored in the remaining 24 bits in that order.
bitmap_format = BITFMT_B8G8R8A8;
}
if (m_surface_format == CAIRO_FORMAT_A8)
{
// Each pixel is a 8-bit quantity holding an alpha value.
bitmap_format = BITFMT_A8;
}
if (m_surface_format == CAIRO_FORMAT_A1)
bitmap_format = BITFMT_A8;
NTextureData *bitmap_data = new NTextureData (bitmap_format, _width, _height, 1);
t_u8 *ptr = cairo_image_surface_get_data (_cairo_surface);
int stride = cairo_image_surface_get_stride (_cairo_surface);
if (ptr == NULL || stride == 0)
{
// _cairo_surface is not a valid surface
nuxError (TEXT ("[CairoGraphics::GetBitmap] Invalid surface"));
return bitmap_data; // just returns because we will segfault otherwise
}
if (m_surface_format == CAIRO_FORMAT_A1)
{
t_u8 *temp = new t_u8[bitmap_data->GetSurface (0).GetPitch() ];
for (int j = 0; j < _height; j++)
{
for (int i = 0; i < _width; i++)
{
// Get the byte
int a = ptr[j * stride + i/8];
// Get the position in the byte
int b = (i - 8 * (i / 8) );
// Shift the byte and get the last bit
int c = (a >> b) & 0x1;
// If the last bit is set, put 1, otherwise put 0
temp[i] = c ? 0xFF : 0x0;
}
Memcpy ( bitmap_data->GetSurface (0).GetPtrRawData() + j * bitmap_data->GetSurface (0).GetPitch(),
(const void *) (&temp[0]),
_width);
}
}
else
{
for (int j = 0; j < _height; j++)
{
Memcpy (bitmap_data->GetSurface (0).GetPtrRawData() + j * bitmap_data->GetSurface (0).GetPitch(),
(const void *) (&ptr[j * stride]),
_width * GPixelFormats[bitmap_format].NumComponents);
}
}
return bitmap_data;
}
| cairo_t * nux::CairoGraphics::GetContext | ( | ) |
Return a cairo context to the encapsulated surface.
Return the cairo context of this object. Call cairo_destroy to destroy the context when you are done with it.
Definition at line 66 of file CairoGraphics.cpp.
{
cairo_t *cr = cairo_create (_cairo_surface);
if (cairo_status (cr) == CAIRO_STATUS_NO_MEMORY)
{
nuxAssertMsg (0, TEXT ("[CairoGraphics::GetContext] Cairo context error.") );
}
return cr;
}
| cairo_t * nux::CairoGraphics::GetInternalContext | ( | ) |
Return an internal cairo context to the encapsulated surface. Should not be destroyed.
Return the cairo context of this object. This cairo context should not be destroyed with cairo_destroy.
Definition at line 76 of file CairoGraphics.cpp.
Referenced by nux::TextEntry::CreateLayout(), and nux::TextEntry::DrawText().
{
return _cr;
}