亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gameswf_styles.cpp

?? 一個開源的嵌入式flash播放器 具體看文檔和例子就可
?? CPP
字號:
// gameswf_styles.cpp	-- Thatcher Ulrich <tu@tulrich.com> 2003// This source code has been donated to the Public Domain.  Do// whatever you want with it.// Fill and line style types.#include "gameswf_styles.h"#include "gameswf_impl.h"#include "gameswf_log.h"#include "gameswf_render.h"#include "gameswf_stream.h"namespace gameswf{	//	// gradient_record	//	gradient_record::gradient_record()		:		m_ratio(0)	{	}	void	gradient_record::read(stream* in, int tag_type)	{		m_ratio = in->read_u8();		m_color.read(in, tag_type);	}	//	// fill_style	//	fill_style::fill_style()		:		m_type(0),		m_gradient_bitmap_info(0),		m_bitmap_character(0)	{		assert(m_gradients.size() == 0);	}	fill_style::~fill_style()	{	}	void	fill_style::read(stream* in, int tag_type, movie_definition_sub* md)	{		m_type = in->read_u8();		IF_VERBOSE_PARSE(log_msg("  fill_style read type = 0x%X\n", m_type));		if (m_type == 0x00)		{			// 0x00: solid fill			if (tag_type <= 22) {				m_color.read_rgb(in);			} else {				m_color.read_rgba(in);			}			IF_VERBOSE_PARSE(log_msg("  color: ");					 m_color.print());		}		else if (m_type == 0x10 || m_type == 0x12)		{			// 0x10: linear gradient fill			// 0x12: radial gradient fill			matrix	input_matrix;			input_matrix.read(in);			if (m_type == 0x10)			{				m_gradient_matrix.set_identity();				m_gradient_matrix.concatenate_translation(128.f, 0.f);				m_gradient_matrix.concatenate_scale(1.0f / 128.0f);			}			else 			{				m_gradient_matrix.set_identity();				m_gradient_matrix.concatenate_translation(32.f, 32.f);				m_gradient_matrix.concatenate_scale(1.0f / 512.0f);			}			matrix	m;			m.set_inverse(input_matrix);			m_gradient_matrix.concatenate(m);							// GRADIENT			int	num_gradients = in->read_u8();			assert(num_gradients >= 1 && num_gradients <= 8);			m_gradients.resize(num_gradients);			for (int i = 0; i < num_gradients; i++)			{				m_gradients[i].read(in, tag_type);			}			IF_VERBOSE_PARSE(log_msg("  gradients: num_gradients = %d\n", num_gradients));			// @@ hack.			if (num_gradients > 0)			{				m_color = m_gradients[0].m_color;			}			if (md->get_create_bitmaps() == DO_LOAD_BITMAPS)			{				m_gradient_bitmap_info = create_gradient_bitmap();			}			else			{				m_gradient_bitmap_info = render::create_bitmap_info_empty();			}			// Make sure our movie_def_impl knows about this bitmap.			md->add_bitmap_info(m_gradient_bitmap_info.get_ptr());		}		else if (m_type == 0x40 || m_type == 0x41)		{			// 0x40: tiled bitmap fill			// 0x41: clipped bitmap fill			int	bitmap_char_id = in->read_u16();			IF_VERBOSE_PARSE(log_msg("  bitmap_char = %d\n", bitmap_char_id));			// Look up the bitmap character.			m_bitmap_character = md->get_bitmap_character(bitmap_char_id);			matrix	m;			m.read(in);			// For some reason, it looks like they store the inverse of the			// TWIPS-to-texcoords matrix.			m_bitmap_matrix.set_inverse(m);			IF_VERBOSE_PARSE(m_bitmap_matrix.print());		}	}	rgba	fill_style::sample_gradient(int ratio) const	// Return the color at the specified ratio into our gradient.	// Ratio is in [0, 255].	{		assert(ratio >= 0 && ratio <= 255);		assert(m_type == 0x10 || m_type == 0x12);		assert(m_gradients.size() > 0);		if (ratio < m_gradients[0].m_ratio)			return m_gradients[0].m_color;						for (int i = 1; i < m_gradients.size(); i++)		{			if (m_gradients[i].m_ratio >= ratio)			{				const gradient_record& gr0 = m_gradients[i - 1];				const gradient_record& gr1 = m_gradients[i];				float	f = 0.0f;				if (gr0.m_ratio != gr1.m_ratio)				{					f = (ratio - gr0.m_ratio) / float(gr1.m_ratio - gr0.m_ratio);				}				rgba	result;				result.set_lerp(m_gradients[i - 1].m_color, m_gradients[i].m_color, f);				return result;			}		}		return m_gradients.back().m_color;	}	gameswf::bitmap_info*	fill_style::create_gradient_bitmap() const	// Make a bitmap_info* corresponding to our gradient.	// We can use this to set the gradient fill style.	{		assert(m_type == 0x10 || m_type == 0x12);		image::rgba*	im = NULL;		if (m_type == 0x10)		{			// Linear gradient.			im = image::create_rgba(256, 1);			for (int i = 0; i < im->m_width; i++)			{				rgba	sample = sample_gradient(i);				im->set_pixel(i, 0, sample.m_r, sample.m_g, sample.m_b, sample.m_a);			}		}		else if (m_type == 0x12)		{			// Radial gradient.			im = image::create_rgba(64, 64);			for (int j = 0; j < im->m_height; j++)			{				for (int i = 0; i < im->m_width; i++)				{					float	radius = (im->m_height - 1) / 2.0f;					float	y = (j - radius) / radius;					float	x = (i - radius) / radius;					int	ratio = (int) floorf(255.5f * sqrt(x * x + y * y));					if (ratio > 255)					{						ratio = 255;					}					rgba	sample = sample_gradient( ratio );					im->set_pixel(i, j, sample.m_r, sample.m_g, sample.m_b, sample.m_a);				}			}		}		gameswf::bitmap_info*	bi = gameswf::render::create_bitmap_info_rgba(im);		delete im;		return bi;	}	void	fill_style::apply(int fill_side, float ratio) const	// Push our style parameters into the renderer.	{		UNUSED(ratio);		if (m_type == 0x00)		{			// 0x00: solid fill			gameswf::render::fill_style_color(fill_side, m_color);		}		else if (m_type == 0x10 || m_type == 0x12)		{			// 0x10: linear gradient fill			// 0x12: radial gradient fill			if (m_gradient_bitmap_info == NULL)			{				// This can happen when morphing gradient styles.				// assert(morphing???);				// log an error?				fill_style*	this_non_const = const_cast<fill_style*>(this);				this_non_const->m_gradient_bitmap_info = create_gradient_bitmap();			}			if (m_gradient_bitmap_info != NULL)			{				gameswf::render::fill_style_bitmap(					fill_side,					m_gradient_bitmap_info.get_ptr(),					m_gradient_matrix,					gameswf::render_handler::WRAP_CLAMP);			}		}		else if (m_type == 0x40				 || m_type == 0x41)		{			// bitmap fill (either tiled or clipped)			gameswf::bitmap_info*	bi = NULL;			if (m_bitmap_character != NULL)			{				bi = m_bitmap_character->get_bitmap_info();				if (bi != NULL)				{					gameswf::render_handler::bitmap_wrap_mode	wmode = gameswf::render_handler::WRAP_REPEAT;					if (m_type == 0x41)					{						wmode = gameswf::render_handler::WRAP_CLAMP;					}					gameswf::render::fill_style_bitmap(						fill_side,						bi,						m_bitmap_matrix,						wmode);				}			}		}	}	void	fill_style::set_lerp(const fill_style& a, const fill_style& b, float t)	// Sets this style to a blend of a and b.  t = [0,1]	{		assert(t >= 0 && t <= 1);		// fill style type		m_type = a.get_type();		assert(m_type == b.get_type());		// fill style color		m_color.set_lerp(a.get_color(), b.get_color(), t);		// fill style gradient matrix		//		// @@ TODO morphed gradients don't come out exactly		// right; they shift around some.  Not sure where the		// problem is.		m_gradient_matrix.set_lerp(a.m_gradient_matrix, b.m_gradient_matrix, t);		// fill style gradients		assert(m_gradients.size() == a.m_gradients.size());		assert(m_gradients.size() == b.m_gradients.size());		for (int j=0; j < m_gradients.size(); j++)		{			m_gradients[j].m_ratio =				(Uint8) frnd(					flerp(a.m_gradients[j].m_ratio, b.m_gradients[j].m_ratio, t)					);			m_gradients[j].m_color.set_lerp(a.m_gradients[j].m_color, b.m_gradients[j].m_color, t);		}		m_gradient_bitmap_info = NULL;		// fill style bitmap ID		m_bitmap_character = a.m_bitmap_character;		assert(m_bitmap_character == b.m_bitmap_character);		// fill style bitmap matrix		m_bitmap_matrix.set_lerp(a.m_bitmap_matrix, b.m_bitmap_matrix, t);	}	//	// line_style	//		line_style::line_style()		:		m_width(0)	{	}	void	line_style::read(stream* in, int tag_type)	{		m_width = in->read_u16();		m_color.read(in, tag_type);	}	void	line_style::apply(float ratio) const	{		UNUSED(ratio);		gameswf::render::line_style_color(m_color);		gameswf::render::line_style_width(m_width);	}}// Local Variables:// mode: C++// c-basic-offset: 8 // tab-width: 8// indent-tabs-mode: t// End:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一av色| 美女脱光内衣内裤视频久久网站 | 国产成人高清视频| 99re这里只有精品首页| 欧美一区二区三区成人| 中文字幕在线观看不卡视频| 奇米四色…亚洲| 在线观看视频一区二区欧美日韩| 久久美女艺术照精彩视频福利播放 | 国产婷婷一区二区| 午夜精品久久久久久久久久久 | 色噜噜狠狠成人中文综合| 精品伦理精品一区| 日日摸夜夜添夜夜添国产精品 | 亚洲久本草在线中文字幕| 免费人成精品欧美精品 | 亚洲精品在线三区| 香蕉加勒比综合久久| 91原创在线视频| 国产精品久久二区二区| 国产伦精品一区二区三区在线观看| 欧美亚洲自拍偷拍| 亚洲免费视频中文字幕| 成人av动漫网站| 日本欧美大码aⅴ在线播放| 91在线观看视频| 中文字幕av资源一区| 国产精品资源站在线| 日韩三级.com| 麻豆精品久久久| 欧美变态口味重另类| 欧美aaa在线| 日韩视频免费观看高清完整版| 午夜免费久久看| 69av一区二区三区| 美女脱光内衣内裤视频久久网站 | 91久久免费观看| 亚洲人成精品久久久久久| av在线播放一区二区三区| 欧美精彩视频一区二区三区| 国产精品一区二区免费不卡| 久久久精品一品道一区| 成人激情综合网站| 亚洲欧洲日韩一区二区三区| 成人久久视频在线观看| 中文字幕亚洲区| 欧美亚洲动漫另类| 日韩精品一级二级| 精品国产一区二区三区久久久蜜月| 黄色资源网久久资源365| 久久久国产午夜精品| 成人激情av网| 亚洲一级二级三级在线免费观看| 欧美综合久久久| 美女国产一区二区| 国产欧美一区二区三区在线看蜜臀| 成人免费的视频| 亚洲黄色免费电影| 欧美一区二区在线观看| 国产精品一区二区无线| 亚洲同性gay激情无套| 欧美群妇大交群中文字幕| 九色综合狠狠综合久久| 国产精品网曝门| 欧美日韩国产在线播放网站| 精品一区二区三区影院在线午夜| 日本一区二区免费在线 | 午夜视频久久久久久| 久久蜜桃av一区精品变态类天堂| 91香蕉视频黄| 另类小说一区二区三区| 国产精品国产三级国产普通话三级| 在线亚洲一区观看| 精品一区二区三区在线视频| 日韩一区有码在线| 日韩欧美一区中文| 99国产精品久久久久| 色综合一区二区三区| 亚洲成人av在线电影| 国产欧美精品区一区二区三区| 欧美亚洲动漫精品| jiyouzz国产精品久久| 日本一不卡视频| 亚洲精品免费一二三区| 久久伊99综合婷婷久久伊| 精品视频1区2区| thepron国产精品| 久久国产成人午夜av影院| 亚洲乱码一区二区三区在线观看| 日韩精品一区二区三区中文不卡| 色哟哟在线观看一区二区三区| 蜜桃av一区二区三区| 一个色妞综合视频在线观看| 国产精品污网站| 久久精品亚洲精品国产欧美| 91在线视频免费观看| 国产精品69毛片高清亚洲| 蜜桃久久久久久| 丝袜美腿亚洲综合| 亚洲视频每日更新| 中文字幕av在线一区二区三区| 欧美成人一区二区三区片免费 | av成人动漫在线观看| 日产欧产美韩系列久久99| 亚洲激情中文1区| 国产精品系列在线| 久久精品一区蜜桃臀影院| 欧美成人激情免费网| 欧美一区二区三区成人| 91麻豆精品国产综合久久久久久| 在线视频综合导航| 欧美性三三影院| 欧美日韩国产美| 欧美喷水一区二区| 欧美性xxxxx极品少妇| 色www精品视频在线观看| 成人av资源在线| 97久久精品人人澡人人爽| 91丝袜美女网| 色综合久久久久综合体| 91麻豆精品秘密| 欧美性大战久久久| 欧美精品一级二级三级| 色吊一区二区三区 | 91视频观看视频| 91小视频免费观看| 色狠狠一区二区三区香蕉| 91国偷自产一区二区使用方法| 91网址在线看| 欧美日韩成人综合天天影院| 欧美日韩一区二区三区视频| 欧美年轻男男videosbes| 在线成人av网站| 精品国产伦理网| 伦理电影国产精品| 成人一道本在线| 91精彩视频在线| 91麻豆精品国产自产在线 | 国产综合久久久久久久久久久久| 国产美女视频91| 99久精品国产| 91精品国产综合久久福利| 2020国产精品| 亚洲色图一区二区三区| 午夜久久久影院| 国产精品影音先锋| 色婷婷精品大在线视频 | 奇米精品一区二区三区在线观看 | 日韩福利电影在线| 国产白丝网站精品污在线入口| 99久久综合国产精品| 欧美精品少妇一区二区三区| 精品国内片67194| 亚洲品质自拍视频网站| 日本亚洲最大的色成网站www| 国产精品一品二品| 欧美体内she精高潮| 国产午夜精品一区二区三区嫩草 | 中文字幕五月欧美| 午夜精品久久久久久久99水蜜桃| 色天使久久综合网天天| 精品国产自在久精品国产| 亚洲一区二区精品视频| 国产成人在线色| 欧美精品久久久久久久久老牛影院| 久久综合色综合88| 丝袜美腿亚洲一区二区图片| 成人免费视频播放| 精品国产一区二区在线观看| 亚洲午夜视频在线| 国产成人av网站| 欧美一区二区在线不卡| 亚洲免费在线视频一区 二区| 国产一区二区女| 91精品国产免费| 亚洲人123区| 不卡一区二区三区四区| 欧美mv和日韩mv的网站| 亚洲一二三四区不卡| 成人蜜臀av电影| 日本一区二区三区在线不卡| 蓝色福利精品导航| 欧美一区二区不卡视频| 亚洲18色成人| 在线观看精品一区| 亚洲免费观看高清完整版在线观看熊 | 国产成人av资源| 久久婷婷国产综合精品青草| 青青青伊人色综合久久| 欧美日韩视频一区二区| 亚洲柠檬福利资源导航| 成人av免费网站| 国产精品久久久久久久久久免费看| 国产一区欧美日韩| 欧美成人午夜电影| 麻豆成人免费电影| 欧美va亚洲va在线观看蝴蝶网| 午夜av一区二区| 日韩一区二区精品在线观看| 爽好久久久欧美精品|