void FontPlatformData::setOrientation(FontOrientation orientation) { ASSERT(m_scaledFont); if (!m_scaledFont || (m_orientation == orientation)) return; cairo_matrix_t transformationMatrix; cairo_matrix_init_identity(&transformationMatrix); cairo_matrix_t fontMatrix; cairo_scaled_font_get_font_matrix(m_scaledFont, &fontMatrix); cairo_font_options_t* options = getDefaultFontOptions(); // In case of vertical orientation, rotate the transformation matrix. // Otherwise restore the horizontal orientation matrix. if (orientation == Vertical) rotateCairoMatrixForVerticalOrientation(&fontMatrix); else fontMatrix = m_horizontalOrientationMatrix; cairo_font_face_t* fontFace = cairo_scaled_font_get_font_face(m_scaledFont); cairo_scaled_font_destroy(m_scaledFont); m_scaledFont = cairo_scaled_font_create(fontFace, &fontMatrix, &transformationMatrix, options); cairo_font_options_destroy(options); m_orientation = orientation; }
void ScaledFont::getFontMatrix( Matrix *font_matrix ) { cairo_scaled_font_get_font_matrix( mCairoScaledFont, &font_matrix->getCairoMatrix() ); }