| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 static int cButtonHitInset[] = { 3, 2 }; | 49 static int cButtonHitInset[] = { 3, 2 }; |
| 50 // cRealButtonLength - cButtonInset | 50 // cRealButtonLength - cButtonInset |
| 51 static int cButtonLength[] = { 14, 10 }; | 51 static int cButtonLength[] = { 14, 10 }; |
| 52 static int cScrollbarThickness[] = { 15, 11 }; | 52 static int cScrollbarThickness[] = { 15, 11 }; |
| 53 static int cButtonInset[] = { 14, 11 }; | 53 static int cButtonInset[] = { 14, 11 }; |
| 54 static int cThumbMinLength[] = { 26, 20 }; | 54 static int cThumbMinLength[] = { 26, 20 }; |
| 55 | 55 |
| 56 static int cOuterButtonLength[] = { 16, 14 }; // The outer button in a double bu
tton pair is a bit bigger. | 56 static int cOuterButtonLength[] = { 16, 14 }; // The outer button in a double bu
tton pair is a bit bigger. |
| 57 static int cOuterButtonOverlap = 2; | 57 static int cOuterButtonOverlap = 2; |
| 58 | 58 |
| 59 static ScrollbarButtonsPlacement gButtonPlacement = ScrollbarButtonsDoubleEnd; | 59 static ScrollbarButtonsPlacement gButtonPlacement = ScrollbarButtonsPlacementDou
bleEnd; |
| 60 | 60 |
| 61 void ScrollbarThemeMacNonOverlayAPI::updateButtonPlacement(const std::string& bu
ttonPlacement) | 61 void ScrollbarThemeMacNonOverlayAPI::updateButtonPlacement(ScrollbarButtonsPlace
ment buttonPlacement) |
| 62 { | 62 { |
| 63 if (buttonPlacement == "Single") | 63 gButtonPlacement = buttonPlacement; |
| 64 gButtonPlacement = ScrollbarButtonsSingle; | |
| 65 else if (buttonPlacement == "DoubleMin") | |
| 66 gButtonPlacement = ScrollbarButtonsDoubleStart; | |
| 67 else if (buttonPlacement == "DoubleBoth") | |
| 68 gButtonPlacement = ScrollbarButtonsDoubleBoth; | |
| 69 else | |
| 70 gButtonPlacement = ScrollbarButtonsDoubleEnd; | |
| 71 } | 64 } |
| 72 | 65 |
| 73 // Override ScrollbarThemeMacCommon::paint() to add support for the following: | 66 // Override ScrollbarThemeMacCommon::paint() to add support for the following: |
| 74 // - drawing using WebThemeEngine functions | 67 // - drawing using WebThemeEngine functions |
| 75 // - drawing tickmarks | 68 // - drawing tickmarks |
| 76 // - Skia specific changes | 69 // - Skia specific changes |
| 77 bool ScrollbarThemeMacNonOverlayAPI::paint(ScrollbarThemeClient* scrollbar, Grap
hicsContext* context, const IntRect& damageRect) | 70 bool ScrollbarThemeMacNonOverlayAPI::paint(ScrollbarThemeClient* scrollbar, Grap
hicsContext* context, const IntRect& damageRect) |
| 78 { | 71 { |
| 79 DisplayItem::Type displayItemType = scrollbar->orientation() == HorizontalSc
rollbar ? DisplayItem::ScrollbarHorizontal : DisplayItem::ScrollbarVertical; | 72 DisplayItem::Type displayItemType = scrollbar->orientation() == HorizontalSc
rollbar ? DisplayItem::ScrollbarHorizontal : DisplayItem::ScrollbarVertical; |
| 80 if (DrawingRecorder::useCachedDrawingIfPossible(*context, *scrollbar, displa
yItemType)) | 73 if (DrawingRecorder::useCachedDrawingIfPossible(*context, *scrollbar, displa
yItemType)) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 return cScrollbarThickness[controlSize]; | 160 return cScrollbarThickness[controlSize]; |
| 168 } | 161 } |
| 169 | 162 |
| 170 ScrollbarButtonsPlacement ScrollbarThemeMacNonOverlayAPI::buttonsPlacement() con
st | 163 ScrollbarButtonsPlacement ScrollbarThemeMacNonOverlayAPI::buttonsPlacement() con
st |
| 171 { | 164 { |
| 172 return gButtonPlacement; | 165 return gButtonPlacement; |
| 173 } | 166 } |
| 174 | 167 |
| 175 bool ScrollbarThemeMacNonOverlayAPI::hasButtons(ScrollbarThemeClient* scrollbar) | 168 bool ScrollbarThemeMacNonOverlayAPI::hasButtons(ScrollbarThemeClient* scrollbar) |
| 176 { | 169 { |
| 177 return scrollbar->enabled() && buttonsPlacement() != ScrollbarButtonsNone | 170 return scrollbar->enabled() && buttonsPlacement() != ScrollbarButtonsPlaceme
ntNone |
| 178 && (scrollbar->orientation() == HorizontalScrollbar | 171 && (scrollbar->orientation() == HorizontalScrollbar |
| 179 ? scrollbar->width() | 172 ? scrollbar->width() |
| 180 : scrollbar->height()) >= 2 * (cRealButtonLength[scrollbar->control
Size()] - cButtonHitInset[scrollbar->controlSize()]); | 173 : scrollbar->height()) >= 2 * (cRealButtonLength[scrollbar->control
Size()] - cButtonHitInset[scrollbar->controlSize()]); |
| 181 } | 174 } |
| 182 | 175 |
| 183 bool ScrollbarThemeMacNonOverlayAPI::hasThumb(ScrollbarThemeClient* scrollbar) | 176 bool ScrollbarThemeMacNonOverlayAPI::hasThumb(ScrollbarThemeClient* scrollbar) |
| 184 { | 177 { |
| 185 int minLengthForThumb = 2 * cButtonInset[scrollbar->controlSize()] + cThumbM
inLength[scrollbar->controlSize()] + 1; | 178 int minLengthForThumb = 2 * cButtonInset[scrollbar->controlSize()] + cThumbM
inLength[scrollbar->controlSize()] + 1; |
| 186 return scrollbar->enabled() && (scrollbar->orientation() == HorizontalScroll
bar ? | 179 return scrollbar->enabled() && (scrollbar->orientation() == HorizontalScroll
bar ? |
| 187 scrollbar->width() : | 180 scrollbar->width() : |
| 188 scrollbar->height()) >= minLengthForThumb; | 181 scrollbar->height()) >= minLengthForThumb; |
| 189 } | 182 } |
| 190 | 183 |
| 191 static IntRect buttonRepaintRect(const IntRect& buttonRect, ScrollbarOrientation
orientation, ScrollbarControlSize controlSize, bool start) | 184 static IntRect buttonRepaintRect(const IntRect& buttonRect, ScrollbarOrientation
orientation, ScrollbarControlSize controlSize, bool start) |
| 192 { | 185 { |
| 193 ASSERT(gButtonPlacement != ScrollbarButtonsNone); | 186 ASSERT(gButtonPlacement != ScrollbarButtonsPlacementNone); |
| 194 | 187 |
| 195 IntRect paintRect(buttonRect); | 188 IntRect paintRect(buttonRect); |
| 196 if (orientation == HorizontalScrollbar) { | 189 if (orientation == HorizontalScrollbar) { |
| 197 paintRect.setWidth(cRealButtonLength[controlSize]); | 190 paintRect.setWidth(cRealButtonLength[controlSize]); |
| 198 if (!start) | 191 if (!start) |
| 199 paintRect.setX(buttonRect.x() - (cRealButtonLength[controlSize] - bu
ttonRect.width())); | 192 paintRect.setX(buttonRect.x() - (cRealButtonLength[controlSize] - bu
ttonRect.width())); |
| 200 } else { | 193 } else { |
| 201 paintRect.setHeight(cRealButtonLength[controlSize]); | 194 paintRect.setHeight(cRealButtonLength[controlSize]); |
| 202 if (!start) | 195 if (!start) |
| 203 paintRect.setY(buttonRect.y() - (cRealButtonLength[controlSize] - bu
ttonRect.height())); | 196 paintRect.setY(buttonRect.y() - (cRealButtonLength[controlSize] - bu
ttonRect.height())); |
| 204 } | 197 } |
| 205 | 198 |
| 206 return paintRect; | 199 return paintRect; |
| 207 } | 200 } |
| 208 | 201 |
| 209 IntRect ScrollbarThemeMacNonOverlayAPI::backButtonRect(ScrollbarThemeClient* scr
ollbar, ScrollbarPart part, bool painting) | 202 IntRect ScrollbarThemeMacNonOverlayAPI::backButtonRect(ScrollbarThemeClient* scr
ollbar, ScrollbarPart part, bool painting) |
| 210 { | 203 { |
| 211 IntRect result; | 204 IntRect result; |
| 212 | 205 |
| 213 if (part == BackButtonStartPart && (buttonsPlacement() == ScrollbarButtonsNo
ne || buttonsPlacement() == ScrollbarButtonsDoubleEnd)) | 206 if (part == BackButtonStartPart && (buttonsPlacement() == ScrollbarButtonsPl
acementNone || buttonsPlacement() == ScrollbarButtonsPlacementDoubleEnd)) |
| 214 return result; | 207 return result; |
| 215 | 208 |
| 216 if (part == BackButtonEndPart && (buttonsPlacement() == ScrollbarButtonsNone
|| buttonsPlacement() == ScrollbarButtonsDoubleStart || buttonsPlacement() == S
crollbarButtonsSingle)) | 209 if (part == BackButtonEndPart && (buttonsPlacement() == ScrollbarButtonsPlac
ementNone || buttonsPlacement() == ScrollbarButtonsPlacementDoubleStart || butto
nsPlacement() == ScrollbarButtonsPlacementSingle)) |
| 217 return result; | 210 return result; |
| 218 | 211 |
| 219 int thickness = scrollbarThickness(scrollbar->controlSize()); | 212 int thickness = scrollbarThickness(scrollbar->controlSize()); |
| 220 bool outerButton = part == BackButtonStartPart && (buttonsPlacement() == Scr
ollbarButtonsDoubleStart || buttonsPlacement() == ScrollbarButtonsDoubleBoth); | 213 bool outerButton = part == BackButtonStartPart && (buttonsPlacement() == Scr
ollbarButtonsPlacementDoubleStart || buttonsPlacement() == ScrollbarButtonsPlace
mentDoubleBoth); |
| 221 if (outerButton) { | 214 if (outerButton) { |
| 222 if (scrollbar->orientation() == HorizontalScrollbar) | 215 if (scrollbar->orientation() == HorizontalScrollbar) |
| 223 result = IntRect(scrollbar->x(), scrollbar->y(), cOuterButtonLength[
scrollbar->controlSize()] + (painting ? cOuterButtonOverlap : 0), thickness); | 216 result = IntRect(scrollbar->x(), scrollbar->y(), cOuterButtonLength[
scrollbar->controlSize()] + (painting ? cOuterButtonOverlap : 0), thickness); |
| 224 else | 217 else |
| 225 result = IntRect(scrollbar->x(), scrollbar->y(), thickness, cOuterBu
ttonLength[scrollbar->controlSize()] + (painting ? cOuterButtonOverlap : 0)); | 218 result = IntRect(scrollbar->x(), scrollbar->y(), thickness, cOuterBu
ttonLength[scrollbar->controlSize()] + (painting ? cOuterButtonOverlap : 0)); |
| 226 return result; | 219 return result; |
| 227 } | 220 } |
| 228 | 221 |
| 229 // Our repaint rect is slightly larger, since we are a button that is adjace
nt to the track. | 222 // Our repaint rect is slightly larger, since we are a button that is adjace
nt to the track. |
| 230 if (scrollbar->orientation() == HorizontalScrollbar) { | 223 if (scrollbar->orientation() == HorizontalScrollbar) { |
| 231 int start = part == BackButtonStartPart ? scrollbar->x() : scrollbar->x(
) + scrollbar->width() - cOuterButtonLength[scrollbar->controlSize()] - cButtonL
ength[scrollbar->controlSize()]; | 224 int start = part == BackButtonStartPart ? scrollbar->x() : scrollbar->x(
) + scrollbar->width() - cOuterButtonLength[scrollbar->controlSize()] - cButtonL
ength[scrollbar->controlSize()]; |
| 232 result = IntRect(start, scrollbar->y(), cButtonLength[scrollbar->control
Size()], thickness); | 225 result = IntRect(start, scrollbar->y(), cButtonLength[scrollbar->control
Size()], thickness); |
| 233 } else { | 226 } else { |
| 234 int start = part == BackButtonStartPart ? scrollbar->y() : scrollbar->y(
) + scrollbar->height() - cOuterButtonLength[scrollbar->controlSize()] - cButton
Length[scrollbar->controlSize()]; | 227 int start = part == BackButtonStartPart ? scrollbar->y() : scrollbar->y(
) + scrollbar->height() - cOuterButtonLength[scrollbar->controlSize()] - cButton
Length[scrollbar->controlSize()]; |
| 235 result = IntRect(scrollbar->x(), start, thickness, cButtonLength[scrollb
ar->controlSize()]); | 228 result = IntRect(scrollbar->x(), start, thickness, cButtonLength[scrollb
ar->controlSize()]); |
| 236 } | 229 } |
| 237 | 230 |
| 238 if (painting) | 231 if (painting) |
| 239 return buttonRepaintRect(result, scrollbar->orientation(), scrollbar->co
ntrolSize(), part == BackButtonStartPart); | 232 return buttonRepaintRect(result, scrollbar->orientation(), scrollbar->co
ntrolSize(), part == BackButtonStartPart); |
| 240 return result; | 233 return result; |
| 241 } | 234 } |
| 242 | 235 |
| 243 IntRect ScrollbarThemeMacNonOverlayAPI::forwardButtonRect(ScrollbarThemeClient*
scrollbar, ScrollbarPart part, bool painting) | 236 IntRect ScrollbarThemeMacNonOverlayAPI::forwardButtonRect(ScrollbarThemeClient*
scrollbar, ScrollbarPart part, bool painting) |
| 244 { | 237 { |
| 245 IntRect result; | 238 IntRect result; |
| 246 | 239 |
| 247 if (part == ForwardButtonEndPart && (buttonsPlacement() == ScrollbarButtonsN
one || buttonsPlacement() == ScrollbarButtonsDoubleStart)) | 240 if (part == ForwardButtonEndPart && (buttonsPlacement() == ScrollbarButtonsP
lacementNone || buttonsPlacement() == ScrollbarButtonsPlacementDoubleStart)) |
| 248 return result; | 241 return result; |
| 249 | 242 |
| 250 if (part == ForwardButtonStartPart && (buttonsPlacement() == ScrollbarButton
sNone || buttonsPlacement() == ScrollbarButtonsDoubleEnd || buttonsPlacement() =
= ScrollbarButtonsSingle)) | 243 if (part == ForwardButtonStartPart && (buttonsPlacement() == ScrollbarButton
sPlacementNone || buttonsPlacement() == ScrollbarButtonsPlacementDoubleEnd || bu
ttonsPlacement() == ScrollbarButtonsPlacementSingle)) |
| 251 return result; | 244 return result; |
| 252 | 245 |
| 253 int thickness = scrollbarThickness(scrollbar->controlSize()); | 246 int thickness = scrollbarThickness(scrollbar->controlSize()); |
| 254 int outerButtonLength = cOuterButtonLength[scrollbar->controlSize()]; | 247 int outerButtonLength = cOuterButtonLength[scrollbar->controlSize()]; |
| 255 int buttonLength = cButtonLength[scrollbar->controlSize()]; | 248 int buttonLength = cButtonLength[scrollbar->controlSize()]; |
| 256 | 249 |
| 257 bool outerButton = part == ForwardButtonEndPart && (buttonsPlacement() == Sc
rollbarButtonsDoubleEnd || buttonsPlacement() == ScrollbarButtonsDoubleBoth); | 250 bool outerButton = part == ForwardButtonEndPart && (buttonsPlacement() == Sc
rollbarButtonsPlacementDoubleEnd || buttonsPlacement() == ScrollbarButtonsPlacem
entDoubleBoth); |
| 258 if (outerButton) { | 251 if (outerButton) { |
| 259 if (scrollbar->orientation() == HorizontalScrollbar) { | 252 if (scrollbar->orientation() == HorizontalScrollbar) { |
| 260 result = IntRect(scrollbar->x() + scrollbar->width() - outerButtonLe
ngth, scrollbar->y(), outerButtonLength, thickness); | 253 result = IntRect(scrollbar->x() + scrollbar->width() - outerButtonLe
ngth, scrollbar->y(), outerButtonLength, thickness); |
| 261 if (painting) | 254 if (painting) |
| 262 result.inflateX(cOuterButtonOverlap); | 255 result.inflateX(cOuterButtonOverlap); |
| 263 } else { | 256 } else { |
| 264 result = IntRect(scrollbar->x(), scrollbar->y() + scrollbar->height(
) - outerButtonLength, thickness, outerButtonLength); | 257 result = IntRect(scrollbar->x(), scrollbar->y() + scrollbar->height(
) - outerButtonLength, thickness, outerButtonLength); |
| 265 if (painting) | 258 if (painting) |
| 266 result.inflateY(cOuterButtonOverlap); | 259 result.inflateY(cOuterButtonOverlap); |
| 267 } | 260 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 286 return scrollbar->frameRect(); | 279 return scrollbar->frameRect(); |
| 287 | 280 |
| 288 IntRect result; | 281 IntRect result; |
| 289 int thickness = scrollbarThickness(scrollbar->controlSize()); | 282 int thickness = scrollbarThickness(scrollbar->controlSize()); |
| 290 int startWidth = 0; | 283 int startWidth = 0; |
| 291 int endWidth = 0; | 284 int endWidth = 0; |
| 292 int outerButtonLength = cOuterButtonLength[scrollbar->controlSize()]; | 285 int outerButtonLength = cOuterButtonLength[scrollbar->controlSize()]; |
| 293 int buttonLength = cButtonLength[scrollbar->controlSize()]; | 286 int buttonLength = cButtonLength[scrollbar->controlSize()]; |
| 294 int doubleButtonLength = outerButtonLength + buttonLength; | 287 int doubleButtonLength = outerButtonLength + buttonLength; |
| 295 switch (buttonsPlacement()) { | 288 switch (buttonsPlacement()) { |
| 296 case ScrollbarButtonsSingle: | 289 case ScrollbarButtonsPlacementSingle: |
| 297 startWidth = buttonLength; | 290 startWidth = buttonLength; |
| 298 endWidth = buttonLength; | 291 endWidth = buttonLength; |
| 299 break; | 292 break; |
| 300 case ScrollbarButtonsDoubleStart: | 293 case ScrollbarButtonsPlacementDoubleStart: |
| 301 startWidth = doubleButtonLength; | 294 startWidth = doubleButtonLength; |
| 302 break; | 295 break; |
| 303 case ScrollbarButtonsDoubleEnd: | 296 case ScrollbarButtonsPlacementDoubleEnd: |
| 304 endWidth = doubleButtonLength; | 297 endWidth = doubleButtonLength; |
| 305 break; | 298 break; |
| 306 case ScrollbarButtonsDoubleBoth: | 299 case ScrollbarButtonsPlacementDoubleBoth: |
| 307 startWidth = doubleButtonLength; | 300 startWidth = doubleButtonLength; |
| 308 endWidth = doubleButtonLength; | 301 endWidth = doubleButtonLength; |
| 309 break; | 302 break; |
| 310 default: | 303 default: |
| 311 break; | 304 break; |
| 312 } | 305 } |
| 313 | 306 |
| 314 int totalWidth = startWidth + endWidth; | 307 int totalWidth = startWidth + endWidth; |
| 315 if (scrollbar->orientation() == HorizontalScrollbar) | 308 if (scrollbar->orientation() == HorizontalScrollbar) |
| 316 return IntRect(scrollbar->x() + startWidth, scrollbar->y(), scrollbar->w
idth() - totalWidth, thickness); | 309 return IntRect(scrollbar->x() + startWidth, scrollbar->y(), scrollbar->w
idth() - totalWidth, thickness); |
| 317 return IntRect(scrollbar->x(), scrollbar->y() + startWidth, thickness, scrol
lbar->height() - totalWidth); | 310 return IntRect(scrollbar->x(), scrollbar->y() + startWidth, thickness, scrol
lbar->height() - totalWidth); |
| 318 } | 311 } |
| 319 | 312 |
| 320 int ScrollbarThemeMacNonOverlayAPI::minimumThumbLength(ScrollbarThemeClient* scr
ollbar) | 313 int ScrollbarThemeMacNonOverlayAPI::minimumThumbLength(ScrollbarThemeClient* scr
ollbar) |
| 321 { | 314 { |
| 322 return cThumbMinLength[scrollbar->controlSize()]; | 315 return cThumbMinLength[scrollbar->controlSize()]; |
| 323 } | 316 } |
| 324 | 317 |
| 325 } | 318 } |
| OLD | NEW |