Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2678)

Unified Diff: chrome/browser/views/frame/browser_view.cc

Issue 16488: Add a new resizer corner overlay. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/frame/browser_view.h ('k') | chrome/common/render_messages_internal.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/frame/browser_view.cc
===================================================================
--- chrome/browser/views/frame/browser_view.cc (revision 9328)
+++ chrome/browser/views/frame/browser_view.cc (working copy)
@@ -47,13 +47,16 @@
#include "chrome/common/resource_bundle.h"
#include "chrome/common/win_util.h"
#include "chrome/views/hwnd_notification_source.h"
+#include "chrome/views/native_scroll_bar.h"
#include "chrome/views/non_client_view.h"
#include "chrome/views/view.h"
#include "chrome/views/window.h"
#include "chromium_strings.h"
#include "generated_resources.h"
+#include "webkit_resources.h"
+
using base::TimeDelta;
// static
@@ -86,7 +89,11 @@
// If not -1, windows are shown with this state.
static int explicit_show_state = -1;
-static const struct { bool separator; int command; int label; } kMenuLayout[] = {
+static const struct {
+ bool separator;
+ int command;
+ int label;
+} kMenuLayout[] = {
{ true, 0, 0 },
{ false, IDC_TASK_MANAGER, IDS_TASK_MANAGER },
{ true, 0, 0 },
@@ -111,6 +118,53 @@
};
///////////////////////////////////////////////////////////////////////////////
+// ResizeCorner, private:
+
+class ResizeCorner : public views::View {
+ public:
+ ResizeCorner() {}
+ virtual void Paint(ChromeCanvas* canvas) {
+ SkBitmap * bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed(
+ IDR_TEXTAREA_RESIZER);
+ bitmap->buildMipMap(false);
+ bool rtl_dir = (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT);
+ if (rtl_dir) {
+ canvas->TranslateInt(width(), 0);
+ canvas->ScaleInt(-1, 1);
+ canvas->save();
+ }
+ canvas->DrawBitmapInt(*bitmap, width() - bitmap->width(),
+ height() - bitmap->height());
+ if (rtl_dir)
+ canvas->restore();
+ }
+
+ static gfx::Size GetSize() {
+ return gfx::Size(views::NativeScrollBar::GetVerticalScrollBarWidth(),
+ views::NativeScrollBar::GetHorizontalScrollBarHeight());
+ }
+
+ virtual gfx::Size GetPreferredSize() {
+ return GetSize();
+ }
+
+ virtual void Layout() {
+ views::View* parent_view = GetParent();
+ if (parent_view) {
+ gfx::Size ps = GetPreferredSize();
+ // No need to handle Right to left text direction here,
+ // our parent must take care of it for us...
+ SetBounds(parent_view->width() - ps.width(),
+ parent_view->height() - ps.height(), ps.width(), ps.height());
+ }
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ResizeCorner);
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
// BrowserView, public:
// static
@@ -119,7 +173,7 @@
}
BrowserView::BrowserView(Browser* browser)
- : ClientView(NULL, NULL),
+ : views::ClientView(NULL, NULL),
frame_(NULL),
browser_(browser),
active_bookmark_bar_(NULL),
@@ -177,7 +231,7 @@
// Cancel any tabstrip animations, some of them may be invalidated by the
// window being repositioned.
// Comment out for one cycle to see if this fixes dist tests.
- //tabstrip_->DestroyDragController();
+ // tabstrip_->DestroyDragController();
status_bubble_->Reposition();
@@ -491,7 +545,7 @@
return gfx::Rect(wp.rcNormalPosition);
}
-bool BrowserView::IsMaximized() {
+bool BrowserView::IsMaximized() const {
return frame_->GetWindow()->IsMaximized();
}
@@ -535,6 +589,32 @@
return bookmark_bar_view_->GetPreferredSize().height() > 1;
}
+gfx::Rect BrowserView::GetRootWindowResizerRect() const {
+ // There is no resize corner when we are maximized
+ if (IsMaximized())
+ return gfx::Rect();
+
+ // We don't specify a resize corner size if we have a bottom shelf either.
+ // This is because we take care of drawing the resize corner on top of that
+ // shelf, so we don't want others to do it for us in this case.
+ // Currently, the only visible bottom shelf is the download shelf.
+ // Other tests should be added here if we add more bottom shelves.
+ TabContents* current_tab = browser_->GetSelectedTabContents();
+ if (current_tab && current_tab->IsDownloadShelfVisible()) {
+ DownloadShelfView* download_shelf = current_tab->GetDownloadShelfView();
+ if (download_shelf && download_shelf->IsShowing())
+ return gfx::Rect();
+ }
+
+ gfx::Rect client_rect = contents_container_->bounds();
+ gfx::Size resize_corner_size = ResizeCorner::GetSize();
+ int x = client_rect.width() - resize_corner_size.width();
+ if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT)
+ x = 0;
+ return gfx::Rect(x, client_rect.height() - resize_corner_size.height(),
+ resize_corner_size.width(), resize_corner_size.height());
+}
+
void BrowserView::ToggleBookmarkBar() {
BookmarkBarView::ToggleWhenVisible(browser_->profile());
}
@@ -887,6 +967,24 @@
// area of the window. So we need to treat hit-tests in these regions as
// hit-tests of the titlebar.
+ // There is not resize corner when we are maximised
+ if (!IsMaximized()) {
+ CRect client_rect;
+ ::GetClientRect(frame_->GetWindow()->GetHWND(), &client_rect);
+ gfx::Size resize_corner_size = ResizeCorner::GetSize();
+ gfx::Rect resize_corner_rect(client_rect.right - resize_corner_size.width(),
+ client_rect.bottom - resize_corner_size.height(),
+ resize_corner_size.width(), resize_corner_size.height());
+ bool rtl_dir = (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT);
+ if (rtl_dir)
+ resize_corner_rect.set_x(0);
+ if (resize_corner_rect.Contains(point)) {
+ if (rtl_dir)
+ return HTBOTTOMLEFT;
+ return HTBOTTOMRIGHT;
+ }
+ }
+
// Determine if the TabStrip exists and is capable of being clicked on. We
// might be a popup window without a TabStrip, or the TabStrip could be
// animating.
@@ -940,7 +1038,7 @@
return HTNOWHERE;
// If the point is somewhere else, delegate to the default implementation.
- return ClientView::NonClientHitTest(point);
+ return views::ClientView::NonClientHitTest(point);
}
///////////////////////////////////////////////////////////////////////////////
@@ -1119,7 +1217,7 @@
return LayoutBookmarkBar(top);
}
- // If we're showing a regular bookmark bar and it's not below an infobar,
+ // If we're showing a regular bookmark bar and it's not below an infobar,
// make it overlap the toolbar so that the bar items can be drawn higher.
if (active_bookmark_bar_)
top -= bookmark_bar_view_->GetToolbarOverlap();
@@ -1200,8 +1298,11 @@
bool BrowserView::MaybeShowDownloadShelf(TabContents* contents) {
views::View* new_shelf = NULL;
- if (contents && contents->IsDownloadShelfVisible())
+ if (contents && contents->IsDownloadShelfVisible()) {
new_shelf = contents->GetDownloadShelfView();
+ if (new_shelf != active_download_shelf_)
+ new_shelf->AddChildView(new ResizeCorner());
+ }
return UpdateChildViewAndLayout(new_shelf, &active_download_shelf_);
}
« no previous file with comments | « chrome/browser/views/frame/browser_view.h ('k') | chrome/common/render_messages_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698