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

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

?? glwidget.cpp

?? celestia源代碼
?? CPP
字號:
/* *  Celestia GTK+ Front-End *  Copyright (C) 2005 Pat Suwalski <pat@suwalski.net> * *  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. * *  $Id: glwidget.cpp,v 1.1 2005/12/06 03:19:35 suwalski Exp $ */#include <gdk/gdkkeysyms.h>#include <gtk/gtk.h>#include <gtk/gtkgl.h>#include <celestia/celestiacore.h>#include "glwidget.h"#include "actions.h"#include "common.h"/* Declarations: Callbacks */static gint glarea_idle(AppData* app);static gint glarea_configure(GtkWidget* widget, GdkEventConfigure*, AppData* app);static gint glarea_expose(GtkWidget* widget, GdkEventExpose* event, AppData* app);static gint glarea_motion_notify(GtkWidget*, GdkEventMotion* event, AppData* app);static gint glarea_mouse_scroll(GtkWidget*, GdkEventScroll* event, AppData* app);static gint glarea_button_press(GtkWidget*, GdkEventButton* event, AppData* app);static gint glarea_button_release(GtkWidget*, GdkEventButton* event, AppData* app);static gint glarea_key_press(GtkWidget* widget, GdkEventKey* event, AppData* app);static gint glarea_key_release(GtkWidget* widget, GdkEventKey* event, AppData* app);/* Declarations: Helpers */static gint glDrawFrame(AppData* app);static bool handleSpecialKey(int key, int state, bool down, AppData* app);/* ENTRY: Initialize/Bind all glArea Callbacks */void initGLCallbacks(AppData* app){	g_signal_connect(GTK_OBJECT(app->glArea), "expose_event",	                 G_CALLBACK(glarea_expose), app);	g_signal_connect(GTK_OBJECT(app->glArea), "configure_event",	                 G_CALLBACK(glarea_configure), app);	g_signal_connect(GTK_OBJECT(app->glArea), "button_press_event",	                 G_CALLBACK(glarea_button_press), app);	g_signal_connect(GTK_OBJECT(app->glArea), "button_release_event",	                 G_CALLBACK(glarea_button_release), app);	g_signal_connect(GTK_OBJECT(app->glArea), "scroll_event",	                 G_CALLBACK(glarea_mouse_scroll), app);	g_signal_connect(GTK_OBJECT(app->glArea), "motion_notify_event",	                 G_CALLBACK(glarea_motion_notify), app);	g_signal_connect(GTK_OBJECT(app->glArea), "key_press_event",	                 G_CALLBACK(glarea_key_press), app);	g_signal_connect(GTK_OBJECT(app->glArea), "key_release_event",	                 G_CALLBACK(glarea_key_release), app);		/* Main call to execute redraw during GTK main loop */	g_idle_add((GSourceFunc)glarea_idle, app);}/* CALLBACK: GL Function for main update (in GTK idle loop) */static gint glarea_idle(AppData* app){	app->core->tick();	return glDrawFrame(app);}/* CALLBACK: GL Function for event "configure_event" */static gint glarea_configure(GtkWidget* widget, GdkEventConfigure*, AppData* app){	GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);	GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);	if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext))		return FALSE;	app->core->resize(widget->allocation.width, widget->allocation.height);	/* GConf changes only saved upon exit, since caused a lot of CPU activity	 * while saving intermediate steps. */	gdk_gl_drawable_gl_end (gldrawable);	return TRUE;}/* CALLBACK: GL Function for event "expose_event" */static gint glarea_expose(GtkWidget*, GdkEventExpose* event, AppData* app){	/* Draw only the last expose */	if (event->count > 0)		return TRUE;	/* Redraw -- draw checks are made in function */	return glDrawFrame(app);}/* CALLBACK: GL Function for event "motion_notify_event" */static gint glarea_motion_notify(GtkWidget*, GdkEventMotion* event, AppData* app){	int x = (int) event->x;	int y = (int) event->y;	int buttons = 0;	if ((event->state & GDK_BUTTON1_MASK) != 0)		buttons |= CelestiaCore::LeftButton;	if ((event->state & GDK_BUTTON2_MASK) != 0)		buttons |= CelestiaCore::MiddleButton;	if ((event->state & GDK_BUTTON3_MASK) != 0)		buttons |= CelestiaCore::RightButton;	if ((event->state & GDK_SHIFT_MASK) != 0)		buttons |= CelestiaCore::ShiftKey;	if ((event->state & GDK_CONTROL_MASK) != 0)		buttons |= CelestiaCore::ControlKey;	app->core->mouseMove(x - app->lastX, y - app->lastY, buttons);	app->lastX = x;	app->lastY = y;	return TRUE;}/* CALLBACK: GL Function for event "scroll_event" */static gint glarea_mouse_scroll(GtkWidget*, GdkEventScroll* event, AppData* app){	if (event->direction == GDK_SCROLL_UP)		app->core->mouseWheel(-1.0f, 0);	else 		app->core->mouseWheel(1.0f, 0);	return TRUE;}/* CALLBACK: GL Function for event "button_press_event" */static gint glarea_button_press(GtkWidget*, GdkEventButton* event, AppData* app){	app->lastX = (int) event->x;	app->lastY = (int) event->y;	if (event->button == 1)		app->core->mouseButtonDown(event->x, event->y, CelestiaCore::LeftButton);	else if (event->button == 2)		app->core->mouseButtonDown(event->x, event->y, CelestiaCore::MiddleButton);	else if (event->button == 3)		app->core->mouseButtonDown(event->x, event->y, CelestiaCore::RightButton);	return TRUE;}/* CALLBACK: GL Function for event "button_release_event" */static gint glarea_button_release(GtkWidget*, GdkEventButton* event, AppData* app){	app->lastX = (int) event->x;	app->lastY = (int) event->y;	if (event->button == 1)		app->core->mouseButtonUp(event->x, event->y, CelestiaCore::LeftButton);	else if (event->button == 2)		app->core->mouseButtonUp(event->x, event->y, CelestiaCore::MiddleButton);	else if (event->button == 3)		app->core->mouseButtonUp(event->x, event->y, CelestiaCore::RightButton);	return TRUE;}/* CALLBACK: GL Function for event "key_press_event" */static gint glarea_key_press(GtkWidget* widget, GdkEventKey* event, AppData* app){	gtk_signal_emit_stop_by_name(GTK_OBJECT(widget),"key_press_event");	switch (event->keyval)	{		case GDK_Escape:			app->core->charEntered('\033');			break;		case GDK_BackSpace:			app->core->charEntered('\b');			break;		case GDK_Tab:			/* Tab has to be handled specially because keyDown and keyUp			 * do not trigger auto-completion. */			app->core->charEntered(event->keyval);			break;		case GDK_ISO_Left_Tab:			/* This is what Celestia calls BackTab */			app->core->charEntered(CelestiaCore::Key_BackTab);			break;		/* Temporary until galaxy brightness added as GtkAction */		case GDK_bracketleft:			app->core->charEntered('(');			break;		case GDK_bracketright:			app->core->charEntered(')');			break;		default:			if (!handleSpecialKey(event->keyval, event->state, true, app))			{				if ((event->string != NULL) && (*(event->string)))				{					/* See if our key accelerators will handle this event. */					if((!app->core->getTextEnterMode()) && gtk_accel_groups_activate (G_OBJECT (app->mainWindow), event->keyval, GDK_SHIFT_MASK))						return TRUE;					char* s = event->string;					while (*s != '\0')					{						char c = *s++;						app->core->charEntered(c);					}				}			}			if (event->state & GDK_MOD1_MASK)				return FALSE;	}	return TRUE;}/* CALLBACK: GL Function for event "key_release_event" */static gint glarea_key_release(GtkWidget* widget, GdkEventKey* event, AppData* app){	gtk_signal_emit_stop_by_name(GTK_OBJECT(widget),"key_release_event");	return handleSpecialKey(event->keyval, event->state, false, app);}/* HELPER: GL Common Draw function. *         If everything checks out, call appCore->draw() */static gint glDrawFrame(AppData* app){	GdkGLContext *glcontext = gtk_widget_get_gl_context(app->glArea);	GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(app->glArea);	if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))		return FALSE;	if (app->bReady)	{		app->core->draw();		gdk_gl_drawable_swap_buffers(GDK_GL_DRAWABLE(gldrawable));	}	gdk_gl_drawable_gl_end(gldrawable);	return TRUE;}/* HELPER: Lookup function for keypress-action. Any key that is not part of *         the menu system must be listed here. */static bool handleSpecialKey(int key, int state, bool down, AppData* app){	int k = -1;	switch (key)	{		case GDK_Up:			k = CelestiaCore::Key_Up;			break;		case GDK_Down:			k = CelestiaCore::Key_Down;			break;		case GDK_Left:			k = CelestiaCore::Key_Left;			break;		case GDK_Right:			k = CelestiaCore::Key_Right;			break;		case GDK_Home:			k = CelestiaCore::Key_Home;			break;		case GDK_End:			k = CelestiaCore::Key_End;			break;		case GDK_F1:			k = CelestiaCore::Key_F1;			break;		case GDK_F2:			k = CelestiaCore::Key_F2;			break;		case GDK_F3:			k = CelestiaCore::Key_F3;			break;		case GDK_F4:			k = CelestiaCore::Key_F4;			break;		case GDK_F5:			k = CelestiaCore::Key_F5;			break;		case GDK_F6:			k = CelestiaCore::Key_F6;			break;		case GDK_F7:			k = CelestiaCore::Key_F7;			break;		case GDK_F10:			if (down) actionCaptureImage(NULL, app);			break;		case GDK_KP_Insert:		case GDK_KP_0:			k = CelestiaCore::Key_NumPad0;			break;		case GDK_KP_End:		case GDK_KP_1:			k = CelestiaCore::Key_NumPad1;			break;		case  GDK_KP_Down:		case GDK_KP_2:			k = CelestiaCore::Key_NumPad2;			break;		case GDK_KP_Next:		case GDK_KP_3:			k = CelestiaCore::Key_NumPad3;			break;		case GDK_KP_Left:		case GDK_KP_4:			k = CelestiaCore::Key_NumPad4;			break;		case GDK_KP_Begin:		case GDK_KP_5:			k = CelestiaCore::Key_NumPad5;			break;		case GDK_KP_Right:		case GDK_KP_6:			k = CelestiaCore::Key_NumPad6;			break;		case GDK_KP_Home:		case GDK_KP_7:			k = CelestiaCore::Key_NumPad7;			break;		case GDK_KP_Up:		case GDK_KP_8:			k = CelestiaCore::Key_NumPad8;			break;		case GDK_KP_Prior:		case GDK_KP_9:			k = CelestiaCore::Key_NumPad9;			break;		case GDK_A:		case GDK_a:			k = 'A';			break;		case GDK_Z:		case GDK_z:			k = 'Z';			break;	}	if (k >= 0)	{		if (down)			app->core->keyDown(k, (state & GDK_SHIFT_MASK) 			                   ? CelestiaCore::ShiftKey 			                   : 0);		else			app->core->keyUp(k);		return (k < 'A' || k > 'Z');	}	else	{		return false;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区0| 成人av在线一区二区| 麻豆久久久久久| 亚洲精品一区二区三区香蕉| 亚洲成精国产精品女| 成年人国产精品| 色88888久久久久久影院野外| 欧美日本不卡视频| 青草国产精品久久久久久| 亚洲精品在线网站| 福利一区二区在线观看| 最新欧美精品一区二区三区| 精品国产凹凸成av人导航| 久久―日本道色综合久久| 国产偷v国产偷v亚洲高清| 亚洲欧洲韩国日本视频| 尤物av一区二区| 亚洲福利视频一区| 国产综合色在线视频区| 成人不卡免费av| 国产98色在线|日韩| 国产东北露脸精品视频| 日本丶国产丶欧美色综合| 欧美剧情片在线观看| 欧美α欧美αv大片| 国产精品污污网站在线观看| 午夜婷婷国产麻豆精品| 国产精品一二一区| 欧美精品免费视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品美女久久久久aⅴ国产馆| 国产精品九色蝌蚪自拍| 亚洲人成在线播放网站岛国| 粉嫩嫩av羞羞动漫久久久| 精品久久久久久久久久久久久久久 | 国产一区二区免费在线| 亚洲色图欧美激情| 视频一区欧美精品| 欧美体内she精视频| 亚洲啪啪综合av一区二区三区| 91精品国产91久久综合桃花| 午夜视频一区在线观看| 在线亚洲欧美专区二区| 国产一区二区91| 欧美本精品男人aⅴ天堂| 天天做天天摸天天爽国产一区| 久久精品日韩一区二区三区| 欧美性生活影院| 成人一区二区视频| 日本成人超碰在线观看| 亚洲精品午夜久久久| 久久久www免费人成精品| 欧美色欧美亚洲另类二区| 岛国精品在线播放| 久久成人免费网| 午夜精品久久一牛影视| 亚洲欧美色图小说| 亚洲国产精品成人综合色在线婷婷| 欧美午夜精品一区二区蜜桃| 成人性视频免费网站| 国产ts人妖一区二区| 国产原创一区二区三区| 久久精品国产久精国产| 日韩制服丝袜先锋影音| 亚洲午夜三级在线| 亚洲最快最全在线视频| 中文字幕佐山爱一区二区免费| 国产偷国产偷精品高清尤物| 久久久久久久av麻豆果冻| www激情久久| 精品成人免费观看| 精品国产3级a| 精品国产乱子伦一区| 精品欧美一区二区三区精品久久 | 欧美亚洲另类激情小说| 91丨国产丨九色丨pron| 91亚洲国产成人精品一区二三| 成人国产精品免费观看| 成人激情视频网站| 色呦呦国产精品| 欧美亚洲免费在线一区| 欧美高清视频一二三区| 欧美一区二区在线观看| 日韩欧美在线不卡| 26uuu精品一区二区| 久久久久久97三级| 国产精品日产欧美久久久久| 中文一区二区完整视频在线观看 | 在线视频欧美区| 欧美日韩一区 二区 三区 久久精品| 欧美影院精品一区| 欧美电视剧在线看免费| 久久色视频免费观看| 日本一区二区综合亚洲| 综合网在线视频| 亚洲国产你懂的| 久久国产免费看| 成人黄色av电影| 色噜噜狠狠一区二区三区果冻| 欧美三级日韩三级| 精品人伦一区二区色婷婷| 国产精品毛片大码女人| 亚洲国产一二三| 精品在线一区二区三区| 高清久久久久久| 欧美性感一类影片在线播放| 精品久久久久久无| 一色桃子久久精品亚洲| 污片在线观看一区二区| 国产一区二区免费视频| 色综合色综合色综合| 欧美精品1区2区| 中文字幕av一区二区三区免费看| 欧美在线看片a免费观看| 91麻豆免费看| 日韩一区二区三免费高清| 国产欧美日韩在线视频| 亚洲午夜激情网页| 国产精品中文字幕日韩精品| 色94色欧美sute亚洲线路一久| 日韩欧美国产高清| 亚洲精品你懂的| 国产精品原创巨作av| 欧美日韩成人综合在线一区二区| 久久久三级国产网站| 亚洲444eee在线观看| 播五月开心婷婷综合| 欧美电视剧免费全集观看| 亚洲色图欧洲色图婷婷| 国产精品资源网| 日韩一区二区在线观看| 中文字幕亚洲精品在线观看| 激情偷乱视频一区二区三区| 色香蕉成人二区免费| 国产欧美一区二区三区鸳鸯浴 | 99久久777色| 亚洲精品在线观看网站| 婷婷六月综合亚洲| 99精品在线观看视频| 久久理论电影网| 日韩中文欧美在线| 欧美午夜在线一二页| 亚洲欧美日韩综合aⅴ视频| 丁香五精品蜜臀久久久久99网站| 91精品久久久久久久91蜜桃| 亚洲一卡二卡三卡四卡 | 亚洲影院免费观看| 成人国产精品免费观看视频| 久久久久88色偷偷免费| 久久99久国产精品黄毛片色诱| 欧美日韩国产成人在线91| 尤物在线观看一区| 成人aaaa免费全部观看| 久久久99免费| 久久99久久精品| 欧美sm极限捆绑bd| 麻豆精品新av中文字幕| 91精品国产品国语在线不卡| 无码av免费一区二区三区试看| 欧美亚洲精品一区| 亚洲一区精品在线| 欧美天堂一区二区三区| 亚洲午夜久久久久| 欧美网站大全在线观看| 亚洲v中文字幕| 欧美日韩成人综合天天影院| 三级不卡在线观看| 日韩你懂的电影在线观看| 男人的天堂久久精品| 精品免费视频一区二区| 久久99精品国产麻豆婷婷洗澡| 日韩视频永久免费| 激情综合网最新| 国产女人18毛片水真多成人如厕| 高清在线成人网| 亚洲精品视频在线观看免费 | 日韩国产欧美在线视频| 9191成人精品久久| 日本sm残虐另类| 亚洲精品一区二区三区在线观看| 国产精品18久久久久久vr| 国产片一区二区三区| 91亚洲资源网| 亚洲最新视频在线观看| 91麻豆精品91久久久久久清纯 | 中文字幕成人在线观看| 成人免费va视频| ...av二区三区久久精品| 在线免费观看日本一区| 日韩中文字幕区一区有砖一区 | 韩国v欧美v亚洲v日本v| 欧美激情一区二区三区不卡| 99亚偷拍自图区亚洲| 亚洲国产日产av| www激情久久| 日本精品免费观看高清观看| 蜜臀久久久久久久| 国产午夜精品美女毛片视频| 色94色欧美sute亚洲线路一久| 日本美女一区二区三区|