summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-21 17:40:55 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-21 17:40:55 +0000
commit836d03896eec1efb5f624f2bceed5b76e47f6398 (patch)
treeaa3a1263b1c34f632090017552d92b08e6946a40
parentaea09b6ecd2387cb7f02c6d83e66c9f3bedfc8a8 (diff)
downloadchromium_src-836d03896eec1efb5f624f2bceed5b76e47f6398.zip
chromium_src-836d03896eec1efb5f624f2bceed5b76e47f6398.tar.gz
chromium_src-836d03896eec1efb5f624f2bceed5b76e47f6398.tar.bz2
Make PlatformScrollBar.h cross-platform. This is just moving
the scrollbar tick rects to IntRect. Review URL: http://codereview.chromium.org/7802 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3662 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/port/platform/chromium/PlatformScrollBar.h4
-rw-r--r--webkit/port/platform/chromium/PlatformScrollBarChromium.cpp90
2 files changed, 50 insertions, 44 deletions
diff --git a/webkit/port/platform/chromium/PlatformScrollBar.h b/webkit/port/platform/chromium/PlatformScrollBar.h
index 45ec726..5d2df22 100644
--- a/webkit/port/platform/chromium/PlatformScrollBar.h
+++ b/webkit/port/platform/chromium/PlatformScrollBar.h
@@ -26,8 +26,6 @@
#ifndef PlatformScrollbar_h
#define PlatformScrollbar_h
-#include <windows.h>
-
#include "Widget.h"
#include "ScrollBar.h"
#include "Timer.h"
@@ -156,7 +154,7 @@ private:
int thumbPos; // Relevant (window) mouse coordinate, and...
int scrollVal; // ...current scrollvalue, when...
} m_dragOrigin; // ...user begins dragging the thumb.
- RECT m_segmentRects[NumSegments];
+ IntRect m_segmentRects[NumSegments];
// The native coordinates of the scrollbar
// segments.
Segment m_mouseOver; // The scrollbar segment the mouse is over.
diff --git a/webkit/port/platform/chromium/PlatformScrollBarChromium.cpp b/webkit/port/platform/chromium/PlatformScrollBarChromium.cpp
index b0cc684..5fe5acb 100644
--- a/webkit/port/platform/chromium/PlatformScrollBarChromium.cpp
+++ b/webkit/port/platform/chromium/PlatformScrollBarChromium.cpp
@@ -46,6 +46,7 @@
#undef LOG
#include "base/gfx/native_theme.h"
#include "base/gfx/platform_canvas_win.h"
+#include "base/gfx/skia_utils.h"
#include "base/win_util.h"
#include "webkit/glue/webframe_impl.h"
#include "webkit/glue/webkit_glue.h"
@@ -164,18 +165,18 @@ void PlatformScrollbar::DrawTickmarks(GraphicsContext* context) const
return;
RECT track_area;
- if (m_segmentRects[Track].left != -1) {
+ if (m_segmentRects[Track].x() != -1) {
// Scroll bar is too small to draw a thumb.
- track_area.left = m_segmentRects[Track].left;
- track_area.top = m_segmentRects[Track].top;
- track_area.right = m_segmentRects[Track].right - 1;
- track_area.bottom = m_segmentRects[Track].bottom - 1;
+ track_area.left = m_segmentRects[Track].x();
+ track_area.top = m_segmentRects[Track].y();
+ track_area.right = m_segmentRects[Track].right() - 1;
+ track_area.bottom = m_segmentRects[Track].bottom() - 1;
} else {
// Find the area between the arrows of the scroll bar.
- track_area.left = m_segmentRects[BeforeThumb].left;
- track_area.top = m_segmentRects[BeforeThumb].top;
- track_area.right = m_segmentRects[AfterThumb].right - 1;
- track_area.bottom = m_segmentRects[AfterThumb].bottom - 1;
+ track_area.left = m_segmentRects[BeforeThumb].x();
+ track_area.top = m_segmentRects[BeforeThumb].y();
+ track_area.right = m_segmentRects[AfterThumb].right() - 1;
+ track_area.bottom = m_segmentRects[AfterThumb].bottom() - 1;
}
// We now can figure out the actual height and width of the track.
@@ -243,40 +244,44 @@ void PlatformScrollbar::paint(GraphicsContext* gc, const IntRect& damageRect)
gfx::PlatformCanvasWin* const canvas = skia->canvas();
// Draw the up/left arrow of the scroll bar.
+ RECT rect = gfx::SkIRectToRECT(m_segmentRects[Arrow1]);
nativeTheme->PaintScrollbarArrow(hdc, getThemeArrowState(Arrow1),
(horz ? DFCS_SCROLLLEFT : DFCS_SCROLLUP) |
getClassicThemeState(Arrow1),
- &m_segmentRects[Arrow1]);
+ &rect);
- if (m_segmentRects[Track].left != -1) {
+ if (m_segmentRects[Track].x() != -1) {
// The scroll bar is too small to draw the thumb. Just draw a
// single track between the arrows.
+ rect = gfx::SkIRectToRECT(m_segmentRects[Track]);
nativeTheme->PaintScrollbarTrack(hdc,
horz ? SBP_UPPERTRACKHORZ :
SBP_UPPERTRACKVERT,
getThemeState(Track),
getClassicThemeState(Track),
- &m_segmentRects[Track],
- &m_segmentRects[Track], canvas);
+ &rect, &rect, canvas);
DrawTickmarks(gc);
} else {
// Draw the track area before the thumb on the scroll bar.
+ rect = gfx::SkIRectToRECT(m_segmentRects[BeforeThumb]);
nativeTheme->PaintScrollbarTrack(hdc,
horz ? SBP_UPPERTRACKHORZ :
SBP_UPPERTRACKVERT,
getThemeState(BeforeThumb),
getClassicThemeState(BeforeThumb),
- &m_segmentRects[BeforeThumb],
- &m_segmentRects[BeforeThumb], canvas);
+ &rect, &rect, canvas);
// Draw the track area after the thumb on the scroll bar.
+ rect = gfx::SkIRectToRECT(m_segmentRects[BeforeThumb]);
+ RECT rect_after = gfx::SkIRectToRECT(m_segmentRects[AfterThumb]);
nativeTheme->PaintScrollbarTrack(hdc,
horz ? SBP_LOWERTRACKHORZ :
SBP_LOWERTRACKVERT,
getThemeState(AfterThumb),
getClassicThemeState(AfterThumb),
- &m_segmentRects[AfterThumb],
- &m_segmentRects[BeforeThumb], canvas);
+ &rect_after,
+ &rect,
+ canvas);
// Draw the tick-marks on the scroll bar, if any tick-marks
// exist. Note: The thumb will be drawn on top of the tick-marks,
@@ -284,28 +289,31 @@ void PlatformScrollbar::paint(GraphicsContext* gc, const IntRect& damageRect)
DrawTickmarks(gc);
// Draw the thumb (the box you drag in the scroll bar to scroll).
+ rect = gfx::SkIRectToRECT(m_segmentRects[Thumb]);
nativeTheme->PaintScrollbarThumb(hdc,
horz ? SBP_THUMBBTNHORZ :
SBP_THUMBBTNVERT,
getThemeState(Thumb),
getClassicThemeState(Thumb),
- &m_segmentRects[Thumb]);
+ &rect);
// Draw the gripper (the three little lines on the thumb).
+ rect = gfx::SkIRectToRECT(m_segmentRects[Thumb]);
nativeTheme->PaintScrollbarThumb(hdc,
horz ? SBP_GRIPPERHORZ :
SBP_GRIPPERVERT,
getThemeState(Thumb),
getClassicThemeState(Thumb),
- &m_segmentRects[Thumb]);
+ &rect);
}
// Draw the down/right arrow of the scroll bar.
+ rect = gfx::SkIRectToRECT(m_segmentRects[Arrow2]);
nativeTheme->PaintScrollbarArrow(hdc, getThemeArrowState(Arrow2),
(horz ?
DFCS_SCROLLRIGHT : DFCS_SCROLLDOWN) |
getClassicThemeState(Arrow2),
- &m_segmentRects[Arrow2]);
+ &rect);
gc->platformContext()->canvas()->endPlatformPaint();
gc->restore();
@@ -441,28 +449,28 @@ void PlatformScrollbar::handleMouseMoveEventWhenCapturing(const PlatformMouseEve
if (orientation() == HorizontalScrollbar) {
xCancelDistance = kOffEndMultiplier * horizontalScrollbarHeight();
yCancelDistance = kOffSideMultiplier * horizontalScrollbarHeight();
- backgroundSpan = m_segmentRects[AfterThumb].right -
- m_segmentRects[BeforeThumb].left;
- thumbGirth = m_segmentRects[Thumb].right - m_segmentRects[Thumb].left;
+ backgroundSpan = m_segmentRects[AfterThumb].right() -
+ m_segmentRects[BeforeThumb].x();
+ thumbGirth = m_segmentRects[Thumb].right() - m_segmentRects[Thumb].x();
delta = pos.x() - m_dragOrigin.thumbPos;
} else {
xCancelDistance = kOffSideMultiplier * verticalScrollbarWidth();
yCancelDistance = kOffEndMultiplier * verticalScrollbarWidth();
- backgroundSpan = m_segmentRects[AfterThumb].bottom -
- m_segmentRects[BeforeThumb].top;
- thumbGirth = m_segmentRects[Thumb].bottom - m_segmentRects[Thumb].top;
+ backgroundSpan = m_segmentRects[AfterThumb].bottom() -
+ m_segmentRects[BeforeThumb].y();
+ thumbGirth = m_segmentRects[Thumb].bottom() - m_segmentRects[Thumb].y();
delta = pos.y() - m_dragOrigin.thumbPos;
}
// Snap scrollbar back to drag origin if mouse gets too far away
if ((m_lastNativePos.x() <
- (m_segmentRects[BeforeThumb].left - xCancelDistance)) ||
+ (m_segmentRects[BeforeThumb].x() - xCancelDistance)) ||
(m_lastNativePos.x() >
- (m_segmentRects[AfterThumb].right + xCancelDistance)) ||
+ (m_segmentRects[AfterThumb].right() + xCancelDistance)) ||
(m_lastNativePos.y() <
- (m_segmentRects[BeforeThumb].top - yCancelDistance)) ||
+ (m_segmentRects[BeforeThumb].y() - yCancelDistance)) ||
(m_lastNativePos.y() >
- (m_segmentRects[AfterThumb].bottom + yCancelDistance)))
+ (m_segmentRects[AfterThumb].bottom() + yCancelDistance)))
delta = 0;
// Convert delta from pixel coords to scrollbar logical coords
@@ -572,7 +580,7 @@ void PlatformScrollbar::layout()
return;
m_needsLayout = false;
- const RECT invalid = {-1, -1, -1, -1};
+ const IntRect invalid(-1, -1, 0, 0);
if (m_totalSize <= 0) {
for (int i = 0; i < NumSegments; ++i)
m_segmentRects[i] = invalid;
@@ -602,7 +610,7 @@ void PlatformScrollbar::layout()
// Scrollbar: |<|--------|XXX|------|>|
// Start arrow: |<|
*changingCoord2 += buttonGirth;
- m_segmentRects[Arrow1] = box;
+ m_segmentRects[Arrow1] = gfx::RECTToSkIRect(box);
if (thumbGirth >= backgroundSpan) {
if (backgroundSpan == 0) {
@@ -611,7 +619,7 @@ void PlatformScrollbar::layout()
// Track: |-------------------|
*changingCoord1 = *changingCoord2;
*changingCoord2 += backgroundSpan;
- m_segmentRects[Track] = box;
+ m_segmentRects[Track] = gfx::RECTToSkIRect(box);
}
m_segmentRects[BeforeThumb] = invalid;
@@ -625,23 +633,23 @@ void PlatformScrollbar::layout()
// Before thumb: |--------|
*changingCoord1 = *changingCoord2;
*changingCoord2 += thumbOffset;
- m_segmentRects[BeforeThumb] = box;
+ m_segmentRects[BeforeThumb] = gfx::RECTToSkIRect(box);
// Thumb: |XXX|
*changingCoord1 = *changingCoord2;
*changingCoord2 += thumbGirth;
- m_segmentRects[Thumb] = box;
+ m_segmentRects[Thumb] = gfx::RECTToSkIRect(box);
// After thumb: |------|
*changingCoord1 = *changingCoord2;
*changingCoord2 += backgroundSpan - (thumbOffset + thumbGirth);
- m_segmentRects[AfterThumb] = box;
+ m_segmentRects[AfterThumb] = gfx::RECTToSkIRect(box);
}
// End arrow: |>|
*changingCoord1 = *changingCoord2;
*changingCoord2 += buttonGirth;
- m_segmentRects[Arrow2] = box;
+ m_segmentRects[Arrow2] = gfx::RECTToSkIRect(box);
// Changed layout, so need to update m_mouseOver and m_autorepeatTimer
updateMousePositionInternal();
@@ -667,10 +675,10 @@ void PlatformScrollbar::updateMousePositionInternal()
{
m_mouseOver = None;
for (int i = 0; i < NumSegments; ++i) {
- if ((m_lastNativePos.x() >= m_segmentRects[i].left) &&
- (m_lastNativePos.x() < m_segmentRects[i].right) &&
- (m_lastNativePos.y() >= m_segmentRects[i].top) &&
- (m_lastNativePos.y() < m_segmentRects[i].bottom)) {
+ if ((m_lastNativePos.x() >= m_segmentRects[i].x()) &&
+ (m_lastNativePos.x() < m_segmentRects[i].right()) &&
+ (m_lastNativePos.y() >= m_segmentRects[i].y()) &&
+ (m_lastNativePos.y() < m_segmentRects[i].bottom())) {
m_mouseOver = static_cast<Segment>(i);
break;
}