⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qt_transition.cpp

📁 彩信浏览器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// This file is part of Ambulant Player, www.ambulantplayer.org.//// Copyright (C) 2003-2007 Stichting CWI, // Kruislaan 413, 1098 SJ Amsterdam, The Netherlands.//// Ambulant Player is free software; you can redistribute it and/or modify// it under the terms of the GNU Lesser General Public License as published by// the Free Software Foundation; either version 2.1 of the License, or// (at your option) any later version.//// Ambulant Player 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 Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public License// along with Ambulant Player; if not, write to the Free Software// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA/*  * @$Id: qt_transition.cpp,v 1.35 2007/02/12 14:15:00 jackjansen Exp $  */#include "ambulant/gui/qt/qt_includes.h"#include "ambulant/gui/qt/qt_renderer.h"#include "ambulant/gui/qt/qt_transition.h"#include "ambulant/lib/colors.h"#include "ambulant/lib/logger.h"//#define AM_DBG#ifndef AM_DBG#define AM_DBG if(0)#endifnamespace ambulant {using namespace lib;namespace gui {namespace qt {void qt_transition_debug::paint_rect(ambulant_qt_window* aqw, // TMP	   common::surface * dst,	   color_t color) {	const rect& dstrect_whole = dst->get_clipped_screen_rect();	QPainter paint;	paint.begin(aqw->get_ambulant_pixmap());	int L = dstrect_whole.left(),	T = dstrect_whole.top(),	W = dstrect_whole.width(),	H = dstrect_whole.height();	// XXXX Fill with background color	AM_DBG logger::get_logger()->debug(				  "qt_transition_debug::paint_rect:"				  " %s0x%x,%s(%d,%d,%d,%d)",				  " clearing to ", (long)color, 				  " local_ltwh=",L,T,W,H);	QColor bgc = QColor(redc(color),			    greenc(color),			    bluec(color));	paint.setBrush(bgc);	paint.drawRect(L,T,W,H);	paint.flush();	paint.end();}// Helper functions to setup transitionsstatic voidsetup_transition(bool outtrans, ambulant_qt_window *aqw, QPixmap** oldpxmp, QPixmap** newpxmp){	if (outtrans) {		if (aqw->m_tmppixmap == NULL) {			// make a copy			aqw->m_tmppixmap = new QPixmap(*aqw->get_ambulant_oldpixmap());		}		*oldpxmp = aqw->get_ambulant_surface();		*newpxmp = aqw->m_tmppixmap;	} else {		*oldpxmp = aqw->get_ambulant_pixmap();		*newpxmp = aqw->get_ambulant_surface();	}}static voidfinalize_transition(bool outtrans, ambulant_qt_window *aqw,  common::surface *dest){	if (outtrans) {		// copy the pixels in m_tmppixmap to the on-screen pixmap		QPixmap* dest_pixmap = aqw->get_ambulant_pixmap();		QPixmap* temp_pixmap = aqw->get_ambulant_surface();		const lib::rect& r = dest->get_clipped_screen_rect();		AM_DBG logger::get_logger()->debug("finalize_transition: dest_pixmap=0x%x: temp_pixmap=0x%x (L,T,W,H)=(%d,%d,%d,%d)", dest_pixmap, temp_pixmap,r.left(),r.top(),r.width(), r.height());		bitBlt(dest_pixmap,r.left(),r.top(), temp_pixmap,r.left(),r.top(),r.width(), r.height());	}}voidqt_transition_blitclass_fade::update(){        AM_DBG logger::get_logger()->debug("qt_transition_blitclass_fade::update(%f)", m_progress);	ambulant_qt_window *aqw = (ambulant_qt_window *)m_dst->get_gui_window();	QPixmap *npm, *qpm;	setup_transition(m_outtrans, aqw, &qpm, &npm);	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_fade::update(%f) qpm(%d,%d),npm(%d,%d)", m_progress, qpm->width(),  qpm->height(), npm->width(), npm->height());	QImage m_old_image;	QImage m_new_image;	m_old_image = qpm->convertToImage();	m_new_image = npm->convertToImage();	QImage res(m_old_image.size(),m_old_image.depth());	int i, j, iw = res.width(), ih = res.height();	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_fade::update() qpm=0x%x, npm=0x%x.  res=0x%x, iw=%d, ih=%d", qpm, npm, &res, iw, ih);	// Following code From: Qt-interest Archive, July 2002	// blending of qpixmaps, Sebastian Loebbert #define	OPTIM#ifndef	OPTIM	double fac1 = 1.0 - m_progress;	double fac2 = 1.0 - fac1;#else /*OPTIM*/	unsigned int mul1 = 255 - (unsigned int) (m_progress * 255);	unsigned int mul2 = 255 - mul1;#endif/*OPTIM*/	for(int i = 0;i < iw;i++){		for(int j = 0; j < ih;j++){	    		QRgb p1 = m_old_image.pixel(i,j);	    		QRgb p2 = m_new_image.pixel(i,j);	    		res.setPixel(i,j,#ifndef	OPTIM				     qRgb ( (int)( qRed(p1)*fac1 + 						   qRed(p2)*fac2  ),					    (int)( qGreen(p1)*fac1 + 						   qGreen(p2)*fac2  ),					    (int)( qBlue(p1)*fac1 + 						   qBlue(p2)*fac2  ) )#else /*OPTIM*/				     qRgb ( ( qRed(p1)*mul1 + 					      qRed(p2)*mul2  ) >> 8,					    ( qGreen(p1)*mul1 +					      qGreen(p2)*mul2  ) >> 8,					    ( qBlue(p1)*mul1 +					      qBlue(p2)*mul2  ) >> 8 )#endif/*OPTIM*/			 );//	    if (j&4 && !(j&3) && i&4 &&!(i&3)) AM_DBG logger::get_logger()->debug("qt_transition_blitclass_fade::update(): i=%3d, j=%3d, p1=0x%x, p2=0x%x, res=0x%x", i, j, p1, p2, res.pixel(i,j));	  }	}	const rect& newrect_whole =  m_dst->get_clipped_screen_rect();	int L = newrect_whole.left(), T = newrect_whole.top(),        	W = newrect_whole.width(), H = newrect_whole.height();	AM_DBG logger::get_logger()->debug(				  "qt_transition_blitclass_fade::update(): "				  " ltwh=(%d,%d,%d,%d)",L,T,W,H);	QPixmap rpm(W,H);	rpm.convertFromImage(res);	bitBlt(qpm, L, T, &rpm, L, T, W, H);		finalize_transition(m_outtrans, aqw, m_dst);}voidqt_transition_blitclass_rect::update(){	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_rect::update(%f)", m_progress);	ambulant_qt_window *aqw = (ambulant_qt_window *)m_dst->get_gui_window();	QPixmap *npm, *qpm;	setup_transition(m_outtrans, aqw, &qpm, &npm);	rect newrect_whole = m_newrect;	newrect_whole.translate(m_dst->get_global_topleft());	newrect_whole &= m_dst->get_clipped_screen_rect();	int L = newrect_whole.left(), T = newrect_whole.top(),        	W = newrect_whole.width(), H = newrect_whole.height();	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_rect: qpm=0x%x, npm=0x%x, (L,T,W,H)=(%d,%d,%d,%d)",qpm,npm,L,T,W,H);	bitBlt(qpm, L, T, npm, L, T, W, H);	finalize_transition(m_outtrans, aqw, m_dst);}voidqt_transition_blitclass_r1r2r3r4::update(){ 	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4::update(%f)", m_progress);	ambulant_qt_window *aqw = (ambulant_qt_window *)m_dst->get_gui_window();	QPixmap *npm, *qpm;	setup_transition(m_outtrans, aqw, &qpm, &npm);	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4::update(%f) qpm(%d,%d),npm(%d,%d)", m_progress, qpm->width(),  qpm->height(), npm->width(), npm->height());	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4::update() qpm=0x%x, npm=0x%x.", qpm, npm);	rect oldsrcrect_whole = m_oldsrcrect;	rect olddstrect_whole = m_olddstrect;	rect newsrcrect_whole = m_newsrcrect;	rect newdstrect_whole = m_newdstrect;	oldsrcrect_whole.translate(m_dst->get_global_topleft());	oldsrcrect_whole &= m_dst->get_clipped_screen_rect();	olddstrect_whole.translate(m_dst->get_global_topleft());	olddstrect_whole &= m_dst->get_clipped_screen_rect();	newsrcrect_whole.translate(m_dst->get_global_topleft());	newsrcrect_whole &= m_dst->get_clipped_screen_rect();	newdstrect_whole.translate(m_dst->get_global_topleft());	newdstrect_whole &= m_dst->get_clipped_screen_rect();	int	Loldsrc = oldsrcrect_whole.left(),		Toldsrc = oldsrcrect_whole.top(),		Woldsrc = oldsrcrect_whole.width(),		Holdsrc = oldsrcrect_whole.height();//	logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4: (Loldsrc,Toldsrc,Woldsrc,Holdsrc)=(%d,%d,%d,%d)",Loldsrc,Toldsrc,Woldsrc,Holdsrc);	int	Lolddst = olddstrect_whole.left(), 		Tolddst = olddstrect_whole.top(),		Wolddst = olddstrect_whole.width(),		Holddst = olddstrect_whole.height();//	logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4: (Lolddst,Tolddst,Wolddst,Holddst)=(%d,%d,%d,%d)",Lolddst,Tolddst,Wolddst,Holddst);	int	Lnewsrc = newsrcrect_whole.left(),		Tnewsrc = newsrcrect_whole.top(),		Wnewsrc = newsrcrect_whole.width(),		Hnewsrc = newsrcrect_whole.height();//	logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4: (Lnewsrc,Tnewsrc,Wnewsrc,Hnewsrc)=(%d,%d,%d,%d)",Lnewsrc,Tnewsrc,Wnewsrc,Hnewsrc);	int	Lnewdst = newdstrect_whole.left(),		Tnewdst = newdstrect_whole.top(),		Wnewdst = newdstrect_whole.width(),		Hnewdst = newdstrect_whole.height();//	logger::get_logger()->debug("qt_transition_blitclass_r1r2r3r4: (Lnewdst,Tnewdst,Wnewdst,Hnewdst)=(%d,%d,%d,%d)",Lnewdst,Tnewdst,Wnewdst,Hnewdst);	bitBlt(qpm, Lolddst, Tolddst, qpm, Loldsrc, Toldsrc, Woldsrc, Holdsrc);	bitBlt(qpm, Lnewdst, Tnewdst, npm, Lnewsrc, Tnewsrc, Wnewsrc, Hnewsrc);	finalize_transition(m_outtrans, aqw, m_dst);}voidqt_transition_blitclass_rectlist::update(){	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_rectlist::update(%f)", m_progress);	ambulant_qt_window *aqw = (ambulant_qt_window *)m_dst->get_gui_window();	QPixmap *npm, *qpm;	setup_transition(m_outtrans, aqw, &qpm, &npm);	QImage img1 = qpm->convertToImage();	QImage img2 = npm->convertToImage();	const rect& dstrect_whole = m_dst->get_clipped_screen_rect();	int L = dstrect_whole.left(), T = dstrect_whole.top(),		W = dstrect_whole.width(), H = dstrect_whole.height();	AM_DBG logger::get_logger()->debug("qt_transition_blitclass_rectlist: (L,T,W,H)=(%d,%d,%d,%d)",L,T,W,H);	QPainter paint;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -