/* FUNCTION: ViewBook :: AttachedToWindow ARGUMENTS: none RETURN: n/a DESCRIPTION: Hook function called when view attached to window (looper) */ void ViewBook :: AttachedToWindow(void) { ViewObject::AttachedToWindow(); LockGL(); glClearColor(0,0,0,1); fPages[PAGE_MIDDLE] = new Paper(kPageWidth, kPageHeight, Paper::FRONT_AND_BACK_FACING); fPages[PAGE_LEFT] = new Paper(kPageWidth, kPageHeight, Paper::FRONT_FACING); fPages[PAGE_RIGHT] = new Paper(kPageWidth, kPageHeight, Paper::BACK_FACING); for (int i=0; i < NUMBER_SOURCES; i++) fMediaSources[i] = GetDefaultMediaSource(); MediaSource *default_source = GetDefaultMediaSource(); // left page fPages[PAGE_LEFT]->SetMediaSource(Paper::FRONT_TEXTURE, fMediaSources[0]); // middle page fPages[PAGE_MIDDLE]->SetMediaSource(Paper::FRONT_TEXTURE, fMediaSources[1]); fPages[PAGE_MIDDLE]->SetMediaSource(Paper::BACK_TEXTURE, fMediaSources[2]); // right page fPages[PAGE_RIGHT]->SetMediaSource(Paper::BACK_TEXTURE, fMediaSources[3]); fPages[PAGE_RIGHT]->SetAngle(180); UnlockGL(); }
/* FUNCTION: ViewBook :: DragDropImage ARGUMENTS: texture_id mouse_x mouse_y RETURN: true if source ownership acquired DESCRIPTION: Hook function called when user drags/drops image to app window */ bool ViewBook :: SurfaceUpdate(MediaSource *source, float mouse_x, float mouse_y) { Paper::TEXTURE_SIDE side = Paper::UNASSIGNED_TEXTURE; Paper *page = GetPage(mouse_x, mouse_y, (int *)&side); LockGL(); int index = -1; if (page == fPages[PAGE_LEFT]) index = 0; else if (page == fPages[PAGE_RIGHT]) index = 3; else if (page == fPages[PAGE_MIDDLE]) { if (side == Paper::FRONT_TEXTURE) index = 1; else if (side == Paper::BACK_TEXTURE) index = 2; } if (index >= 0) { if (fMediaSources[index] != GetDefaultMediaSource()) delete fMediaSources[index]; } page->SetMediaSource(side, source); fMediaSources[index] = source; UnlockGL(); return true; }
/* FUNCTION: ViewSphere :: DragDropImage ARGUMENTS: texture_id mouse_x mouse_y RETURN: true if source ownership acquired DESCRIPTION: Hook function called when user drags/drops image to app window. TODO - actually determine exact face where refs received. For this release, we only rely on current fCubeAngle. */ bool ViewCube :: SurfaceUpdate(MediaSource *source, float mouse_x, float mouse_y) { // determine face BRect frame = Bounds(); Cube::FACE face = Cube::NUMBER_CUBE_FACES; if (mouse_y < frame.Height()*0.33f) face = Cube::FACE_TOP; else { if (fCubeAngle < 45) face = Cube::FACE_FRONT; else if (fCubeAngle < 135) face = Cube::FACE_LEFT; else if (fCubeAngle < 225) face = Cube::FACE_BACK; else if (fCubeAngle < 315) face = Cube::FACE_RIGHT; else face = Cube::FACE_FRONT; } if (fMediaSources[face] != GetDefaultMediaSource()) delete fMediaSources[face]; fMediaSources[face] = source; fCube->SetMediaSource(face, source); return true; }
/* FUNCTION: ViewCube :: ~ViewCube ARGUMENTS: n/a RETURN: n/a DESCRIPTION: Destructor */ ViewCube :: ~ViewCube() { delete fCube; for (int i=0; i < NUMBER_FACES; i++) { if (fMediaSources[i] != GetDefaultMediaSource()) delete fMediaSources[i]; } }
/* FUNCTION: ViewBook :: ~ViewBook ARGUMENTS: n/a RETURN: n/a DESCRIPTION: Destructor */ ViewBook :: ~ViewBook() { for (int i=0; i < NUMBER_SOURCES; i++) { if (fMediaSources[i] != GetDefaultMediaSource()) delete fMediaSources[i]; } for (int i=0; i < NUMBER_PAGES; i++) delete fPages[i]; }
/* FUNCTION: ViewCube :: ViewCube ARGUMENTS: none RETURN: n/a DESCRIPTION: Hook function called when view attached to window (looper) */ void ViewCube :: AttachedToWindow(void) { ViewObject::AttachedToWindow(); LockGL(); glClearColor(0,0,0,1); fCube = new Cube(0.075f); for (int i=0; i < NUMBER_FACES; i++) { fMediaSources[i] = GetDefaultMediaSource(); fCube->SetMediaSource((Cube::FACE) i, fMediaSources[i]); } UnlockGL(); }