head 1.2; access; symbols; locks; strict; comment @// @; 1.2 date 2005.12.10.14.03.33; author macslow; state Exp; branches; next 1.1; commitid 14eb439adf824567; 1.1 date 2005.09.30.10.04.11; author macslow; state Exp; branches; next ; commitid 5ce2433d0c934567; desc @@ 1.2 log @Added two new cairo-hacks/samples, made cairo-in-motion use cairomm-0.2.0 and added a slider controlling the "smoothness" (read: updates per second) of the animation @ text @// "cairo in motion" is a testbed for animated vector-drawing // using cairo within a gtk+-environment // // Copyright (C) 2005 Mirco Mueller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include #include #include #include "cairo-samples.h" CairoSamples::CairoSamples () { // initialize animation-variables m_center.x = 0.5f; m_center.y = 0.5f; m_point1.x = 0.1f; m_point1.y = 0.2f; m_point2.x = 0.5f; m_point2.y = 0.5f; m_point3.x = 0.8f; m_point3.y = 0.4f; m_point4.x = 0.2f; m_point4.y = 0.9f; m_fRadius = 0.25f; m_fAngle1 = 0.0f; m_fAngle2 = 360.0f; m_centerXStep = 0.0025f; m_centerYStep = 0.0025f; m_point1XStep = -0.0025f; m_point1YStep = -0.0025f; m_point2XStep = 0.0025f; m_point2YStep = -0.0025f; m_point2XStep = 0.0025f; m_point3YStep = -0.0025f; m_point4XStep = 0.0025f; m_point4YStep = -0.0025f; m_fRadiusStep = 0.0025f; m_fAngle1Step = 0.5f; m_fAngle2Step = -1.5f; // setup sample-entry list Entry* pEntry = new Entry; pEntry->name = "curve_rectangle"; m_sampleList.push_back (*pEntry); pEntry->name = "clock"; m_sampleList.push_back (*pEntry); pEntry->name = "fill_and_stroke"; m_sampleList.push_back (*pEntry); pEntry->name = "fill_and_stroke2"; m_sampleList.push_back (*pEntry); pEntry->name = "fontmania"; m_sampleList.push_back (*pEntry); pEntry->name = "gradient"; m_sampleList.push_back (*pEntry); pEntry->name = "image"; m_sampleList.push_back (*pEntry); pEntry->name = "image_pattern"; m_sampleList.push_back (*pEntry); pEntry->name = "libsvg"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_arc"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_arc_negative"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_cairo_logo"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_clip"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_clip_image"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_curve_to"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_gradient"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_gradient2"; m_sampleList.push_back (*pEntry); pEntry->name = "moving_zini"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_add"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_atop"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_atop_reverse"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_in"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_in_reverse"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_out"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_out_reverse"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_over"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_over_reverse"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_saturate"; m_sampleList.push_back (*pEntry); pEntry->name = "operator_xor"; m_sampleList.push_back (*pEntry); pEntry->name = "path"; m_sampleList.push_back (*pEntry); pEntry->name = "pattern_fill"; m_sampleList.push_back (*pEntry); pEntry->name = "set_line_cap"; m_sampleList.push_back (*pEntry); pEntry->name = "set_line_join"; m_sampleList.push_back (*pEntry); pEntry->name = "text_align_center"; m_sampleList.push_back (*pEntry); pEntry->name = "text"; m_sampleList.push_back (*pEntry); pEntry->name = "text_extents"; m_sampleList.push_back (*pEntry); pEntry->name = "xxx_clip_rectangle"; m_sampleList.push_back (*pEntry); pEntry->name = "xxx_dash"; m_sampleList.push_back (*pEntry); pEntry->name = "xxx_long_lines"; m_sampleList.push_back (*pEntry); pEntry->name = "xxx_multi_segment_caps"; m_sampleList.push_back (*pEntry); pEntry->name = "xxx_self_intersect"; m_sampleList.push_back (*pEntry); } CairoSamples::~CairoSamples () { } void CairoSamples::do_animation_step (unsigned long ulMilliSeconds) { srand (42); m_ulMilliSeconds = ulMilliSeconds; // update vars update_var (&m_center.x, 0.0f, 1.0f, &m_centerXStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_center.y, 0.0f, 1.0f, &m_centerYStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point1.x, 0.0f, 1.0f, &m_point1XStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point1.y, 0.0f, 1.0f, &m_point1YStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point2.x, 0.0f, 1.0f, &m_point2XStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point2.y, 0.0f, 1.0f, &m_point2YStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point3.x, 0.0f, 1.0f, &m_point3XStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point3.y, 0.0f, 1.0f, &m_point3YStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point4.x, 0.0f, 1.0f, &m_point4XStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_point4.y, 0.0f, 1.0f, &m_point4YStep, (double) rand() * 0.025 / RAND_MAX, (double) rand() * -0.025 / RAND_MAX); update_var (&m_fRadius, 0.05f, 0.5f, &m_fRadiusStep, (double) rand() * 0.0125 / RAND_MAX, (double) rand() * -0.0125 / RAND_MAX); update_var (&m_fAngle1, 0.0f, 360.0f, &m_fAngle1Step, 0.5f, -1.0f); update_var (&m_fAngle2, 0.0f, 360.0f, &m_fAngle2Step, 2.0f, -0.75f); } void CairoSamples::set_context (Cairo::Context* pCairoContext) { m_pCairoContext = pCairoContext; } void CairoSamples::normalize_canvas (double fWidth, double fHeight) const { m_pCairoContext->scale(fWidth, fHeight); } void CairoSamples::set_bg_svg (std::string strSVGFileName) { unsigned int uiWidth; unsigned int uiHeight; svg_cairo_t* pSVGContext; svg_cairo_create (&pSVGContext); svg_cairo_parse (pSVGContext, strSVGFileName.c_str ()); svg_cairo_get_size (pSVGContext, &uiWidth, &uiHeight); m_pCairoContext->save (); m_pCairoContext->scale (1.0f / uiWidth, 1.0f / uiHeight); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); m_pCairoContext->restore (); svg_cairo_destroy (pSVGContext); } bool CairoSamples::do_sample (Sample sample) { bool bResult = false; switch (sample) { case CurveRectangle : bResult = curve_rectangle (); break; case Clock : bResult = clock (); break; case FillAndStroke : bResult = fill_and_stroke (); break; case FillAndStroke2 : bResult = fill_and_stroke2 (); break; case Fontmania : bResult = fontmania (); break; case Gradient : bResult = gradient (); break; case Image : //bResult = image (); bResult = sample_fallback ("Sample disabled"); break; case ImagePattern : //bResult = image_pattern (); bResult = sample_fallback ("Sample disabled"); break; case LibSVG : bResult = libsvg (); break; case MovingArc : bResult = moving_arc (); break; case MovingArcNegative : bResult = moving_arc_negative (); break; case MovingCairoLogo : bResult = moving_cairo_logo (); break; case MovingClip : bResult = moving_clip (); break; case MovingClipImage : //bResult = moving_clip_image (); bResult = sample_fallback ("Sample disabled"); break; case MovingCurveTo : bResult = moving_curve_to (); break; case MovingGradient : bResult = moving_gradient (); break; case MovingGradient2 : bResult = moving_gradient2 (); break; case MovingZini: bResult = moving_zini (); break; case OperatorAdd : bResult = operator_add (); break; case OperatorAtop : bResult = operator_atop (); break; case OperatorAtopReverse : bResult = operator_atop_reverse (); break; case OperatorIn : bResult = operator_in (); break; case OperatorInReverse : bResult = operator_in_reverse (); break; case OperatorOut : bResult = operator_out (); break; case OperatorOutReverse : bResult = operator_out_reverse (); break; case OperatorOver : bResult = operator_over (); break; case OperatorOverReverse : bResult = operator_over_reverse (); break; case OperatorSaturate : bResult = operator_saturate (); break; case OperatorXor : bResult = operator_xor (); break; case Path : bResult = path (); break; case PatternFill : bResult = pattern_fill (); break; case SetLineCap : bResult = set_line_cap (); break; case SetLineJoin : bResult = set_line_join (); break; case TextAlignCenter : bResult = text_align_center (); break; case Text : bResult = text (); break; case TextExtents : bResult = text_extents (); break; case XxxClipRectangle : bResult = xxx_clip_rectangle (); break; case XxxDash : bResult = xxx_dash (); break; case XxxLongLines : bResult = xxx_long_lines (); break; case XxxMultiSegmentCaps : bResult = xxx_multi_segment_caps (); break; case XxxSelfIntersect : bResult = xxx_self_intersect (); break; default : bResult = sample_fallback ("Sample not found"); break; } return bResult; } void CairoSamples::set_cap_style (Cairo::LineCap cairoCapStyle) { m_cairoCapStyle = cairoCapStyle; } void CairoSamples::set_join_style (Cairo::LineJoin cairoJoinStyle) { m_cairoJoinStyle = cairoJoinStyle; } void CairoSamples::set_dash_style (DashStyle dashStyle) { m_dashStyle = dashStyle; } void CairoSamples::set_operator (Cairo::Operator cairoOperator) { m_cairoOperator = cairoOperator; } void CairoSamples::set_extend_mode (Cairo::Extend cairoExtendMode) { m_cairoExtendMode = cairoExtendMode; } void CairoSamples::set_filter_mode (Cairo::Filter cairoFilterMode) { m_cairoFilterMode = cairoFilterMode; } void CairoSamples::set_line_width (double fLineWidth) { m_fLineWidth = fLineWidth; } void CairoSamples::set_bg_color (Gdk::Color bgColor) { m_bgColor = bgColor; } void CairoSamples::set_font_family (std::string strFontFamily) { m_strFontFamily = strFontFamily; } void CairoSamples::set_font_size (double fFontSize) { m_fFontSize = fFontSize; } void CairoSamples::set_font_weight (Cairo::FontWeight cairoFontWeight) { m_cairoFontWeight = cairoFontWeight; } void CairoSamples::set_font_slant (Cairo::FontSlant cairoFontSlant) { m_cairoFontSlant = cairoFontSlant; } void CairoSamples::set_some_text (std::string strSomeText) { m_strSomeText = strSomeText; } void CairoSamples::set_image_file_name (std::string strFileName) { m_strImageFileName = strFileName; } void CairoSamples::set_svg_file_name (std::string strFileName) { m_strSvgFileName = strFileName; } void CairoSamples::add_samples_to_list_store (SampleListStore* pSampleListStore) { if (!pSampleListStore) return; for (std::vector::iterator iter = m_sampleList.begin (); iter != m_sampleList.end (); iter++) { pSampleListStore->add_item ((*iter).name); } } std::string CairoSamples::get_sample_name (Sample sample) { return m_sampleList[sample].name; } void CairoSamples::update_var (double* pfValue, double fLowerLimit, double fUpperLimit, double* pfStep, double fGrow, double fShrink) { if (*pfValue <= fLowerLimit) { *pfValue = fLowerLimit; *pfStep = fGrow; } if (*pfValue >= fUpperLimit) { *pfValue = fUpperLimit; *pfStep = fShrink; } *pfValue += *pfStep; } HandlePoint CairoSamples::get_center () { return m_center; } HandlePoint CairoSamples::get_point1 () { return m_point1; } HandlePoint CairoSamples::get_point2 () { return m_point2; } HandlePoint CairoSamples::get_point3 () { return m_point3; } HandlePoint CairoSamples::get_point4 () { return m_point4; } double CairoSamples::get_radius () { return m_fRadius; } double CairoSamples::get_angle_1 () { return m_fAngle1; } double CairoSamples::get_angle_2 () { return m_fAngle2; } void CairoSamples::draw_background () { int iX; int iY; bool bToggle = false; for (iX = 0; iX < 20; iX++) { bToggle = !bToggle; for (iY = 0; iY < 20; iY++) { if (bToggle) { m_pCairoContext->set_source_rgb (m_bgColor.get_red_p (), m_bgColor.get_green_p (), m_bgColor.get_blue_p ()); bToggle = !bToggle; } else { m_pCairoContext->set_source_rgb (m_bgColor.get_red_p() - 0.1f, m_bgColor.get_green_p() - 0.1f, m_bgColor.get_blue_p() - 0.1f); bToggle = !bToggle; } m_pCairoContext->rectangle (iX * 0.05f, iY * 0.05f, 0.05f, 0.05f); m_pCairoContext->fill (); } } } void CairoSamples::draw_background (Gdk::Color color) { m_pCairoContext->set_source_rgba (color.get_red_p (), color.get_green_p (), color.get_blue_p (), 1.0f); m_pCairoContext->rectangle (0.0f, 0.0f, 1.0f, 1.0f); m_pCairoContext->fill (); } void CairoSamples::draw_handle (HandlePoint* pPoint) { if (!pPoint) return; draw_handle (pPoint->x, pPoint->y); } void CairoSamples::draw_handle (double fX, double fY) { double fRadius = 0.01f; std::valarray dashes (1); if (!m_pCairoContext) return; dashes[0] = 1.0f; m_pCairoContext->set_dash (dashes, 0.0f); m_pCairoContext->set_line_width (0.002f); m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_BUTT); m_pCairoContext->set_line_join (CAIRO_LINE_JOIN_ROUND); /* draw white/green-ish outline */ m_pCairoContext->set_source_rgb (0.9f, 1.0f, 0.8f); m_pCairoContext->arc (fX, fY, fRadius, 0.0f, 2.0f * M_PI); m_pCairoContext->stroke (); /* draw grey/transparent center */ m_pCairoContext->set_source_rgba (0.6f, 0.6f, 0.6f, 0.5f); m_pCairoContext->arc (fX, fY, fRadius, 0.0f, 2.0f * M_PI); m_pCairoContext->fill (); } bool CairoSamples::sample_fallback (std::string strMessage) { if (!m_pCairoContext) return false; m_pCairoContext->select_font_face ("Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); m_pCairoContext->set_font_size (0.115f); Gdk::Color white ("#ffffff"); draw_background (white); m_pCairoContext->set_source_rgb (1.0f, 0.0f, 0.0f); m_pCairoContext->move_to (0.04f, 0.53f); m_pCairoContext->show_text (strMessage.c_str ()); return true; } bool CairoSamples::curve_rectangle () { if (!m_pCairoContext) return false; double x0 = 0.1f; double y0 = 0.1f; double rect_width = 0.8f; double rect_height = 0.8f; double radius = 0.4f; double x1; double y1; x1 = x0 + rect_width; y1 = y0 + rect_height; draw_background (); m_pCairoContext->set_line_width (m_fLineWidth); if (!rect_width || !rect_height) return false; if (rect_width / 2.0f < radius) { if (rect_height / 2.0f < radius) { m_pCairoContext->move_to (x0, (y0 + y1) / 2.0f); m_pCairoContext->curve_to (x0 ,y0, x0, y0, (x0 + x1) / 2.0f, y0); m_pCairoContext->curve_to (x1, y0, x1, y0, x1, (y0 + y1) / 2.0f); m_pCairoContext->curve_to (x1, y1, x1, y1, (x1 + x0) / 2.0f, y1); m_pCairoContext->curve_to (x0, y1, x0, y1, x0, (y0 + y1) / 2.0f); } else { m_pCairoContext->move_to (x0, y0 + radius); m_pCairoContext->curve_to (x0 ,y0, x0, y0, (x0 + x1) / 2.0f, y0); m_pCairoContext->curve_to (x1, y0, x1, y0, x1, y0 + radius); m_pCairoContext->line_to (x1 , y1 - radius); m_pCairoContext->curve_to (x1, y1, x1, y1, (x1 + x0) / 2.0f, y1); m_pCairoContext->curve_to (x0, y1, x0, y1, x0, y1- radius); } } else { if (rect_height / 2.0f < radius) { m_pCairoContext->move_to (x0, (y0 + y1) / 2.0f); m_pCairoContext->curve_to (x0 , y0, x0 , y0, x0 + radius, y0); m_pCairoContext->line_to (x1 - radius, y0); m_pCairoContext->curve_to (x1, y0, x1, y0, x1, (y0 + y1) / 2.0f); m_pCairoContext->curve_to (x1, y1, x1, y1, x1 - radius, y1); m_pCairoContext->line_to (x0 + radius, y1); m_pCairoContext->curve_to (x0, y1, x0, y1, x0, (y0 + y1) / 2.0f); } else { m_pCairoContext->move_to (x0, y0 + radius); m_pCairoContext->curve_to (x0 , y0, x0 , y0, x0 + radius, y0); m_pCairoContext->line_to (x1 - radius, y0); m_pCairoContext->curve_to (x1, y0, x1, y0, x1, y0 + radius); m_pCairoContext->line_to (x1 , y1 - radius); m_pCairoContext->curve_to (x1, y1, x1, y1, x1 - radius, y1); m_pCairoContext->line_to (x0 + radius, y1); m_pCairoContext->curve_to (x0, y1, x0, y1, x0, y1- radius); } } m_pCairoContext->close_path (); m_pCairoContext->set_source_rgb (0.5f, 0.5f, 1.0f); m_pCairoContext->fill_preserve (); m_pCairoContext->set_source_rgba (0.5f, 0.0f, 0.0f, 0.5f); m_pCairoContext->stroke (); return true; } bool CairoSamples::clock () { int i; int iSeconds; int iMinutes; int iHours; static time_t timeOfDay; struct tm* pTime; if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->save (); m_pCairoContext->translate (0.5f, 0.5f); m_pCairoContext->scale (0.4f, 0.4f); m_pCairoContext->rotate (-M_PI/2.0f); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->set_line_width (3.0f/60.0f); m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_ROUND); m_pCairoContext->set_line_join (CAIRO_LINE_JOIN_ROUND); // draw hour-marks m_pCairoContext->save (); m_pCairoContext->new_path (); for (i = 0; i < 12; i++) { m_pCairoContext->rotate (M_PI/6.0f); m_pCairoContext->move_to (2.0f/3.0f, 0.0f); m_pCairoContext->line_to (4.0f/5.0f, 0.0f); } m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->restore (); // draw minute-marks m_pCairoContext->save (); m_pCairoContext->set_line_width (1.0f/45.0f); m_pCairoContext->new_path (); for (i = 0; i < 60; i++) { if (i%5 != 0) { m_pCairoContext->move_to(4.0f/5.0f - 1.0f/50.0f,0.0f); m_pCairoContext->line_to(4.0f/5.0f,0.0f); } m_pCairoContext->rotate(M_PI/30.0f); } m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->restore (); // if absolutely now clue how to do this determination of the current time // only via the classes and methods provided by glibmm/gtkmm, I would really // welcome anybody enlighten me on this time (&timeOfDay); pTime = localtime (&timeOfDay); iSeconds = pTime->tm_sec; iMinutes = pTime->tm_min; iHours = pTime->tm_hour; iHours = iHours >= 12 ? iHours - 12 : iHours; m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); // draw hour-hand m_pCairoContext->save (); m_pCairoContext->rotate ((M_PI/6.0f)*iHours + (M_PI/360.0f)*iMinutes + (M_PI/21600.0f)*iSeconds); m_pCairoContext->set_line_width (1.0f/15.0f); m_pCairoContext->new_path (); m_pCairoContext->move_to(-2.0f/15.0f, 0.0f); m_pCairoContext->line_to(7.0f/15.0f, 0.0f); m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->restore (); // draw minute-hand m_pCairoContext->save (); m_pCairoContext->rotate ( (M_PI/30)*iMinutes + (M_PI/1800)*iSeconds); m_pCairoContext->set_line_width (1.0f/30.0f); m_pCairoContext->new_path (); m_pCairoContext->move_to (-16.0f/75.0f, 0.0f); m_pCairoContext->line_to (2.0f/3.0f, 0.0f); m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->restore (); // draw second-hand m_pCairoContext->save (); m_pCairoContext->rotate (iSeconds * M_PI/30.0f); m_pCairoContext->set_source_rgb (0.82f, 0.0f, 0.0f); m_pCairoContext->set_line_width (1.0f / 50.0f); m_pCairoContext->new_path (); m_pCairoContext->move_to (-1.0f/5.0f, 0.0f); m_pCairoContext->line_to (3.0f/5.0f ,0.0f); m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->new_path (); m_pCairoContext->arc (0.0f, 0.0f, 1.0f/20.0f, 0.0f, M_PI * 2.0f); m_pCairoContext->fill (); m_pCairoContext->new_path (); m_pCairoContext->arc (32.0f/50.0f, 0.0f, 1.0f/35.0f, 0.0f, M_PI * 2.0f); m_pCairoContext->stroke (); m_pCairoContext->set_line_width (1.0f / 100.0f); m_pCairoContext->move_to (10.0f/15.0f, 0.0f); m_pCairoContext->line_to (11.0f/15.0f, 0.0f); m_pCairoContext->stroke (); m_pCairoContext->set_line_width (1.0f/ 50.0f); m_pCairoContext->set_source_rgb (0.31f, 0.31f, 0.31f); m_pCairoContext->arc (0.0f, 0.0f, 1.0f/25.0f, 0.0f, M_PI * 2); m_pCairoContext->close_path (); m_pCairoContext->fill (); m_pCairoContext->restore (); m_pCairoContext->new_path (); m_pCairoContext->set_line_width (10.0f/75.0f); m_pCairoContext->set_source_rgb (0.19f, 0.37f, 0.63f); m_pCairoContext->arc (0.0f, 0.0f, 142.0f/150.0f, 0.0f, M_PI * 2.0f); m_pCairoContext->close_path (); m_pCairoContext->stroke (); m_pCairoContext->restore (); return true; } bool CairoSamples::fill_and_stroke () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.5f, 0.1f); m_pCairoContext->line_to (0.9f, 0.9f); m_pCairoContext->rel_line_to (-0.4f, 0.0f); m_pCairoContext->curve_to (0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); m_pCairoContext->close_path (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->fill_preserve (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::fill_and_stroke2 () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.5f, 0.1f); m_pCairoContext->line_to (0.9f, 0.9f); m_pCairoContext->rel_line_to (-0.4f, 0.0f); m_pCairoContext->curve_to (0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); m_pCairoContext->close_path (); m_pCairoContext->move_to (0.25f, 0.1f); m_pCairoContext->rel_line_to (0.2f, 0.2f); m_pCairoContext->rel_line_to (-0.2f, 0.2f); m_pCairoContext->rel_line_to (-0.2f, -0.2f); m_pCairoContext->close_path (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->fill_preserve (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::fontmania () { draw_background (); std::string theText = "Fontmania"; // set font-attributes m_pCairoContext->select_font_face ("Times New Roman", CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL); m_pCairoContext->set_font_size (0.6f); // draw the solid black text m_pCairoContext->set_source_rgba (0.0f, 0.0f, 0.0f, 0.15f); m_pCairoContext->move_to (0.05f, 0.6f); m_pCairoContext->show_text (theText); // set font-attributes m_pCairoContext->select_font_face ("Arial Black", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); m_pCairoContext->set_font_size (0.1f); // draw the solid black text m_pCairoContext->set_source_rgba (0.0f, 0.0f, 0.0f, 1.0f); m_pCairoContext->move_to (0.4f, 0.6f); m_pCairoContext->show_text (theText); // set font-attributes m_pCairoContext->select_font_face ("Verdana", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); m_pCairoContext->set_font_size (0.15f); // draw the solid black text m_pCairoContext->set_source_rgba (0.0f, 0.0f, 0.0f, 0.25f); m_pCairoContext->move_to (0.1f, 0.6f); m_pCairoContext->show_text (theText); // set font-attributes m_pCairoContext->select_font_face ("Impact", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); m_pCairoContext->set_font_size (0.2f); // draw the solid black text m_pCairoContext->set_source_rgba (0.0f, 0.0f, 0.0f, 0.35f); m_pCairoContext->move_to (0.3f, 0.6f); m_pCairoContext->show_text (theText); return true; } bool CairoSamples::gradient () { if (!m_pCairoContext) return false; Cairo::Pattern pattern = Cairo::Pattern::create_linear (0.0f, 0.0f, 0.0f, 1.0f); pattern.add_color_stop_rgba (1.0f, 0.0f, 0.0f, 0.0f, 1.0f); pattern.add_color_stop_rgba (0.0f, 1.0f, 1.0f, 1.0f, 1.0f); m_pCairoContext->rectangle (0.0f, 0.0f, 1.0f, 1.0f); m_pCairoContext->set_source (pattern); m_pCairoContext->fill (); pattern = Cairo::Pattern::create_radial (0.45f, 0.4f, 0.1f, 0.4f, 0.4f, 0.5f); pattern.add_color_stop_rgba (0.0f, 1.0f, 1.0f, 1.0f, 1.0f); pattern.add_color_stop_rgba (1.0f, 0.0f, 0.0f, 0.0f, 1.0f); m_pCairoContext->set_source (pattern); m_pCairoContext->arc (0.5f, 0.5f, 0.3f, 0.0f, 2.0f * M_PI); m_pCairoContext->fill (); return true; } bool CairoSamples::image () { if (!m_pCairoContext) return false; draw_background (); std::string bla; bla.assign (m_strImageFileName); int iWidth; int iHeight; Cairo::Surface image = Cairo::Surface::create (CAIRO_FORMAT_RGB24, 1, 1); //image.create_from_png (bla.c_str ()); iWidth = image.get_width (); iHeight = image.get_height (); m_pCairoContext->translate (0.5f, 0.5f); m_pCairoContext->rotate (45.0f * M_PI / 180.0f); m_pCairoContext->scale (1.0f / iWidth, 1.0f / iHeight); m_pCairoContext->translate (-0.5f * iWidth, -0.5f * iHeight); m_pCairoContext->set_source_surface (image, 0.0f, 0.0f); m_pCairoContext->paint (); return true; } bool CairoSamples::image_pattern () { if (!m_pCairoContext) return false; draw_background (); int iWidth; int iHeight; Cairo::Surface image = Cairo::Surface::create (CAIRO_FORMAT_RGB24, 1, 1); Cairo::Pattern pattern = Cairo::Pattern::create_for_surface (image.cobj ()); cairo_matrix_t matrix; //image.create_from_png (m_strImageFileName.c_str ()); iWidth = image.get_width (); iHeight = image.get_height (); pattern.set_extend (m_cairoExtendMode); pattern.set_filter (m_cairoFilterMode); m_pCairoContext->translate (0.5f, 0.5f); m_pCairoContext->rotate (M_PI / 4.0f); m_pCairoContext->scale (1.0f / sqrt (2.0f), 1.0f / sqrt (2.0f)); m_pCairoContext->translate (- 0.5f, - 0.5f); cairo_matrix_init_scale (&matrix, iWidth * 5.0f, iHeight * 5.0f); pattern.set_matrix (matrix); m_pCairoContext->set_source (pattern); m_pCairoContext->rectangle (0.0f, 0.0f, 1.0f, 1.0f); m_pCairoContext->fill (); return true; } bool CairoSamples::libsvg () { if (!m_pCairoContext) return false; draw_background (); svg_cairo_t* pSVGContext; unsigned int uiWidth; unsigned int uiHeight; svg_cairo_create (&pSVGContext); svg_cairo_parse (pSVGContext, m_strSvgFileName.c_str ()); svg_cairo_get_size (pSVGContext, &uiWidth, &uiHeight); m_pCairoContext->scale (1.0f / uiWidth, 1.0f / uiHeight); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); svg_cairo_destroy (pSVGContext); return true; } bool CairoSamples::moving_arc () { if (!m_pCairoContext) return false; HandlePoint center = get_center (); double fRadius = get_radius (); double radiantAngle1 = get_angle_1 () * (M_PI/180.0); double radiantAngle2 = get_angle_2 () * (M_PI/180.0); HandlePoint firstHandle = { center.x + fRadius * cos (radiantAngle1), center.y + fRadius * sin (radiantAngle1) }; HandlePoint secondHandle = { center.x + fRadius * cos (radiantAngle2), center.y + fRadius * sin (radiantAngle2)}; draw_background (); // draw black arc m_pCairoContext->set_line_width(m_fLineWidth); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->arc (center.x, center.y, fRadius, radiantAngle1, radiantAngle2); m_pCairoContext->stroke (); // draw the two "helper"-lines m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->set_line_width (0.005f); m_pCairoContext->move_to (center.x, center.y); m_pCairoContext->line_to (firstHandle.x, firstHandle.y); m_pCairoContext->move_to (center.x, center.y); m_pCairoContext->line_to (secondHandle.x, secondHandle.y); m_pCairoContext->stroke (); // draw the three handle-points */ draw_handle (&firstHandle); draw_handle (&secondHandle); draw_handle (¢er); return true; } bool CairoSamples::moving_arc_negative () { if (!m_pCairoContext) return false; HandlePoint center = get_center (); double fRadius = get_radius (); double radiantAngle1 = get_angle_1 () * (M_PI / 180.0f); double radiantAngle2 = get_angle_2 () * (M_PI / 180.0f); HandlePoint firstHandle = { center.x + fRadius * cos (radiantAngle1), center.y + fRadius * sin (radiantAngle1) }; HandlePoint secondHandle = { center.x + fRadius * cos (radiantAngle2), center.y + fRadius * sin (radiantAngle2)}; draw_background (); // draw black arc m_pCairoContext->set_line_width(m_fLineWidth); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->arc_negative (center.x, center.y, fRadius, radiantAngle1, radiantAngle2); m_pCairoContext->stroke (); // draw the two "helper"-lines m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->set_line_width (0.005f); m_pCairoContext->move_to (center.x, center.y); m_pCairoContext->line_to (firstHandle.x, firstHandle.y); m_pCairoContext->move_to (center.x, center.y); m_pCairoContext->line_to (secondHandle.x, secondHandle.y); m_pCairoContext->stroke (); // draw the three handle-points */ draw_handle (&firstHandle); draw_handle (&secondHandle); draw_handle (¢er); return true; } bool CairoSamples::moving_cairo_logo () { if (!m_pCairoContext) return false; draw_background (); svg_cairo_t* pSVGContext; unsigned int uiWidth; unsigned int uiHeight; cairo_matrix_t matrix; HandlePoint offset = get_center (); svg_cairo_create (&pSVGContext); svg_cairo_parse (pSVGContext, "./cairo_logo.svg"); svg_cairo_get_size (pSVGContext, &uiWidth, &uiHeight); m_pCairoContext->scale (1.0f / uiWidth, 1.0f / uiHeight); cairo_matrix_init_identity (&matrix); cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 160.0f); cairo_matrix_rotate (&matrix, get_angle_1 () * (M_PI/180.0f)); cairo_matrix_scale (&matrix, 0.5f, 0.5f); m_pCairoContext->set_matrix (matrix); m_pCairoContext->paint_with_alpha (0.1f); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); cairo_matrix_init_identity (&matrix); cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 120.0f); cairo_matrix_rotate (&matrix, (5.0f + get_angle_1 ()) * (M_PI/180.0f)); cairo_matrix_scale (&matrix, 0.5f, 0.5f); m_pCairoContext->set_matrix (matrix); m_pCairoContext->paint_with_alpha (0.2f); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); cairo_matrix_init_identity (&matrix); cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 80.0f); cairo_matrix_rotate (&matrix, (10.0f + get_angle_1 ()) * (M_PI/180.0f)); cairo_matrix_scale (&matrix, 0.5f, 0.5f); m_pCairoContext->set_matrix (matrix); m_pCairoContext->paint_with_alpha (0.3f); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); cairo_matrix_init_identity (&matrix); cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 40.0f); cairo_matrix_rotate (&matrix, (15.0f + get_angle_1 ()) * (M_PI/180.0f)); cairo_matrix_scale (&matrix, 0.5f, 0.5f); m_pCairoContext->set_matrix (matrix); m_pCairoContext->paint_with_alpha (0.4f); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); cairo_matrix_init_identity (&matrix); cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y); cairo_matrix_rotate (&matrix, (20.0f + get_angle_1 ()) * (M_PI/180.0f)); cairo_matrix_scale (&matrix, 0.5f, 0.5f); m_pCairoContext->set_matrix (matrix); m_pCairoContext->paint_with_alpha (0.5f); svg_cairo_render (pSVGContext, m_pCairoContext->cobj ()); svg_cairo_destroy (pSVGContext); return true; } bool CairoSamples::moving_clip () { if (!m_pCairoContext) return false; HandlePoint center = get_center (); double fRadius = get_radius () / 2.0f; HandlePoint handle = {center.x + fRadius * cos (0.0f), center.y + fRadius * sin (0.0f)}; draw_background (); // draw clipping arc/circle with black interior m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->arc (center.x, center.y, fRadius, 0.0f, 2.0f * M_PI); m_pCairoContext->clip (); // begin new path within clipping arc/circle // current path is not consumed by cairo_clip() m_pCairoContext->new_path (); m_pCairoContext->rectangle (0.0f, 0.0f, 1.0f, 1.0f); m_pCairoContext->fill (); // draw two green diagonal lines m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->move_to (0.0f, 0.0f); m_pCairoContext->line_to (1.0f, 1.0f); m_pCairoContext->move_to (1.0f, 0.0f); m_pCairoContext->line_to (0.0f, 1.0f); m_pCairoContext->stroke (); // draw the two handle-points */ draw_handle (&handle); draw_handle (¢er); return true; } bool CairoSamples::moving_clip_image () { if (!m_pCairoContext) return false; int iWidth; int iHeight; Cairo::Surface* image; HandlePoint center = get_center (); double fRadius = get_radius () / 2.0f; HandlePoint handle = {center.x + fRadius * cos (0.0f), center.y + fRadius * sin (0.0f)}; draw_background (); // draw clipping arc/circle m_pCairoContext->arc (center.x, center.y, fRadius, 0.0f, 2.0f * M_PI); m_pCairoContext->clip (); // fill that clipping arc/circle with an image m_pCairoContext->new_path (); //image.create_from_png (m_strImageFileName.c_str ()); iWidth = image->get_width (); iHeight = image->get_height (); m_pCairoContext->scale (1.0f / iWidth, 1.0f / iHeight); m_pCairoContext->set_source_surface (*image, 0.0f, 0.0f); m_pCairoContext->paint (); //delete image; //m_pCairoContext->scale (iWidth, iHeight); // draw the two handle-points draw_handle (&handle); draw_handle (¢er); return true; } bool CairoSamples::moving_curve_to () { if (!m_pCairoContext) return false; HandlePoint points[4]; points[0] = get_point1 (); points[1] = get_point2 (); points[2] = get_point3 (); points[3] = get_point4 (); draw_background (); // draw black bezier-curve m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->move_to (points[0].x, points[0].y); m_pCairoContext->curve_to (points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y); m_pCairoContext->stroke (); // draw red "helper" lines m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->set_line_width (0.005f); m_pCairoContext->move_to (points[0].x, points[0].y); m_pCairoContext->line_to (points[1].x, points[1].y); m_pCairoContext->move_to (points[2].x, points[2].y); m_pCairoContext->line_to (points[3].x, points[3].y); m_pCairoContext->stroke (); // draw the three handle-points draw_handle (&points[0]); draw_handle (&points[1]); draw_handle (&points[2]); draw_handle (&points[3]); return true; } bool CairoSamples::moving_gradient () { if (!m_pCairoContext) return false; HandlePoint center = get_center (); double fRadius = get_radius (); HandlePoint handle = {center.x + fRadius * cos (0.0f), center.y + fRadius * sin (0.0f)}; draw_background (); Cairo::Pattern pattern = Cairo::Pattern::create_radial (center.x, center.y, fRadius, 0.5f, 0.5f, 0.5f); pattern.add_color_stop_rgba (0.0f, 1.0f, 1.0f, 0.1f, 0.85f); pattern.add_color_stop_rgba (1.0f, 0.7f, 0.1f, 0.1f, 1.0f); m_pCairoContext->set_source (pattern); m_pCairoContext->arc (0.5f, 0.5f, 0.3f, 0.0f, 2.0f * M_PI); m_pCairoContext->fill (); // draw the two handle-points */ draw_handle (¢er); draw_handle (&handle); return true; } bool CairoSamples::moving_gradient2 () { if (!m_pCairoContext) return false; HandlePoint handle1 = get_point1 (); HandlePoint handle2 = get_point2 (); draw_background (); Cairo::Pattern pattern = Cairo::Pattern::create_linear (handle1.x, handle1.y, handle2.x, handle2.y); pattern.set_filter (m_cairoFilterMode); pattern.set_extend (m_cairoExtendMode); pattern.add_color_stop_rgba (0.0f, 1.0f, 1.0f, 0.5f, 1.0f); pattern.add_color_stop_rgba (0.1f, 0.3f, 1.0f, 0.8f, 0.5f); pattern.add_color_stop_rgba (0.5f, 1.0f, 0.0f, 0.7f, 1.0f); pattern.add_color_stop_rgba (0.9f, 0.6f, 0.0f, 1.0f, 0.1f); pattern.add_color_stop_rgba (1.0f, 0.2f, 0.5f, 1.0f, 1.0f); m_pCairoContext->set_source (pattern); m_pCairoContext->rectangle (0.0f, 0.0f, 1.0f, 1.0f); m_pCairoContext->fill (); // draw the two handle-points */ draw_handle (&handle1); draw_handle (&handle2); return true; } bool CairoSamples::moving_zini () { if (!m_pCairoContext) return false; draw_background (); double fLength = 1.0f / 25.0f; double fY; m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_ROUND); for (int i = 0; i < 60; i++) { m_pCairoContext->save (); m_pCairoContext->set_line_width (fLength); m_pCairoContext->translate (0.5f, 0.5f); m_pCairoContext->rotate (M_PI/180.0f * (m_ulMilliSeconds + 10.0f*i) * 0.36f); fY = 0.33f + 0.0825f * sin ((m_ulMilliSeconds + 10.0f*i)/1000 * 10 * M_PI); m_pCairoContext->translate (0, fY); m_pCairoContext->rotate (M_PI/180.0f * 6.0f * i); m_pCairoContext->set_source_rgba (1.0f, 0.5f, 0.0f, i*0.01f); m_pCairoContext->move_to (-fLength, 0); m_pCairoContext->line_to (fLength, 0); m_pCairoContext->stroke (); m_pCairoContext->restore (); } return true; } bool CairoSamples::operator_add () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_ADD); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_atop () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_ATOP); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_atop_reverse () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_DEST_ATOP); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_in () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_IN); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_in_reverse () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_DEST_IN); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_out () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_OUT); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_out_reverse () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_DEST_OUT); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_over () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_OVER); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_over_reverse () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_DEST_OVER); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_saturate () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_SATURATE); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::operator_xor () { if (!m_pCairoContext) return false; draw_background (); set_bg_svg ("freedesktop.svg"); m_pCairoContext->set_operator (CAIRO_OPERATOR_XOR); m_pCairoContext->set_source_rgba (1.0f, 0.0f, 0.0f, 0.5f); m_pCairoContext->rectangle (0.2f, 0.2f, 0.5f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->rectangle (0.4f, 0.4f, 0.4f, 0.4f); m_pCairoContext->fill (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->rectangle (0.6f, 0.6f, 0.3f, 0.3f); m_pCairoContext->fill (); return true; } bool CairoSamples::path () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->move_to (0.5f, 0.1f); m_pCairoContext->line_to (0.9f, 0.9f); m_pCairoContext->rel_line_to (-0.4f, 0.0f); m_pCairoContext->curve_to (0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); m_pCairoContext->stroke (); return true; } bool CairoSamples::pattern_fill () { if (!m_pCairoContext) return false; draw_background (); #define X_FUZZ 0.08 #define Y_FUZZ 0.08 #define X_INNER_RADIUS 0.3 #define Y_INNER_RADIUS 0.2 #define X_OUTER_RADIUS 0.45 #define Y_OUTER_RADIUS 0.35 #define SPIKES 10 int i; double x; double y; Cairo::TextExtents extents; srand (45); m_pCairoContext->set_line_width (m_fLineWidth); for (i = 0; i < SPIKES * 2; i++) { x = 0.5f + cos (M_PI * i / SPIKES) * X_INNER_RADIUS + (double) rand() * X_FUZZ / RAND_MAX; y = 0.5f + sin (M_PI * i / SPIKES) * Y_INNER_RADIUS + (double) rand() * Y_FUZZ / RAND_MAX; if (i == 0) m_pCairoContext->move_to (x, y); else m_pCairoContext->line_to (x, y); i++; x = 0.5f + cos (M_PI * i / SPIKES) * X_OUTER_RADIUS + (double) rand() * X_FUZZ / RAND_MAX; y = 0.5f + sin (M_PI * i / SPIKES) * Y_OUTER_RADIUS + (double) rand() * Y_FUZZ / RAND_MAX; m_pCairoContext->line_to (x, y); } m_pCairoContext->close_path (); m_pCairoContext->set_source_rgb (1.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); m_pCairoContext->select_font_face (m_strFontFamily, m_cairoFontSlant, m_cairoFontWeight); m_pCairoContext->move_to (x, y); m_pCairoContext->text_path (m_strSomeText); m_pCairoContext->set_font_size (0.2f); m_pCairoContext->text_extents (m_strSomeText, extents); x = 0.5f - (extents.width / 2.0f + extents.x_bearing); y = 0.5f - (extents.height / 2.0f + extents.y_bearing); m_pCairoContext->set_source_rgb (1.0f, 1.0f, 0.5f); m_pCairoContext->fill (); m_pCairoContext->move_to (x, y); m_pCairoContext->text_path (m_strSomeText); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::set_line_cap () { if (!m_pCairoContext) return false; draw_background (); // draw first (left-most) line, which the user can alter m_pCairoContext->set_source_rgb (0.3f, 0.3f, 0.3f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_line_cap (m_cairoCapStyle); m_pCairoContext->move_to (0.2f, 0.2); m_pCairoContext->line_to (0.2f, 0.8); m_pCairoContext->stroke (); // draw second line using a fixed line-cap style: round m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->set_line_width (0.12f); m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_ROUND); m_pCairoContext->move_to (0.4f, 0.2); m_pCairoContext->line_to (0.4f, 0.8); m_pCairoContext->stroke (); // draw third line using a fixed line-cap style: square m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_SQUARE); m_pCairoContext->move_to (0.6f, 0.2); m_pCairoContext->line_to (0.6f, 0.8); m_pCairoContext->stroke (); // draw fourth line using a fixed line-cap style: butt m_pCairoContext->set_line_cap (CAIRO_LINE_CAP_BUTT); m_pCairoContext->move_to (0.8f, 0.2); m_pCairoContext->line_to (0.8f, 0.8); m_pCairoContext->stroke (); // draw helping lines m_pCairoContext->set_line_width (0.005f); m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->move_to (0.2f, 0.2f); m_pCairoContext->line_to (0.2f, 0.8f); m_pCairoContext->move_to (0.4f, 0.2f); m_pCairoContext->line_to (0.4f, 0.8f); m_pCairoContext->move_to (0.6f, 0.2f); m_pCairoContext->line_to (0.6f, 0.8f); m_pCairoContext->move_to (0.8f, 0.2f); m_pCairoContext->line_to (0.8f, 0.8f); m_pCairoContext->stroke (); return true; } bool CairoSamples::set_line_join () { if (!m_pCairoContext) return false; draw_background (); // draw first (top-left) joint m_pCairoContext->set_source_rgb (0.3f, 0.3f, 0.3f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.125f, 0.475f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); m_pCairoContext->set_line_join (m_cairoJoinStyle); m_pCairoContext->stroke (); // draw second (top-right) joint using line-join style: miter m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->set_line_width (0.16f); m_pCairoContext->move_to (0.625f, 0.475f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); m_pCairoContext->set_line_join (CAIRO_LINE_JOIN_MITER); m_pCairoContext->stroke (); // draw third (bottom-left) joint using line-join style: bevel m_pCairoContext->move_to (0.125f, 0.925f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); m_pCairoContext->set_line_join (CAIRO_LINE_JOIN_BEVEL); m_pCairoContext->stroke (); // draw fourth (bottom-right) joint using line-join style: round m_pCairoContext->move_to (0.625f, 0.925f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); m_pCairoContext->set_line_join (CAIRO_LINE_JOIN_ROUND); m_pCairoContext->stroke (); // draw helping line (top-left) m_pCairoContext->set_line_width (0.005f); m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->move_to (0.125f, 0.475f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); // draw helping line (top-right) m_pCairoContext->move_to (0.625f, 0.475f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); // draw helping line (bottom-left) m_pCairoContext->move_to (0.125f, 0.925f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); // draw helping line (bottom-right) m_pCairoContext->move_to (0.625f, 0.925f); m_pCairoContext->rel_line_to (0.125f, -0.25f); m_pCairoContext->rel_line_to (0.125f, 0.25f); m_pCairoContext->stroke (); return true; } bool CairoSamples::text_align_center () { if (!m_pCairoContext) return false; draw_background (); // set font-attributes m_pCairoContext->select_font_face (m_strSomeText, m_cairoFontSlant, m_cairoFontWeight); m_pCairoContext->set_font_size (m_fFontSize); // get texts extents Cairo::TextExtents extents; m_pCairoContext->text_extents (m_strSomeText, extents); // determine center point double fX; double fY; fX = 0.5f - (extents.width / 2.0f + extents.x_bearing); fY = 0.5f - (extents.height / 2.0f + extents.y_bearing); // draw the solid black text m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->move_to (fX, fY); m_pCairoContext->show_text (m_strSomeText.c_str ()); // draw helping lines m_pCairoContext->set_line_width (0.005f); m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->move_to (0.5f, 0.0f); m_pCairoContext->rel_line_to (0.0f, 1.0f); m_pCairoContext->move_to (0.0f, 0.5f); m_pCairoContext->rel_line_to (1.0f, 0.0f); m_pCairoContext->stroke (); // draw handle draw_handle (fX, fY); return true; } bool CairoSamples::text () { if (!m_pCairoContext) return false; draw_background (); // set font-attributes m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->select_font_face (m_strFontFamily, m_cairoFontSlant, m_cairoFontWeight); m_pCairoContext->set_font_size (m_fFontSize); // draw the solid black text m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->move_to (0.04f, 0.53f); m_pCairoContext->show_text (m_strSomeText); // draw the blue colored text with black outlines m_pCairoContext->move_to (0.27f, 0.65f); m_pCairoContext->text_path (m_strSomeText); m_pCairoContext->set_source_rgb (0.5f, 0.5f, 1.0f); m_pCairoContext->fill_preserve (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->stroke (); // draw the two handle-points draw_handle (0.04f, 0.53f); draw_handle (0.27f, 0.65f); return true; } bool CairoSamples::text_extents () { if (!m_pCairoContext) return false; draw_background (); // set font-attributes m_pCairoContext->select_font_face (m_strFontFamily.c_str (), m_cairoFontSlant, m_cairoFontWeight); m_pCairoContext->set_font_size (m_fFontSize); // get texts extents Cairo::TextExtents extents; m_pCairoContext->text_extents (m_strSomeText.c_str (), extents); double fX = 0.1f; double fY = 0.6f; // draw the solid black text m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->move_to (fX, fY); m_pCairoContext->show_text (m_strSomeText.c_str ()); // draw helping lines m_pCairoContext->set_line_width (0.005f); m_pCairoContext->set_source_rgba (1.0f, 0.2f, 0.2f, 0.6f); m_pCairoContext->move_to (fX, fY); m_pCairoContext->rel_line_to (0.0f, -extents.height); m_pCairoContext->rel_line_to (extents.width, 0.0f); m_pCairoContext->rel_line_to (extents.x_bearing, -extents.y_bearing); m_pCairoContext->stroke (); // draw the handle-point draw_handle (fX, fY); return true; } bool CairoSamples::xxx_clip_rectangle () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->new_path (); m_pCairoContext->move_to (.25f, .25f); m_pCairoContext->line_to (.25f, .75f); m_pCairoContext->line_to (.75f, .75f); m_pCairoContext->line_to (.75f, .25f); m_pCairoContext->line_to (.25f, .25f); m_pCairoContext->close_path (); m_pCairoContext->clip (); m_pCairoContext->move_to (0.0f, 0.0f); m_pCairoContext->line_to (1.0f, 1.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::xxx_dash () { if (!m_pCairoContext) return false; draw_background (); double offset = -0.2f; std::valarray dashes (4); dashes[0] = 0.20f; /* ink */ dashes[1] = 0.05f; /* skip */ dashes[2] = 0.05f; /* ink */ dashes[3] = 0.05f; /* skip */ m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_line_cap (m_cairoCapStyle); m_pCairoContext->set_line_join (m_cairoJoinStyle); m_pCairoContext->set_dash (dashes, offset); m_pCairoContext->move_to (0.5f, 0.1f); m_pCairoContext->line_to (0.9f, 0.9f); m_pCairoContext->rel_line_to (-0.4f, 0.0f); m_pCairoContext->curve_to (0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::xxx_long_lines () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.1f, -50.0f); m_pCairoContext->line_to (0.1f, 50.0f); m_pCairoContext->set_source_rgb (1.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.2f, -60.0f); m_pCairoContext->line_to (0.2f, 60.0f); m_pCairoContext->set_source_rgb (1.0f, 1.0f, 0.0f); m_pCairoContext->stroke (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.3f, -70.0f); m_pCairoContext->line_to (0.3f, 70.0f); m_pCairoContext->set_source_rgb (0.0f, 1.0f, 0.0f); m_pCairoContext->stroke (); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->move_to (0.4f, -80.0f); m_pCairoContext->line_to (0.4f, 80.0f); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 1.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::xxx_multi_segment_caps () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->move_to (0.2f, 0.3f); m_pCairoContext->line_to (0.8f, 0.3f); m_pCairoContext->move_to (0.2f, 0.5f); m_pCairoContext->line_to (0.8f, 0.5f); m_pCairoContext->move_to (0.2f, 0.7f); m_pCairoContext->line_to (0.8f, 0.7f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_line_cap (m_cairoCapStyle); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } bool CairoSamples::xxx_self_intersect () { if (!m_pCairoContext) return false; draw_background (); m_pCairoContext->move_to (0.3f, 0.3f); m_pCairoContext->line_to (0.7f, 0.3f); m_pCairoContext->line_to (0.5f, 0.3f); m_pCairoContext->line_to (0.5f, 0.7f); m_pCairoContext->set_line_width (m_fLineWidth); m_pCairoContext->set_line_cap (m_cairoCapStyle); m_pCairoContext->set_line_join (m_cairoJoinStyle); m_pCairoContext->set_source_rgb (0.0f, 0.0f, 0.0f); m_pCairoContext->stroke (); return true; } @ 1.1 log @a little learning toy usable for testing out code-smidgens of cairo-effects @ text @d23 1 d61 2 d93 2 d147 1 a147 1 void CairoSamples::do_animation_step () d151 2 d246 1 a246 1 void CairoSamples::set_context (cairo_t* pCairoContext) d253 1 a253 1 cairo_scale (m_pCairoContext, fWidth, fHeight); d256 1 a256 1 void CairoSamples::set_bg_svg (std::string strSVGFileName) const d265 4 a268 4 cairo_save (m_pCairoContext); cairo_scale (m_pCairoContext, 1.0f / uiWidth, 1.0f / uiHeight); svg_cairo_render (pSVGContext, m_pCairoContext); cairo_restore (m_pCairoContext); d272 1 a272 1 bool CairoSamples::do_sample (Sample sample) const d282 4 d303 2 a304 1 bResult = image (); d308 2 a309 1 bResult = image_pattern (); d333 2 a334 1 bResult = moving_clip_image (); d349 4 d446 1 a446 1 bResult = sample_not_found (); d453 1 a453 1 void CairoSamples::set_cap_style (cairo_line_cap_t cairoCapStyle) d458 1 a458 1 void CairoSamples::set_join_style (cairo_line_join_t cairoJoinStyle) d468 1 a468 1 void CairoSamples::set_operator (cairo_operator_t cairoOperator) d473 1 a473 1 void CairoSamples::set_extend_mode (cairo_extend_t cairoExtendMode) d478 1 a478 1 void CairoSamples::set_filter_mode (cairo_filter_t cairoFilterMode) d503 1 a503 1 void CairoSamples::set_font_weight (cairo_font_weight_t cairoFontWeight) d508 1 a508 1 void CairoSamples::set_font_slant (cairo_font_slant_t cairoFontSlant) d541 1 a541 1 std::string CairoSamples::get_sample_name (Sample sample) const d568 1 a568 1 HandlePoint CairoSamples::get_center () const d573 1 a573 1 HandlePoint CairoSamples::get_point1 () const d578 1 a578 1 HandlePoint CairoSamples::get_point2 () const d583 1 a583 1 HandlePoint CairoSamples::get_point3 () const d588 1 a588 1 HandlePoint CairoSamples::get_point4 () const d593 1 a593 1 double CairoSamples::get_radius () const d598 1 a598 1 double CairoSamples::get_angle_1 () const d603 1 a603 1 double CairoSamples::get_angle_2 () const d608 1 a608 1 void CairoSamples::draw_background () const d621 3 a623 4 cairo_set_source_rgb (m_pCairoContext, m_bgColor.get_red_p (), m_bgColor.get_green_p (), m_bgColor.get_blue_p ()); d628 3 a630 4 cairo_set_source_rgb (m_pCairoContext, m_bgColor.get_red_p () - 0.1f, m_bgColor.get_green_p () - 0.1f, m_bgColor.get_blue_p () - 0.1f); d634 5 a638 6 cairo_rectangle (m_pCairoContext, iX * 0.05f, iY * 0.05f, 0.05f, 0.05f); cairo_fill (m_pCairoContext); d643 1 a643 1 void CairoSamples::draw_background (Gdk::Color color) const d645 6 a650 7 cairo_set_source_rgba (m_pCairoContext, color.get_red_p (), color.get_green_p (), color.get_blue_p (), 1.0f); cairo_rectangle (m_pCairoContext, 0.0f, 0.0f, 1.0f, 1.0f); cairo_fill (m_pCairoContext); d653 1 a653 1 void CairoSamples::draw_handle (HandlePoint* pPoint) const d661 1 a661 1 void CairoSamples::draw_handle (double fX, double fY) const d664 1 d669 6 a674 4 cairo_set_dash (m_pCairoContext, NULL, 0, 0.0f); cairo_set_line_width (m_pCairoContext, 0.002f); cairo_set_line_cap (m_pCairoContext, CAIRO_LINE_CAP_BUTT); cairo_set_line_join (m_pCairoContext, CAIRO_LINE_JOIN_ROUND); d677 3 a679 3 cairo_set_source_rgb (m_pCairoContext, 0.9f, 1.0f, 0.8f); cairo_arc (m_pCairoContext, fX, fY, fRadius, 0.0f, 2.0f * M_PI); cairo_stroke (m_pCairoContext); d682 3 a684 3 cairo_set_source_rgba (m_pCairoContext, 0.6f, 0.6f, 0.6f, 0.5f); cairo_arc (m_pCairoContext, fX, fY, fRadius, 0.0f, 2.0f * M_PI); cairo_fill (m_pCairoContext); d687 1 a687 1 bool CairoSamples::sample_not_found () const d692 4 a695 5 cairo_select_font_face (m_pCairoContext, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (m_pCairoContext, 0.115f); d700 3 a702 3 cairo_set_source_rgb (m_pCairoContext, 1.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, 0.04f, 0.53f); cairo_show_text (m_pCairoContext, "Sample not found!"); d707 1 a707 1 bool CairoSamples::curve_rectangle () const d725 1 a725 1 cairo_set_line_width (m_pCairoContext, m_fLineWidth); d734 5 a738 5 cairo_move_to (m_pCairoContext, x0, (y0 + y1) / 2.0f); cairo_curve_to (m_pCairoContext, x0 ,y0, x0, y0, (x0 + x1) / 2.0f, y0); cairo_curve_to (m_pCairoContext, x1, y0, x1, y0, x1, (y0 + y1) / 2.0f); cairo_curve_to (m_pCairoContext, x1, y1, x1, y1, (x1 + x0) / 2.0f, y1); cairo_curve_to (m_pCairoContext, x0, y1, x0, y1, x0, (y0 + y1) / 2.0f); d742 6 a747 6 cairo_move_to (m_pCairoContext, x0, y0 + radius); cairo_curve_to (m_pCairoContext, x0 ,y0, x0, y0, (x0 + x1) / 2.0f, y0); cairo_curve_to (m_pCairoContext, x1, y0, x1, y0, x1, y0 + radius); cairo_line_to (m_pCairoContext, x1 , y1 - radius); cairo_curve_to (m_pCairoContext, x1, y1, x1, y1, (x1 + x0) / 2.0f, y1); cairo_curve_to (m_pCairoContext, x0, y1, x0, y1, x0, y1- radius); d754 7 a760 7 cairo_move_to (m_pCairoContext, x0, (y0 + y1) / 2.0f); cairo_curve_to (m_pCairoContext, x0 , y0, x0 , y0, x0 + radius, y0); cairo_line_to (m_pCairoContext, x1 - radius, y0); cairo_curve_to (m_pCairoContext, x1, y0, x1, y0, x1, (y0 + y1) / 2.0f); cairo_curve_to (m_pCairoContext, x1, y1, x1, y1, x1 - radius, y1); cairo_line_to (m_pCairoContext, x0 + radius, y1); cairo_curve_to (m_pCairoContext, x0, y1, x0, y1, x0, (y0 + y1) / 2.0f); d764 8 a771 8 cairo_move_to (m_pCairoContext, x0, y0 + radius); cairo_curve_to (m_pCairoContext, x0 , y0, x0 , y0, x0 + radius, y0); cairo_line_to (m_pCairoContext, x1 - radius, y0); cairo_curve_to (m_pCairoContext, x1, y0, x1, y0, x1, y0 + radius); cairo_line_to (m_pCairoContext, x1 , y1 - radius); cairo_curve_to (m_pCairoContext, x1, y1, x1, y1, x1 - radius, y1); cairo_line_to (m_pCairoContext, x0 + radius, y1); cairo_curve_to (m_pCairoContext, x0, y1, x0, y1, x0, y1- radius); d774 62 a835 1 cairo_close_path (m_pCairoContext); d837 70 a906 4 cairo_set_source_rgb (m_pCairoContext, 0.5f, 0.5f, 1.0f); cairo_fill_preserve (m_pCairoContext); cairo_set_source_rgba (m_pCairoContext, 0.5f, 0.0f, 0.0f, 0.5f); cairo_stroke (m_pCairoContext); d911 1 a911 1 bool CairoSamples::fill_and_stroke () const d918 6 a923 6 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.5f, 0.1f); cairo_line_to (m_pCairoContext, 0.9f, 0.9f); cairo_rel_line_to (m_pCairoContext, -0.4f, 0.0f); cairo_curve_to (m_pCairoContext, 0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); cairo_close_path (m_pCairoContext); d925 4 a928 4 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_fill_preserve (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d933 1 a933 1 bool CairoSamples::fill_and_stroke2 () const d940 6 a945 6 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.5f, 0.1f); cairo_line_to (m_pCairoContext, 0.9f, 0.9f); cairo_rel_line_to (m_pCairoContext, -0.4f, 0.0f); cairo_curve_to (m_pCairoContext, 0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); cairo_close_path (m_pCairoContext); d947 5 a951 5 cairo_move_to (m_pCairoContext, 0.25f, 0.1f); cairo_rel_line_to (m_pCairoContext, 0.2f, 0.2f); cairo_rel_line_to (m_pCairoContext, -0.2f, 0.2f); cairo_rel_line_to (m_pCairoContext, -0.2f, -0.2f); cairo_close_path (m_pCairoContext); d953 4 a956 4 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_fill_preserve (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d961 1 a961 1 bool CairoSamples::fontmania () const d968 4 a971 5 cairo_select_font_face (m_pCairoContext, "Times New Roman", CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (m_pCairoContext, 0.6f); d974 3 a976 3 cairo_set_source_rgba (m_pCairoContext, 0.0f, 0.0f, 0.0f, 0.15f); cairo_move_to (m_pCairoContext, 0.05f, 0.6f); cairo_show_text (m_pCairoContext, theText.c_str ()); d979 4 a982 5 cairo_select_font_face (m_pCairoContext, "Arial Black", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (m_pCairoContext, 0.1f); d985 3 a987 3 cairo_set_source_rgba (m_pCairoContext, 0.0f, 0.0f, 0.0f, 1.0f); cairo_move_to (m_pCairoContext, 0.4f, 0.6f); cairo_show_text (m_pCairoContext, theText.c_str ()); d990 4 a993 5 cairo_select_font_face (m_pCairoContext, "Verdana", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (m_pCairoContext, 0.15f); d996 3 a998 3 cairo_set_source_rgba (m_pCairoContext, 0.0f, 0.0f, 0.0f, 0.25f); cairo_move_to (m_pCairoContext, 0.1f, 0.6f); cairo_show_text (m_pCairoContext, theText.c_str ()); d1001 4 a1004 5 cairo_select_font_face (m_pCairoContext, "Impact", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (m_pCairoContext, 0.2f); d1007 3 a1009 3 cairo_set_source_rgba (m_pCairoContext, 0.0f, 0.0f, 0.0f, 0.35f); cairo_move_to (m_pCairoContext, 0.3f, 0.6f); cairo_show_text (m_pCairoContext, theText.c_str ()); d1014 1 a1014 1 bool CairoSamples::gradient () const d1019 6 a1024 9 cairo_pattern_t* pPattern; pPattern = cairo_pattern_create_linear (0.0f, 0.0f, 0.0f, 1.0f); cairo_pattern_add_color_stop_rgba (pPattern, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); cairo_pattern_add_color_stop_rgba (pPattern, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.0f, 0.0f, 1.0f, 1.0f); cairo_set_source (m_pCairoContext, pPattern); cairo_fill (m_pCairoContext); cairo_pattern_destroy (pPattern); d1026 6 a1031 7 pPattern = cairo_pattern_create_radial (0.45f, 0.4f, 0.1f, 0.4f, 0.4f, 0.5f); cairo_pattern_add_color_stop_rgba (pPattern, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f); cairo_pattern_add_color_stop_rgba (pPattern, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f); cairo_set_source (m_pCairoContext, pPattern); cairo_arc (m_pCairoContext, 0.5f, 0.5f, 0.3f, 0.0f, 2.0f * M_PI); cairo_fill (m_pCairoContext); cairo_pattern_destroy (pPattern); d1036 1 a1036 1 bool CairoSamples::image () const d1042 2 d1047 4 a1050 1 cairo_surface_t* pImage; d1052 4 a1055 3 pImage = cairo_image_surface_create_from_png (m_strImageFileName.c_str ()); iWidth = cairo_image_surface_get_width (pImage); iHeight = cairo_image_surface_get_height (pImage); d1057 2 a1058 8 cairo_translate (m_pCairoContext, 0.5f, 0.5f); cairo_rotate (m_pCairoContext, 45.0f * M_PI / 180.0f); cairo_scale (m_pCairoContext, 1.0f / iWidth, 1.0f / iHeight); cairo_translate (m_pCairoContext, -0.5f * iWidth, -0.5f * iHeight); cairo_set_source_surface (m_pCairoContext, pImage, 0.0f, 0.0f); cairo_paint (m_pCairoContext); cairo_surface_destroy (pImage); d1063 1 a1063 1 bool CairoSamples::image_pattern () const d1072 14 a1085 16 cairo_surface_t* pImage; cairo_pattern_t* pPattern; cairo_matrix_t matrix; pImage = cairo_image_surface_create_from_png (m_strImageFileName.c_str ()); iWidth = cairo_image_surface_get_width (pImage); iHeight = cairo_image_surface_get_height (pImage); pPattern = cairo_pattern_create_for_surface (pImage); cairo_pattern_set_extend (pPattern, m_cairoExtendMode); cairo_pattern_set_filter (pPattern, m_cairoFilterMode); cairo_translate (m_pCairoContext, 0.5f, 0.5f); cairo_rotate (m_pCairoContext, M_PI / 4.0f); cairo_scale (m_pCairoContext, 1.0f / sqrt (2.0f), 1.0f / sqrt (2.0f)); cairo_translate (m_pCairoContext, - 0.5f, - 0.5f); d1088 1 a1088 3 cairo_pattern_set_matrix (pPattern, &matrix); cairo_set_source (m_pCairoContext, pPattern); d1090 1 a1090 2 cairo_rectangle (m_pCairoContext, 0.0f, 0.0f, 1.0f, 1.0f); cairo_fill (m_pCairoContext); d1092 2 a1093 2 cairo_pattern_destroy (pPattern); cairo_surface_destroy (pImage); d1098 1 a1098 1 bool CairoSamples::libsvg () const d1113 2 a1114 2 cairo_scale (m_pCairoContext, 1.0f / uiWidth, 1.0f / uiHeight); svg_cairo_render (pSVGContext, m_pCairoContext); d1121 1 a1121 1 bool CairoSamples::moving_arc () const d1138 8 a1145 9 cairo_set_line_width(m_pCairoContext, m_fLineWidth); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_arc (m_pCairoContext, center.x, center.y, fRadius, radiantAngle1, radiantAngle2); cairo_stroke (m_pCairoContext); d1148 7 a1154 7 cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_set_line_width (m_pCairoContext, 0.005f); cairo_move_to (m_pCairoContext, center.x, center.y); cairo_line_to (m_pCairoContext, firstHandle.x, firstHandle.y); cairo_move_to (m_pCairoContext, center.x, center.y); cairo_line_to (m_pCairoContext, secondHandle.x, secondHandle.y); cairo_stroke (m_pCairoContext); d1164 1 a1164 1 bool CairoSamples::moving_arc_negative () const d1181 8 a1188 9 cairo_set_line_width(m_pCairoContext, m_fLineWidth); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_arc_negative (m_pCairoContext, center.x, center.y, fRadius, radiantAngle1, radiantAngle2); cairo_stroke (m_pCairoContext); d1191 7 a1197 7 cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_set_line_width (m_pCairoContext, 0.005f); cairo_move_to (m_pCairoContext, center.x, center.y); cairo_line_to (m_pCairoContext, firstHandle.x, firstHandle.y); cairo_move_to (m_pCairoContext, center.x, center.y); cairo_line_to (m_pCairoContext, secondHandle.x, secondHandle.y); cairo_stroke (m_pCairoContext); d1207 1 a1207 1 bool CairoSamples::moving_cairo_logo () const d1223 1 a1223 1 cairo_scale (m_pCairoContext, 1.0f / uiWidth, 1.0f / uiHeight); d1226 3 a1228 1 cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 160.0f); d1231 3 a1233 3 cairo_set_matrix (m_pCairoContext, &matrix); cairo_paint_with_alpha (m_pCairoContext, 0.1f); svg_cairo_render (pSVGContext, m_pCairoContext); d1236 3 a1238 1 cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 120.0f); d1241 3 a1243 3 cairo_set_matrix (m_pCairoContext, &matrix); cairo_paint_with_alpha (m_pCairoContext, 0.2f); svg_cairo_render (pSVGContext, m_pCairoContext); d1246 3 a1248 1 cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 80.0f); d1251 3 a1253 3 cairo_set_matrix (m_pCairoContext, &matrix); cairo_paint_with_alpha (m_pCairoContext, 0.3f); svg_cairo_render (pSVGContext, m_pCairoContext); d1256 3 a1258 1 cairo_matrix_translate (&matrix, uiWidth * offset.x, uiHeight * offset.y - 40.0f); d1261 3 a1263 3 cairo_set_matrix (m_pCairoContext, &matrix); cairo_paint_with_alpha (m_pCairoContext, 0.4f); svg_cairo_render (pSVGContext, m_pCairoContext); d1269 3 a1271 3 cairo_set_matrix (m_pCairoContext, &matrix); cairo_paint_with_alpha (m_pCairoContext, 0.5f); svg_cairo_render (pSVGContext, m_pCairoContext); d1278 1 a1278 1 bool CairoSamples::moving_clip () const d1291 3 a1293 3 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_arc (m_pCairoContext, center.x, center.y, fRadius, 0.0f, 2.0f * M_PI); cairo_clip (m_pCairoContext); d1297 3 a1299 3 cairo_new_path (m_pCairoContext); cairo_rectangle (m_pCairoContext, 0.0f, 0.0f, 1.0f, 1.0f); cairo_fill (m_pCairoContext); d1302 7 a1308 7 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_move_to (m_pCairoContext, 0.0f, 0.0f); cairo_line_to (m_pCairoContext, 1.0f, 1.0f); cairo_move_to (m_pCairoContext, 1.0f, 0.0f); cairo_line_to (m_pCairoContext, 0.0f, 1.0f); cairo_stroke (m_pCairoContext); d1317 1 a1317 1 bool CairoSamples::moving_clip_image () const d1324 1 a1324 1 cairo_surface_t* pImage; d1333 2 a1334 2 cairo_arc (m_pCairoContext, center.x, center.y, fRadius, 0.0f, 2.0f * M_PI); cairo_clip (m_pCairoContext); d1337 4 a1340 4 cairo_new_path (m_pCairoContext); pImage = cairo_image_surface_create_from_png (m_strImageFileName.c_str ()); iWidth = cairo_image_surface_get_width (pImage); iHeight = cairo_image_surface_get_height (pImage); d1342 1 a1342 1 cairo_scale (m_pCairoContext, 1.0f / iWidth, 1.0f / iHeight); d1344 2 a1345 2 cairo_set_source_surface (m_pCairoContext, pImage, 0.0f, 0.0f); cairo_paint (m_pCairoContext); d1347 1 a1347 1 cairo_surface_destroy (pImage); d1349 1 a1349 1 cairo_scale (m_pCairoContext, iWidth, iHeight); d1358 1 a1358 1 bool CairoSamples::moving_curve_to () const d1373 7 a1379 11 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, points[0].x, points[0].y); cairo_curve_to (m_pCairoContext, points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y); cairo_stroke (m_pCairoContext); d1382 7 a1388 7 cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_set_line_width (m_pCairoContext, 0.005f); cairo_move_to (m_pCairoContext, points[0].x, points[0].y); cairo_line_to (m_pCairoContext, points[1].x, points[1].y); cairo_move_to (m_pCairoContext, points[2].x, points[2].y); cairo_line_to (m_pCairoContext, points[3].x, points[3].y); cairo_stroke (m_pCairoContext); d1399 1 a1399 1 bool CairoSamples::moving_gradient () const d1411 6 a1416 9 cairo_pattern_t* pPattern; pPattern = cairo_pattern_create_radial (center.x, center.y, fRadius, 0.5f, 0.5f, 0.5f); cairo_pattern_add_color_stop_rgba (pPattern, 0.0f, 1.0f, 1.0f, 0.1f, 0.85f); cairo_pattern_add_color_stop_rgba (pPattern, 1.0f, 0.7f, 0.1f, 0.1f, 1.0f); cairo_set_source (m_pCairoContext, pPattern); cairo_arc (m_pCairoContext, 0.5f, 0.5f, 0.3f, 0.0f, 2.0f * M_PI); cairo_fill (m_pCairoContext); cairo_pattern_destroy (pPattern); d1425 1 a1425 1 bool CairoSamples::moving_gradient2 () const d1435 11 a1445 17 cairo_pattern_t* pPattern; pPattern = cairo_pattern_create_linear (handle1.x, handle1.y, handle2.x, handle2.y); cairo_pattern_set_filter (pPattern, m_cairoFilterMode); cairo_pattern_set_extend (pPattern, m_cairoExtendMode); cairo_pattern_add_color_stop_rgba (pPattern, 0.0f, 1.0f, 1.0f, 0.5f, 1.0f); cairo_pattern_add_color_stop_rgba (pPattern, 0.1f, 0.3f, 1.0f, 0.8f, 0.5f); cairo_pattern_add_color_stop_rgba (pPattern, 0.5f, 1.0f, 0.0f, 0.7f, 1.0f); cairo_pattern_add_color_stop_rgba (pPattern, 0.9f, 0.6f, 0.0f, 1.0f, 0.1f); cairo_pattern_add_color_stop_rgba (pPattern, 1.0f, 0.2f, 0.5f, 1.0f, 1.0f); cairo_set_source (m_pCairoContext, pPattern); cairo_rectangle (m_pCairoContext, 0.0f, 0.0f, 1.0f, 1.0f); cairo_fill (m_pCairoContext); cairo_pattern_destroy (pPattern); d1454 31 a1484 1 bool CairoSamples::operator_add () const d1492 10 a1501 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_ADD); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1506 1 a1506 1 bool CairoSamples::operator_atop () const d1514 10 a1523 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_ATOP); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1528 1 a1528 1 bool CairoSamples::operator_atop_reverse () const d1536 10 a1545 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_DEST_ATOP); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1550 1 a1550 1 bool CairoSamples::operator_in () const d1558 10 a1567 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_IN); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1572 1 a1572 1 bool CairoSamples::operator_in_reverse () const d1580 10 a1589 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_DEST_IN); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1594 1 a1594 1 bool CairoSamples::operator_out () const d1602 10 a1611 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_OUT); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1616 1 a1616 1 bool CairoSamples::operator_out_reverse () const d1624 10 a1633 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_DEST_OUT); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1638 1 a1638 1 bool CairoSamples::operator_over () const d1646 10 a1655 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_OVER); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1660 1 a1660 1 bool CairoSamples::operator_over_reverse () const d1668 10 a1677 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_DEST_OVER); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1682 1 a1682 1 bool CairoSamples::operator_saturate () const d1690 10 a1699 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_SATURATE); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1704 1 a1704 1 bool CairoSamples::operator_xor () const d1712 10 a1721 10 cairo_set_operator (m_pCairoContext, CAIRO_OPERATOR_XOR); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.0f, 0.0f, 0.5f); cairo_rectangle (m_pCairoContext, 0.2f, 0.2f, 0.5f, 0.5f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_rectangle (m_pCairoContext, 0.4f, 0.4f, 0.4f, 0.4f); cairo_fill (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_rectangle (m_pCairoContext, 0.6f, 0.6f, 0.3f, 0.3f); cairo_fill (m_pCairoContext); d1726 1 a1726 1 bool CairoSamples::path () const d1733 6 a1738 6 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, 0.5f, 0.1f); cairo_line_to (m_pCairoContext, 0.9f, 0.9f); cairo_rel_line_to (m_pCairoContext, -0.4f, 0.0f); cairo_curve_to (m_pCairoContext, 0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); d1740 1 a1740 1 cairo_stroke (m_pCairoContext); d1745 1 a1745 1 bool CairoSamples::pattern_fill () const d1766 1 a1766 1 cairo_text_extents_t extents; d1769 1 a1769 1 cairo_set_line_width (m_pCairoContext, m_fLineWidth); d1779 1 a1779 1 cairo_move_to (m_pCairoContext, x, y); d1781 1 a1781 1 cairo_line_to (m_pCairoContext, x, y); d1790 1 a1790 1 cairo_line_to (m_pCairoContext, x, y); d1793 7 a1799 8 cairo_close_path (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 1.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); cairo_select_font_face (m_pCairoContext, m_strFontFamily.c_str (), m_cairoFontSlant, m_cairoFontWeight); d1801 2 a1802 2 cairo_move_to (m_pCairoContext, x, y); cairo_text_path (m_pCairoContext, m_strSomeText.c_str ()); d1804 2 a1805 2 cairo_set_font_size (m_pCairoContext, 0.2f); cairo_text_extents (m_pCairoContext, m_strSomeText.c_str (), &extents); d1809 2 a1810 2 cairo_set_source_rgb (m_pCairoContext, 1.0f, 1.0f, 0.5f); cairo_fill (m_pCairoContext); d1812 4 a1815 4 cairo_move_to (m_pCairoContext, x, y); cairo_text_path (m_pCairoContext, m_strSomeText.c_str ()); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d1820 1 a1820 1 bool CairoSamples::set_line_cap () const d1828 6 a1833 6 cairo_set_source_rgb (m_pCairoContext, 0.3f, 0.3f, 0.3f); cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_line_cap (m_pCairoContext, m_cairoCapStyle); cairo_move_to (m_pCairoContext, 0.2f, 0.2); cairo_line_to (m_pCairoContext, 0.2f, 0.8); cairo_stroke (m_pCairoContext); d1836 6 a1841 6 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_set_line_width (m_pCairoContext, 0.12f); cairo_set_line_cap (m_pCairoContext, CAIRO_LINE_CAP_ROUND); cairo_move_to (m_pCairoContext, 0.4f, 0.2); cairo_line_to (m_pCairoContext, 0.4f, 0.8); cairo_stroke (m_pCairoContext); d1844 4 a1847 4 cairo_set_line_cap (m_pCairoContext, CAIRO_LINE_CAP_SQUARE); cairo_move_to (m_pCairoContext, 0.6f, 0.2); cairo_line_to (m_pCairoContext, 0.6f, 0.8); cairo_stroke (m_pCairoContext); d1850 4 a1853 4 cairo_set_line_cap (m_pCairoContext, CAIRO_LINE_CAP_BUTT); cairo_move_to (m_pCairoContext, 0.8f, 0.2); cairo_line_to (m_pCairoContext, 0.8f, 0.8); cairo_stroke (m_pCairoContext); d1856 11 a1866 11 cairo_set_line_width (m_pCairoContext, 0.005f); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_move_to (m_pCairoContext, 0.2f, 0.2f); cairo_line_to (m_pCairoContext, 0.2f, 0.8f); cairo_move_to (m_pCairoContext, 0.4f, 0.2f); cairo_line_to (m_pCairoContext, 0.4f, 0.8f); cairo_move_to (m_pCairoContext, 0.6f, 0.2f); cairo_line_to (m_pCairoContext, 0.6f, 0.8f); cairo_move_to (m_pCairoContext, 0.8f, 0.2f); cairo_line_to (m_pCairoContext, 0.8f, 0.8f); cairo_stroke (m_pCairoContext); d1871 1 a1871 1 bool CairoSamples::set_line_join () const d1879 7 a1885 7 cairo_set_source_rgb (m_pCairoContext, 0.3f, 0.3f, 0.3f); cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.125f, 0.475f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); cairo_set_line_join (m_pCairoContext, m_cairoJoinStyle); cairo_stroke (m_pCairoContext); d1888 7 a1894 7 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_set_line_width (m_pCairoContext, 0.16f); cairo_move_to (m_pCairoContext, 0.625f, 0.475f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); cairo_set_line_join (m_pCairoContext, CAIRO_LINE_JOIN_MITER); cairo_stroke (m_pCairoContext); d1897 5 a1901 5 cairo_move_to (m_pCairoContext, 0.125f, 0.925f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); cairo_set_line_join (m_pCairoContext, CAIRO_LINE_JOIN_BEVEL); cairo_stroke (m_pCairoContext); d1904 5 a1908 5 cairo_move_to (m_pCairoContext, 0.625f, 0.925f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); cairo_set_line_join (m_pCairoContext, CAIRO_LINE_JOIN_ROUND); cairo_stroke (m_pCairoContext); d1911 5 a1915 5 cairo_set_line_width (m_pCairoContext, 0.005f); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_move_to (m_pCairoContext, 0.125f, 0.475f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); d1918 3 a1920 3 cairo_move_to (m_pCairoContext, 0.625f, 0.475f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); d1923 3 a1925 3 cairo_move_to (m_pCairoContext, 0.125f, 0.925f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); d1928 3 a1930 3 cairo_move_to (m_pCairoContext, 0.625f, 0.925f); cairo_rel_line_to (m_pCairoContext, 0.125f, -0.25f); cairo_rel_line_to (m_pCairoContext, 0.125f, 0.25f); d1932 1 a1932 1 cairo_stroke (m_pCairoContext); d1937 1 a1937 1 bool CairoSamples::text_align_center () const d1945 4 a1948 5 cairo_select_font_face (m_pCairoContext, m_strSomeText.c_str (), m_cairoFontSlant, m_cairoFontWeight); cairo_set_font_size (m_pCairoContext, m_fFontSize); d1951 2 a1952 2 cairo_text_extents_t extents; cairo_text_extents (m_pCairoContext, m_strSomeText.c_str (), &extents); d1961 3 a1963 3 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, fX, fY); cairo_show_text (m_pCairoContext, m_strSomeText.c_str ()); d1966 7 a1972 7 cairo_set_line_width (m_pCairoContext, 0.005f); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_move_to (m_pCairoContext, 0.5f, 0.0f); cairo_rel_line_to (m_pCairoContext, 0.0f, 1.0f); cairo_move_to (m_pCairoContext, 0.0f, 0.5f); cairo_rel_line_to (m_pCairoContext, 1.0f, 0.0f); cairo_stroke (m_pCairoContext); d1980 1 a1980 1 bool CairoSamples::text () const d1988 5 a1992 6 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_select_font_face (m_pCairoContext, m_strFontFamily.c_str (), m_cairoFontSlant, m_cairoFontWeight); cairo_set_font_size (m_pCairoContext, m_fFontSize); d1995 3 a1997 3 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, 0.04f, 0.53f); cairo_show_text (m_pCairoContext, m_strSomeText.c_str ()); d2000 7 a2006 7 cairo_move_to (m_pCairoContext, 0.27f, 0.65f); cairo_text_path (m_pCairoContext, m_strSomeText.c_str ()); cairo_set_source_rgb (m_pCairoContext, 0.5f, 0.5f, 1.0f); cairo_fill_preserve (m_pCairoContext); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_stroke (m_pCairoContext); d2015 1 a2015 1 bool CairoSamples::text_extents () const d2023 4 a2026 5 cairo_select_font_face (m_pCairoContext, m_strFontFamily.c_str (), m_cairoFontSlant, m_cairoFontWeight); cairo_set_font_size (m_pCairoContext, m_fFontSize); d2029 2 a2030 2 cairo_text_extents_t extents; cairo_text_extents (m_pCairoContext, m_strSomeText.c_str (), &extents); d2036 3 a2038 3 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_move_to (m_pCairoContext, fX, fY); cairo_show_text (m_pCairoContext, m_strSomeText.c_str ()); d2041 7 a2047 7 cairo_set_line_width (m_pCairoContext, 0.005f); cairo_set_source_rgba (m_pCairoContext, 1.0f, 0.2f, 0.2f, 0.6f); cairo_move_to (m_pCairoContext, fX, fY); cairo_rel_line_to (m_pCairoContext, 0.0f, -extents.height); cairo_rel_line_to (m_pCairoContext, extents.width, 0.0f); cairo_rel_line_to (m_pCairoContext, extents.x_bearing, -extents.y_bearing); cairo_stroke (m_pCairoContext); d2055 1 a2055 1 bool CairoSamples::xxx_clip_rectangle () const d2062 9 a2070 9 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_new_path (m_pCairoContext); cairo_move_to (m_pCairoContext, .25f, .25f); cairo_line_to (m_pCairoContext, .25f, .75f); cairo_line_to (m_pCairoContext, .75f, .75f); cairo_line_to (m_pCairoContext, .75f, .25f); cairo_line_to (m_pCairoContext, .25f, .25f); cairo_close_path (m_pCairoContext); d2072 1 a2072 1 cairo_clip (m_pCairoContext); d2074 3 a2076 3 cairo_move_to (m_pCairoContext, 0.0f, 0.0f); cairo_line_to (m_pCairoContext, 1.0f, 1.0f); cairo_stroke (m_pCairoContext); d2081 1 a2081 1 bool CairoSamples::xxx_dash () const a2087 6 double dashes[] = {0.20f, /* ink */ 0.05f, /* skip */ 0.05f, /* ink */ 0.05f /* skip*/}; int ndash = sizeof (dashes)/sizeof(dashes[0]); d2089 5 d2095 4 a2098 4 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_line_cap (m_pCairoContext, m_cairoCapStyle); cairo_set_line_join (m_pCairoContext, m_cairoJoinStyle); cairo_set_dash (m_pCairoContext, dashes, ndash, offset); d2100 4 a2103 4 cairo_move_to (m_pCairoContext, 0.5f, 0.1f); cairo_line_to (m_pCairoContext, 0.9f, 0.9f); cairo_rel_line_to (m_pCairoContext, -0.4f, 0.0f); cairo_curve_to (m_pCairoContext, 0.2f, 0.9f, 0.2f, 0.5f, 0.5f, 0.5f); d2105 2 a2106 2 cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d2111 1 a2111 1 bool CairoSamples::xxx_long_lines () const d2118 5 a2122 5 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.1f, -50.0f); cairo_line_to (m_pCairoContext, 0.1f, 50.0f); cairo_set_source_rgb (m_pCairoContext, 1.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d2124 5 a2128 5 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.2f, -60.0f); cairo_line_to (m_pCairoContext, 0.2f, 60.0f); cairo_set_source_rgb (m_pCairoContext, 1.0f, 1.0f, 0.0f); cairo_stroke (m_pCairoContext); d2130 5 a2134 5 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.3f, -70.0f); cairo_line_to (m_pCairoContext, 0.3f, 70.0f); cairo_set_source_rgb (m_pCairoContext, 0.0f, 1.0f, 0.0f); cairo_stroke (m_pCairoContext); d2136 5 a2140 5 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_move_to (m_pCairoContext, 0.4f, -80.0f); cairo_line_to (m_pCairoContext, 0.4f, 80.0f); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 1.0f); cairo_stroke (m_pCairoContext); d2145 1 a2145 1 bool CairoSamples::xxx_multi_segment_caps () const d2152 2 a2153 2 cairo_move_to (m_pCairoContext, 0.2f, 0.3f); cairo_line_to (m_pCairoContext, 0.8f, 0.3f); d2155 2 a2156 2 cairo_move_to (m_pCairoContext, 0.2f, 0.5f); cairo_line_to (m_pCairoContext, 0.8f, 0.5f); d2158 2 a2159 2 cairo_move_to (m_pCairoContext, 0.2f, 0.7f); cairo_line_to (m_pCairoContext, 0.8f, 0.7f); d2161 4 a2164 4 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_line_cap (m_pCairoContext, m_cairoCapStyle); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); d2169 1 a2169 1 bool CairoSamples::xxx_self_intersect () const d2176 2 a2177 2 cairo_move_to (m_pCairoContext, 0.3f, 0.3f); cairo_line_to (m_pCairoContext, 0.7f, 0.3f); d2179 2 a2180 2 cairo_line_to (m_pCairoContext, 0.5f, 0.3f); cairo_line_to (m_pCairoContext, 0.5f, 0.7f); d2182 5 a2186 5 cairo_set_line_width (m_pCairoContext, m_fLineWidth); cairo_set_line_cap (m_pCairoContext, m_cairoCapStyle); cairo_set_line_join (m_pCairoContext, m_cairoJoinStyle); cairo_set_source_rgb (m_pCairoContext, 0.0f, 0.0f, 0.0f); cairo_stroke (m_pCairoContext); @