コード例 #1
0
ファイル: setting.cpp プロジェクト: byplayer/yamy
// <KEY_SEQUENCE>
KeySeq *SettingLoader::load_KEY_SEQUENCE(
	const tstringi &i_name, bool i_isInParen, Modifier::Type i_mode)
{
	KeySeq keySeq(i_name);
	while (!isEOL()) {
		Modifier::Type mode;
		Modifier modifier = load_MODIFIER(i_mode, m_defaultKeySeqModifier, &mode);
		keySeq.setMode(mode);
		Token *t = lookToken();
		if (t->isCloseParen() && i_isInParen)
			break;
		else if (t->isOpenParen()) {
			getToken(); // open paren
			KeySeq *ks = load_KEY_SEQUENCE(_T(""), true, i_mode);
			getToken(); // close paren
			keySeq.add(ActionKeySeq(ks));
		} else if (*t == _T("$")) { // <KEYSEQ_NAME>
			getToken();
			t = getToken();
			KeySeq *ks = m_setting->m_keySeqs.searchByName(t->getString());
			if (ks == NULL)
				throw ErrorMessage() << _T("`$") << *t
				<< _T("': unknown keyseq name.");
			if (!ks->isCorrectMode(i_mode))
				throw ErrorMessage()
				<< _T("`$") << *t
				<< _T("': Some of R-, IL-, IC-, NL-, CL-, SL-, KL-, MAX-, MIN-, MMAX-, MMIN-, T-, TS-, M0...M9- and L0...L9- are used in the keyseq.  They are prohibited in this context.");
			keySeq.setMode(ks->getMode());
			keySeq.add(ActionKeySeq(ks));
		} else if (*t == _T("&")) { // <FUNCTION_NAME>
			getToken();
			t = getToken();

			// search function
			ActionFunction af(createFunctionData(t->getString()), modifier);
			if (af.m_functionData == NULL)
				throw ErrorMessage() << _T("`&") << *t
				<< _T("': unknown function name.");
			af.m_functionData->load(this);
			keySeq.add(af);
		} else { // <KEYSEQ_MODIFIED_KEY_NAME>
			ModifiedKey mkey;
			mkey.m_modifier = modifier;
			mkey.m_key = load_KEY_NAME();
			keySeq.add(ActionKey(mkey));
		}
	}
	return m_setting->m_keySeqs.add(keySeq);
}
コード例 #2
0
ファイル: setting.cpp プロジェクト: byplayer/yamy
/* load m_setting
   If called by "include", 'filename' describes filename.
   Otherwise the 'filename' is empty.
 */
