Author: stippi Date: Tue May 4 12:23:56 2010 New Revision: 482 URL: http://mmlr.dyndns.org/changeset/482 Log: Implemented most basic fullscreen feature. Modified: webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h Modified: webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp Tue May 4 12:02:24 2010 (r481) +++ webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp Tue May 4 12:23:56 2010 (r482) @@ -76,29 +76,31 @@ enum { - OPEN_LOCATION = 'open', - GO_BACK = 'goba', - GO_FORWARD = 'gofo', - STOP = 'stop', - GOTO_URL = 'goul', - RELOAD = 'reld', - CLEAR_HISTORY = 'clhs', - - CREATE_BOOKMARK = 'crbm', - SHOW_BOOKMARKS = 'shbm', - - ZOOM_FACTOR_INCREASE = 'zfin', - ZOOM_FACTOR_DECREASE = 'zfdc', - ZOOM_FACTOR_RESET = 'zfrs', - ZOOM_TEXT_ONLY = 'zfto', - - EDIT_SHOW_FIND_GROUP = 'sfnd', - EDIT_HIDE_FIND_GROUP = 'hfnd', - EDIT_FIND_NEXT = 'fndn', - EDIT_FIND_PREVIOUS = 'fndp', - FIND_TEXT_CHANGED = 'ftxt', + OPEN_LOCATION = 'open', + GO_BACK = 'goba', + GO_FORWARD = 'gofo', + STOP = 'stop', + GOTO_URL = 'goul', + RELOAD = 'reld', + CLEAR_HISTORY = 'clhs', + + CREATE_BOOKMARK = 'crbm', + SHOW_BOOKMARKS = 'shbm', + + ZOOM_FACTOR_INCREASE = 'zfin', + ZOOM_FACTOR_DECREASE = 'zfdc', + ZOOM_FACTOR_RESET = 'zfrs', + ZOOM_TEXT_ONLY = 'zfto', + + TOGGLE_FULLSCREEN = 'tgfs', + + EDIT_SHOW_FIND_GROUP = 'sfnd', + EDIT_HIDE_FIND_GROUP = 'hfnd', + EDIT_FIND_NEXT = 'fndn', + EDIT_FIND_PREVIOUS = 'fndp', + FIND_TEXT_CHANGED = 'ftxt', - SELECT_TAB = 'sltb', + SELECT_TAB = 'sltb', }; @@ -189,6 +191,7 @@ BWebWindow(frame, kApplicationName, B_DOCUMENT_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS), + fIsFullscreen(false), fAppSettings(appSettings), fZoomTextOnly(true), fShowTabsIfSinglePageOpen(true) @@ -274,6 +277,12 @@ new BMessage(ZOOM_TEXT_ONLY)); fZoomTextOnlyMenuItem->SetMarked(fZoomTextOnly); menu->AddItem(fZoomTextOnlyMenuItem); + + menu->AddSeparatorItem(); + fFullscreenItem = new BMenuItem("Fullscreen", + new BMessage(TOGGLE_FULLSCREEN), B_RETURN); + menu->AddItem(fFullscreenItem); + mainMenu->AddItem(menu); fHistoryMenu = new BMenu("History"); @@ -604,6 +613,10 @@ // already zoomed. break; + case TOGGLE_FULLSCREEN: + _ToggleFullscreen(); + break; + case EDIT_FIND_NEXT: CurrentWebView()->FindString(fFindTextControl->Text(), true, fFindCaseSensitiveCheckBox->Value()); @@ -770,6 +783,29 @@ } +void +BrowserWindow::Zoom(BPoint origin, float width, float height) +{ + _ToggleFullscreen(); +} + + +void +BrowserWindow::ScreenChanged(BRect screenSize, color_space format) +{ + if (fIsFullscreen) + _ResizeToScreen(); +} + + +void +BrowserWindow::WorkspacesChanged(uint32 oldWorkspaces, uint32 newWorkspaces) +{ + if (fIsFullscreen) + _ResizeToScreen(); +} + + static bool viewIsChild(const BView* parent, const BView* view) { @@ -1693,3 +1729,35 @@ } return true; } + + +void +BrowserWindow::_ToggleFullscreen() +{ + if (fIsFullscreen) { + MoveTo(fNonFullscreenWindowFrame.LeftTop()); + ResizeTo(fNonFullscreenWindowFrame.Width(), + fNonFullscreenWindowFrame.Height()); + + SetFlags(Flags() & ~(B_NOT_RESIZABLE | B_NOT_MOVABLE)); + SetLook(B_DOCUMENT_WINDOW_LOOK); + } else { + fNonFullscreenWindowFrame = Frame(); + _ResizeToScreen(); + + SetFlags(Flags() | (B_NOT_RESIZABLE | B_NOT_MOVABLE)); + SetLook(B_TITLED_WINDOW_LOOK); + } + fIsFullscreen = !fIsFullscreen; + fFullscreenItem->SetMarked(fIsFullscreen); +} + + +void +BrowserWindow::_ResizeToScreen() +{ + BScreen screen(this); + MoveTo(0, 0); + ResizeTo(screen.Frame().Width(), screen.Frame().Height()); +} + Modified: webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h ============================================================================== --- webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h Tue May 4 12:02:24 2010 (r481) +++ webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h Tue May 4 12:23:56 2010 (r482) @@ -90,6 +90,12 @@ virtual bool QuitRequested(); virtual void MenusBeginning(); + virtual void Zoom(BPoint origin, float width, float height); + virtual void ScreenChanged(BRect screenSize, + color_space format); + virtual void WorkspacesChanged(uint32 oldWorkspaces, + uint32 newWorkspaces); + virtual void SetCurrentWebView(BWebView* view); void CreateNewTab(const BString& url, bool select, @@ -164,6 +170,9 @@ bool _ShowPage(BWebView* view); + void _ToggleFullscreen(); + void _ResizeToScreen(); + private: BMenu* fHistoryMenu; int32 fHistoryMenuFixedItemCount; @@ -174,6 +183,7 @@ BMenuItem* fFindPreviousMenuItem; BMenuItem* fFindNextMenuItem; BMenuItem* fZoomTextOnlyMenuItem; + BMenuItem* fFullscreenItem; BMenuItem* fBackMenuItem; BMenuItem* fForwardMenuItem; @@ -194,6 +204,9 @@ BCheckBox* fFindCaseSensitiveCheckBox; TabManager* fTabManager; + bool fIsFullscreen; + BRect fNonFullscreenWindowFrame; + // cached settings SettingsMessage* fAppSettings; bool fZoomTextOnly;