From f157030d2e6f467b0ce61cfca868051fb3868078 Mon Sep 17 00:00:00 2001 From: stippi Date: Tue, 4 May 2010 12:23:56 +0000 Subject: [PATCH] Implemented most basic fullscreen feature. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@482 94f232f2-1747-11df-bad5-a5bfde151594 --- src/apps/webpositive/BrowserWindow.cpp | 106 ++++++++++++++++++++----- src/apps/webpositive/BrowserWindow.h | 13 +++ 2 files changed, 100 insertions(+), 19 deletions(-) diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 742b910562..44abfb4534 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -76,29 +76,31 @@ enum { - OPEN_LOCATION = 'open', - GO_BACK = 'goba', - GO_FORWARD = 'gofo', - STOP = 'stop', - GOTO_URL = 'goul', - RELOAD = 'reld', - CLEAR_HISTORY = 'clhs', + 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', + CREATE_BOOKMARK = 'crbm', + SHOW_BOOKMARKS = 'shbm', - ZOOM_FACTOR_INCREASE = 'zfin', - ZOOM_FACTOR_DECREASE = 'zfdc', - ZOOM_FACTOR_RESET = 'zfrs', - ZOOM_TEXT_ONLY = 'zfto', + 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', + TOGGLE_FULLSCREEN = 'tgfs', - SELECT_TAB = 'sltb', + 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', }; @@ -189,6 +191,7 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, 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 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, 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 @@ BrowserWindow::MessageReceived(BMessage* message) // already zoomed. break; + case TOGGLE_FULLSCREEN: + _ToggleFullscreen(); + break; + case EDIT_FIND_NEXT: CurrentWebView()->FindString(fFindTextControl->Text(), true, fFindCaseSensitiveCheckBox->Value()); @@ -770,6 +783,29 @@ BrowserWindow::MenusBeginning() } +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 @@ BrowserWindow::_ShowPage(BWebView* view) } 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()); +} + diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 610029ac3d..3ae549af66 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -90,6 +90,12 @@ public: 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 @@ private: bool _ShowPage(BWebView* view); + void _ToggleFullscreen(); + void _ResizeToScreen(); + private: BMenu* fHistoryMenu; int32 fHistoryMenuFixedItemCount; @@ -174,6 +183,7 @@ private: BMenuItem* fFindPreviousMenuItem; BMenuItem* fFindNextMenuItem; BMenuItem* fZoomTextOnlyMenuItem; + BMenuItem* fFullscreenItem; BMenuItem* fBackMenuItem; BMenuItem* fForwardMenuItem; @@ -194,6 +204,9 @@ private: BCheckBox* fFindCaseSensitiveCheckBox; TabManager* fTabManager; + bool fIsFullscreen; + BRect fNonFullscreenWindowFrame; + // cached settings SettingsMessage* fAppSettings; bool fZoomTextOnly;