bool SettingLoader::load(Setting *i_setting, const tstringi &i_filename)
{
	m_setting = i_setting;
	m_isThereAnyError = false;

	tstringi path;
	if (!getFilename(i_filename, &path)) {
		if (i_filename.empty()) {
			Acquire a(m_soLog);
			getFilename(i_filename, &path, 0);	// show filenames
			return false;
		} else
			throw ErrorMessage() << _T("`") << i_filename
			<< _T("': no such file or other error.");
	}

	// create global keymap's default keySeq
	ActionFunction af(createFunctionData(_T("OtherWindowClass")));
	KeySeq *globalDefault = m_setting->m_keySeqs.add(KeySeq(_T("")).add(af));

	// add default keymap
	m_currentKeymap = m_setting->m_keymaps.add(
						  Keymap(Keymap::Type_windowOr, _T("Global"), _T(""), _T(""),
								 globalDefault, NULL));

	/*
	// add keyboard layout name
	if (filename.empty())
	{
	  char keyboardLayoutName[KL_NAMELENGTH];
	  if (GetKeyboardLayoutName(keyboardLayoutName))
	  {
	    tstringi kl = tstringi(_T("KeyboardLayout/")) + keyboardLayoutName;
	    m_setting->symbols.insert(kl);
	    Acquire a(m_soLog);
	    *m_log << _T("KeyboardLayout: ") << kl << std::endl;
	  }
	}
	*/

	// load
	load(path);

	// finalize
	if (i_filename.empty())
		m_setting->m_keymaps.adjustModifier(m_setting->m_keyboard);

	return !m_isThereAnyError;
}
コード例 #3
0
ファイル: video.c プロジェクト: zmike/compiz
static int
getYV12FragmentFunction(CompScreen *s,
                        CompTexture *texture,
                        int param)
{
   VideoFunction *function;
   CompFunctionData *data;
   int target;

   VIDEO_SCREEN(s);

   if (texture->target == GL_TEXTURE_2D)
     target = COMP_FETCH_TARGET_2D;
   else
     target = COMP_FETCH_TARGET_RECT;

   for (function = vs->yv12Functions; function; function = function->next)
     if (function->param == param && function->target == target)
       return function->handle;

   data = createFunctionData();
   if (data)
     {
        static char *temp[] = { "uv", "tmp", "position" };
        int i, handle = 0;
        char str[1024];
        Bool ok = TRUE;

        for (i = 0; i < sizeof (temp) / sizeof (temp[0]); i++)
          ok &= addTempHeaderOpToFunctionData(data, temp[i]);

        snprintf(str, 1024,
                 "MOV position, fragment.texcoord[0];"
                 "MAX position, position, program.env[%d];"
                 "MIN position, position, program.env[%d].zwww;",
                 param, param);

        ok &= addDataOpToFunctionData(data, str);

        if (target == COMP_FETCH_TARGET_RECT)
          {
             snprintf(str, 1024,
                      "TEX output, position, texture[0], RECT;"
                      "MOV output, output.a;");

             ok &= addDataOpToFunctionData(data, str);

             if (s->glxPixmapFBConfigs[8].yInverted)
               {
                  snprintf(str, 1024,
                           "MAD position, position, 0.5, program.env[%d].xy;",
                           param + 1);
               }
             else
               {
                  snprintf(str, 1024,
                           "ADD position, position, program.env[%d].xy;"
                           "MUL position, position, 0.5;",
                           param + 1);
               }

             ok &= addDataOpToFunctionData(data, str);

             snprintf(str, 1024,
                      "TEX tmp, position, texture[0], RECT;"
                      "MOV uv, tmp.a;"
                      "MAD output, output, 1.164, -0.073;"
                      "ADD position.x, position.x, program.env[%d].z;"
                      "TEX tmp, position, texture[0], RECT;"
                      "MOV uv.y, tmp.a;",
                      param + 1);
          }
        else
          {
             snprintf(str, 1024,
                      "TEX output, position, texture[0], 2D;"
                      "MOV output, output.a;");

             ok &= addDataOpToFunctionData(data, str);

             if (s->glxPixmapFBConfigs[8].yInverted)
               {
                  snprintf(str, 1024,
                           "MAD position, position, 0.5, { 0.0, %f };",
                           2.0f / 3.0f);
               }
             else
               {
                  snprintf(str, 1024,
                           "SUB position, position, { 0.0, %f };"
                           "MUL position, position, 0.5;",
                           1.0f / 3.0f);
               }

             ok &= addDataOpToFunctionData(data, str);

             snprintf(str, 1024,
                      "TEX tmp, position, texture[0], 2D;"
                      "MOV uv, tmp.a;"
                      "MAD output, output, 1.164, -0.073;"
                      "ADD position.x, position.x, 0.5;"
                      "TEX tmp, position, texture[0], 2D;"
                      "MOV uv.y, tmp.a;");
          }

        ok &= addDataOpToFunctionData(data, str);

        snprintf(str, 1024,
                 "SUB uv, uv, { 0.5, 0.5 };"
                 "MAD output.xyz, { 1.596, -0.813,   0.0 }, uv.xxxw, output;"
                 "MAD output.xyz, {   0.0, -0.391, 2.018 }, uv.yyyw, output;"
                 "MOV output.a, 1.0;");

        ok &= addDataOpToFunctionData(data, str);

        if (!ok)
          {
             destroyFunctionData(data);
             return 0;
          }

        function = malloc(sizeof (VideoFunction));
        if (function)
          {
             handle = createFragmentFunction(s, "video", data);

             function->handle = handle;
             function->target = target;
             function->param = param;

             function->next = vs->yv12Functions;
             vs->yv12Functions = function;
          }

        destroyFunctionData(data);

        return handle;
     }

   return 0;
}
コード例 #4
0
ファイル: water.c プロジェクト: AtheistSpacePirate/compiz
static int
getBumpMapFragmentFunction(CompScreen * s,
			   CompTexture * texture, int unit, int param)
{
	WaterFunction *function;
	CompFunctionData *data;
	int target;

	WATER_SCREEN(s);

	if (texture->target == GL_TEXTURE_2D)
		target = COMP_FETCH_TARGET_2D;
	else
		target = COMP_FETCH_TARGET_RECT;

	for (function = ws->bumpMapFunctions; function;
	     function = function->next) {
		if (function->param == param && function->unit == unit
		    && function->target == target)
			return function->handle;
	}

	data = createFunctionData();
	if (data) {
		static char *temp[] =
		    { "normal", "temp", "total", "bump", "offset" };
		int i, handle = 0;
		char str[1024];

		for (i = 0; i < sizeof(temp) / sizeof(temp[0]); i++) {
			if (!addTempHeaderOpToFunctionData(data, temp[i])) {
				destroyFunctionData(data);
				return 0;
			}
		}

		snprintf(str, 1024,
			 /* get normal from normal map */
			 "TEX normal, fragment.texcoord[%d], texture[%d], %s;"
			 /* save height */
			 "MOV offset, normal;"
			 /* remove scale and bias from normal */
			 "MAD normal, normal, 2.0, -1.0;"
			 /* normalize the normal map */
			 "DP3 temp, normal, normal;"
			 "RSQ temp, temp.x;" "MUL normal, normal, temp;"
			 /* scale down normal by height and constant and use as
			    offset in texture */
			 "MUL offset, normal, offset.w;"
			 "MUL offset, offset, program.env[%d];",
			 unit, unit,
			 (ws->target == GL_TEXTURE_2D) ? "2D" : "RECT", param);

		if (!addDataOpToFunctionData(data, str)) {
			destroyFunctionData(data);
			return 0;
		}

		if (!addFetchOpToFunctionData
		    (data, "output", "offset.yxzz", target)) {
			destroyFunctionData(data);
			return 0;
		}

		snprintf(str, 1024,
			 /* normal dot lightdir, this should eventually be
			    changed to a real light vector */
			 "DP3 bump, normal, { 0.707, 0.707, 0.0, 0.0 };"
			 "MUL bump, bump, state.light[0].diffuse;");

		if (!addDataOpToFunctionData(data, str)) {
			destroyFunctionData(data);
			return 0;
		}

		if (!addColorOpToFunctionData(data, "output", "output")) {
			destroyFunctionData(data);
			return 0;
		}

		snprintf(str, 1024,
			 /* diffuse per-vertex lighting, opacity and brightness
			    and add lightsource bump color */
			 "ADD output, output, bump;");

		if (!addDataOpToFunctionData(data, str)) {
			destroyFunctionData(data);
			return 0;
		}

		function = malloc(sizeof(WaterFunction));
		if (function) {
			handle = createFragmentFunction(s, "water", data);

			function->handle = handle;
			function->target = target;
			function->param = param;
			function->unit = unit;

			function->next = ws->bumpMapFunctions;
			ws->bumpMapFunctions = function;
		}

		destroyFunctionData(data);

		return handle;
	}

	return 0;
}
コード例 #5
0
ファイル: fragment.c プロジェクト: noodlylight/fusilli
int
getSaturateFragmentFunction (CompScreen  *s,
                             CompTexture *texture,
                             int         param)
{
	int target;

	if (param >= 64)
		return 0;

	if (texture->target == GL_TEXTURE_2D)
		target = COMP_FETCH_TARGET_2D;
	else
		target = COMP_FETCH_TARGET_RECT;

	if (!s->saturateFunction[target][param])
	{
		static const char *saturateData =
		        "MUL temp, output, { 1.0, 1.0, 1.0, 0.0 };"
		        "DP3 temp, temp, program.env[%d];"
		        "LRP output.xyz, program.env[%d].w, output, temp;";
		CompFunctionData  *data;

		data = createFunctionData ();
		if (data)
		{
			char str[1024];

			if (!addTempHeaderOpToFunctionData (data, "temp"))
			{
				destroyFunctionData (data);
				return 0;
			}

			if (!addFetchOpToFunctionData (data, "output", NULL, target))
			{
				destroyFunctionData (data);
				return 0;
			}

			if (!addColorOpToFunctionData (data, "output", "output"))
			{
				destroyFunctionData (data);
				return 0;
			}

			snprintf (str, 1024, saturateData, param, param);

			if (!addDataOpToFunctionData (data, str))
			{
				destroyFunctionData (data);
				return 0;
			}

			s->saturateFunction[target][param] =
				createFragmentFunction (s, "__core_saturate", data);

			destroyFunctionData (data);
		}
	}

	return s->saturateFunction[target][param];
}
コード例 #6
0
ファイル: setting.cpp プロジェクト: byplayer/yamy
// <KEYMAP_DEFINITION>
void SettingLoader::load_KEYMAP_DEFINITION(const Token *i_which)
{
	Keymap::Type type = Keymap::Type_keymap;
	Token *name = getToken();	// <KEYMAP_NAME>
	tstringi windowClassName;
	tstringi windowTitleName;
	KeySeq *keySeq = NULL;
	Keymap *parentKeymap = NULL;
	bool isKeymap2 = false;
	bool doesLoadDefaultKeySeq = false;

	if (!isEOL()) {
		Token *t = lookToken();
		if (*i_which == _T("window")) {	// <WINDOW>
			if (t->isOpenParen())
				// "(" <WINDOW_CLASS_NAME> "&&" <WINDOW_TITLE_NAME> ")"
				// "(" <WINDOW_CLASS_NAME> "||" <WINDOW_TITLE_NAME> ")"
			{
				getToken();
				windowClassName = getToken()->getRegexp();
				t = getToken();
				if (*t == _T("&&"))
					type = Keymap::Type_windowAnd;
				else if (*t == _T("||"))
					type = Keymap::Type_windowOr;
				else
					throw ErrorMessage() << _T("`") << *t << _T("': unknown operator.");
				windowTitleName = getToken()->getRegexp();
				if (!getToken()->isCloseParen())
					throw ErrorMessage() << _T("there must be `)'.");
			} else if (t->isRegexp()) {	// <WINDOW_CLASS_NAME>
				getToken();
				type = Keymap::Type_windowAnd;
				windowClassName = t->getRegexp();
			}
		} else if (*i_which == _T("keymap"))
			;
		else if (*i_which == _T("keymap2"))
			isKeymap2 = true;
		else
			ASSERT(false);

		if (!isEOL())
			doesLoadDefaultKeySeq = true;
	}

	m_currentKeymap = m_setting->m_keymaps.add(
						  Keymap(type, name->getString(), windowClassName, windowTitleName,
								 NULL, NULL));

	if (doesLoadDefaultKeySeq) {
		Token *t = lookToken();
		// <KEYMAP_PARENT>
		if (*t == _T(":")) {
			getToken();
			t = getToken();
			parentKeymap = m_setting->m_keymaps.searchByName(t->getString());
			if (!parentKeymap)
				throw ErrorMessage() << _T("`") << *t
				<< _T("': unknown keymap name.");
		}
		if (!isEOL()) {
			t = getToken();
			if (!(*t == _T("=>") || *t == _T("=")))
				throw ErrorMessage() << _T("`") << *t << _T("': syntax error.");
			keySeq = SettingLoader::load_KEY_SEQUENCE();
		}
	}
	if (keySeq == NULL) {
		FunctionData *fd;
		if (type == Keymap::Type_keymap && !isKeymap2)
			fd = createFunctionData(_T("KeymapParent"));
		else if (type == Keymap::Type_keymap && !isKeymap2)
			fd = createFunctionData(_T("Undefined"));
		else // (type == Keymap::Type_windowAnd || type == Keymap::Type_windowOr)
			fd = createFunctionData(_T("KeymapParent"));
		ASSERT( fd );
		keySeq = m_setting->m_keySeqs.add(
					 KeySeq(name->getString()).add(ActionFunction(fd)));
	}

	m_currentKeymap->setIfNotYet(keySeq, parentKeymap);
}
コード例 #7
0
static int
getNegFragmentFunction (CompScreen  *s,
			CompTexture *texture,
			Bool        alpha)
{
    CompFunctionData *data;
    int              target;

    NEG_SCREEN (s);

    if (texture->target == GL_TEXTURE_2D)
	target = COMP_FETCH_TARGET_2D;
    else
	target = COMP_FETCH_TARGET_RECT;

    if (alpha)
    {
	if (ns->negAlphaFunction)
	    return ns->negAlphaFunction;
    }
    else
    {
	if (ns->negFunction)
	    return ns->negFunction;
    }

    data = createFunctionData ();
    if (data)
    {
	Bool ok = TRUE;
	int  handle = 0;

	if (alpha)
	    ok &= addTempHeaderOpToFunctionData (data, "neg" );

	ok &= addFetchOpToFunctionData (data, "output", NULL, target);
	if (alpha)
	{
	    ok &= addDataOpToFunctionData (data, "RCP neg.a, output.a;");
	    ok &= addDataOpToFunctionData (data,
			"MAD output.rgb, -neg.a, output, 1.0;");
	}
	else
	    ok &= addDataOpToFunctionData (data,
			"SUB output.rgb, 1.0, output;");

	if (alpha)
	    ok &= addDataOpToFunctionData (data,
			"MUL output.rgb, output.a, output;");
		
	ok &= addColorOpToFunctionData (data, "output", "output");
	if (!ok)
	{
	    destroyFunctionData (data);
	    return 0;
	}

	handle = createFragmentFunction (s, "neg", data);

	if (alpha)
	    ns->negAlphaFunction = handle;
	else
	    ns->negFunction = handle;

	destroyFunctionData (data);

	return handle;
    }

    return 0;
}