📄 gtk_transition.cpp
字号:
setup_transition(m_outtrans, agw, &opm, &npm); uint n_points = m_newpolygon.size(); if (n_points <= 2) { // cannot create polygon, maybe not yet implemented return; } GdkPoint* points = (GdkPoint*) malloc (n_points*sizeof(GdkPoint)); uint idx = 0; std::vector<point>::iterator newpoint; for( newpoint=m_newpolygon.begin(); newpoint != m_newpolygon.end(); newpoint++) { point p = *newpoint + dst_global_topleft; points[idx].x = p.x; points[idx].y = p.y; idx++; } GdkRegion* region = gdk_region_polygon(points, n_points, GDK_WINDING_RULE); free(points); GdkGC *gc = gdk_gc_new (opm); gdk_gc_set_clip_region(gc, region); const rect& newrect_whole = m_dst->get_clipped_screen_rect(); int Ldst= newrect_whole.left(), Tdst = newrect_whole.top(), Wdst = newrect_whole.width(), Hdst = newrect_whole.height(); AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_poly::update(): ltwh=(%d,%d,%d,%d)",Ldst,Tdst,Wdst,Hdst); gdk_draw_pixmap(opm, gc, npm, Ldst, Tdst, Ldst, Tdst, Wdst, Hdst); gdk_region_destroy(region); g_object_unref (G_OBJECT (gc)); finalize_transition(m_outtrans, agw, m_dst);}voidgtk_transition_blitclass_polylist::update(){ AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_polylist::update(%f)", m_progress); ambulant_gtk_window *agw = (ambulant_gtk_window *)m_dst->get_gui_window(); GdkPixmap *npm, *opm; const lib::point& dst_global_topleft = m_dst->get_global_topleft(); setup_transition(m_outtrans, agw, &opm, &npm); GdkRegion* clip_region = gdk_region_new(); AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_polylist: m_newpolygonlist.size()=%d", m_newpolygonlist.size()); std::vector< std::vector<point> >::iterator partpolygon; for (partpolygon=m_newpolygonlist.begin(); partpolygon!=m_newpolygonlist.end(); partpolygon++) { uint n_points = partpolygon->size(); if (n_points <= 2) { // cannot create polygon logger::get_logger()->warn("gtk_transition_blitclass_polylist: cannot create polygon, partpolygon.size()=%d", n_points); break; } GdkPoint* points = (GdkPoint*) malloc (n_points*sizeof(GdkPoint)); uint idx = 0; std::vector<point>::iterator newpoint; AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_polylist: partpolygon.size()=%d", partpolygon->size()); for( newpoint=partpolygon->begin(); newpoint != partpolygon->end(); newpoint++) { point p = *newpoint + dst_global_topleft; points[idx].x = p.x; points[idx].y = p.y; idx++; AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_polylist: idx=%d, p=(%d,%d)", idx, p.x, p.y); } GdkRegion* next_region = gdk_region_polygon(points, n_points, GDK_WINDING_RULE); free(points); gdk_region_union (clip_region, next_region); gdk_region_destroy(next_region); } rect newrect_whole = m_dst->get_rect(); newrect_whole.translate(dst_global_topleft); newrect_whole &= m_dst->get_clipped_screen_rect(); int Ldst= newrect_whole.left(), Tdst = newrect_whole.top(), Wdst = newrect_whole.width(), Hdst = newrect_whole.height(); AM_DBG logger::get_logger()->debug("gtk_transition_blitclass_polylist::update(): ltwh=(%d,%d,%d,%d)",Ldst,Tdst,Wdst,Hdst); GdkGC *gc = gdk_gc_new (opm); gdk_gc_set_clip_region(gc, clip_region); gdk_draw_pixmap(opm, gc, npm, Ldst, Tdst, Ldst, Tdst, Wdst, Hdst); gdk_region_destroy(clip_region); g_object_unref (G_OBJECT (gc)); finalize_transition(m_outtrans, agw, m_dst);}smil2::transition_engine *gtk_transition_engine(common::surface *dst, bool is_outtrans, const transition_info *info){ smil2::transition_engine *rv; AM_DBG logger::get_logger()->debug("gtk_transition_engine: info=0x%x info->m_type=%d", info, info->m_type); switch(info->m_type) { // Series 1: edge wipes case barWipe: rv = new gtk_transition_engine_barwipe(); break; case boxWipe: rv = new gtk_transition_engine_boxwipe(); break; case fourBoxWipe: rv = new gtk_transition_engine_fourboxwipe(); break; case barnDoorWipe: rv = new gtk_transition_engine_barndoorwipe(); break; case diagonalWipe: rv = new gtk_transition_engine_diagonalwipe(); break; case miscDiagonalWipe: rv = new gtk_transition_engine_miscdiagonalwipe(); break; case veeWipe: rv = new gtk_transition_engine_veewipe(); break; case barnVeeWipe: rv = new gtk_transition_engine_barnveewipe(); break; case zigZagWipe: rv = new gtk_transition_engine_zigzagwipe(); break; case barnZigZagWipe: rv = new gtk_transition_engine_barnzigzagwipe(); break; case bowTieWipe: rv = new gtk_transition_engine_bowtiewipe(); break; // series 2: iris wipes case irisWipe: rv = new gtk_transition_engine_iriswipe(); break; case pentagonWipe: rv = new gtk_transition_engine_pentagonwipe(); break; case arrowHeadWipe: rv = new gtk_transition_engine_arrowheadwipe(); break; case triangleWipe: rv = new gtk_transition_engine_trianglewipe(); break; case hexagonWipe: rv = new gtk_transition_engine_hexagonwipe(); break; case eyeWipe: rv = new gtk_transition_engine_eyewipe(); break; case roundRectWipe: rv = new gtk_transition_engine_roundrectwipe(); break; case ellipseWipe: rv = new gtk_transition_engine_ellipsewipe(); break; case starWipe: rv = new gtk_transition_engine_starwipe(); break; case miscShapeWipe: rv = new gtk_transition_engine_miscshapewipe(); break; // series 3: clock-type wipes case clockWipe: rv = new gtk_transition_engine_clockwipe(); break; case singleSweepWipe: rv = new gtk_transition_engine_singlesweepwipe(); break; case doubleSweepWipe: rv = new gtk_transition_engine_doublesweepwipe(); break; case saloonDoorWipe: rv = new gtk_transition_engine_saloondoorwipe(); break; case windshieldWipe: rv = new gtk_transition_engine_windshieldwipe(); break; case fanWipe: rv = new gtk_transition_engine_fanwipe(); break; case doubleFanWipe: rv = new gtk_transition_engine_doublefanwipe(); break; case pinWheelWipe: rv = new gtk_transition_engine_pinwheelwipe(); break; // series 4: matrix wipe types case snakeWipe: rv = new gtk_transition_engine_snakewipe(); break; case waterfallWipe: rv = new gtk_transition_engine_waterfallwipe(); break; case spiralWipe: rv = new gtk_transition_engine_spiralwipe(); break; case parallelSnakesWipe: rv = new gtk_transition_engine_parallelsnakeswipe(); break; case boxSnakesWipe: rv = new gtk_transition_engine_boxsnakeswipe(); break; // series 5: SMIL-specific types case pushWipe: rv = new gtk_transition_engine_pushwipe(); break; case slideWipe: rv = new gtk_transition_engine_slidewipe(); break; case fade: rv = new gtk_transition_engine_fade(); break; default: logger::get_logger()->warn("gtk_transition_engine: transition type %s not yet implemented", repr(info->m_type).c_str()); rv = NULL; } if (rv) rv->init(dst, is_outtrans, info); return rv;}} // namespace gtk} // namespace gui} //namespace ambulant
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -