?? movie.cpp
字號:
////////////////////////////////////////////////////////////
// Flash Plugin and Player
// Copyright (C) 1998,1999 Olivier Debon
//
// 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.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
///////////////////////////////////////////////////////////////
// Author : Olivier Debon <odebon@club-internet.fr>
//
#include "movie.h"
FlashMovie::FlashMovie()
{
gd = NULL;
sm = NULL;
getSwf = NULL;
getUrl = NULL;
cursorOnOff = NULL;
buttons_updated = 0;
scheduledTime.tv_sec = -1;
cur_focus = NULL;
lost_over = NULL;
msPerFrame = 0;
/* mouse handling */
mouse_active = 0;
mouse_x = -1;
mouse_y = -1;
button_pressed = 0;
refresh = 1;
}
FlashMovie::~FlashMovie()
{
CInputScript *n;
while (main != NULL) {
n = main->next;
delete main;
main = n;
}
if (gd) delete gd;
if (sm) delete sm;
}
int
FlashMovie::processMovie(GraphicDevice *gd, SoundMixer *sm)
{
CInputScript *script;
int wakeUp = 0;
if (sm && sm->playSounds()) {
wakeUp = 1;
}
for (script = this->main; script != NULL; script = script->next) {
if (script->program == NULL) continue;
if (script->program->nbFrames == 0) continue;
if (script->program->processMovie(gd,sm)) {
wakeUp = 1;
}
}
renderMovie();
return wakeUp;
}
int
FlashMovie::handleEvent(GraphicDevice *gd, SoundMixer *sm, FlashEvent *event)
{
int wakeUp = 0;
if (sm && sm->playSounds()) {
wakeUp = 1;
}
if (this->main == 0) return 0;
if (this->main->program == 0) return 0;
if (this->main->program->handleEvent(gd, sm, event)) {
wakeUp = 1;
}
renderMovie();
return wakeUp;
}
/* current focus bigger and translated if needed */
void
FlashMovie::renderFocus()
{
Rect rect,boundary;
Matrix mat;
if (mouse_active || !cur_focus) return;
/* rect is the bbox in screen coordinates */
// Compute the bounding box in screen coordinates
cur_focus->character->getBoundingBox(&boundary,cur_focus);
mat = (*gd->adjust) * cur_focus->renderMatrix;
transformBoundingBox(&rect, &mat, &boundary, 1);
gd->drawBox(rect.xmin, rect.ymin, rect.xmax, rect.ymax);
}
void
FlashMovie::renderMovie()
{
CInputScript *script,*prev,*next;
Rect clipping;
Matrix identity;
clipping.reset();
// First pass to update the clipping region
for (script = this->main; script != NULL; script = script->next) {
if (script->level == -1) {
clipping.xmin = -32768;
clipping.ymin = -32768;
clipping.xmax = 32767;
clipping.ymax = 32767;
continue;
}
if (script->program == NULL) continue;
if (script->program->dl->bbox.xmin == LONG_MAX) continue;
transformBoundingBox(&clipping, &identity, &script->program->dl->bbox, 0);
script->program->render = 0;
}
if (clipping.xmin == LONG_MAX) return;
// Update the clipping region
gd->updateClippingRegion(&clipping);
gd->clearCanvas();
// Second pass to render the movie
for (script = this->main; script != NULL; script = script->next) {
if (script->level == -1) continue;
if (script->program == NULL) continue;
script->program->dl->render(gd);
}
renderFocus();
// Final pass to delete some movies
script = this->main;
prev = 0;
while (script != NULL) {
if (script->level == -1) {
next = script->next;
if (prev == 0) {
this->main = next;
} else {
prev->next = next;
}
delete script;
script = next;
} else {
prev = script;
script = script->next;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -