Change scrollbar to new theme styles

This commit is contained in:
David Capello 2017-03-10 22:42:15 -03:00
parent 36ee5a39c8
commit aabdb11779
9 changed files with 80 additions and 99 deletions

View File

@ -411,42 +411,6 @@
<stylesheet> <stylesheet>
<!-- scrollbar -->
<style id="scrollbar">
<background part="scrollbar_bg" repeat="repeat" />
</style>
<style id="scrollbar_thumb">
<background part="scrollbar_thumb" repeat="repeat" />
</style>
<!-- mini_scrollbar -->
<style id="mini_scrollbar">
<background part="mini_scrollbar_bg" />
</style>
<style id="mini_scrollbar:hover">
<background part="mini_scrollbar_bg_hot" />
</style>
<style id="mini_scrollbar_thumb">
<background part="mini_scrollbar_thumb" />
</style>
<style id="mini_scrollbar_thumb:hover">
<background part="mini_scrollbar_thumb_hot" />
</style>
<!-- transparent_scrollbar -->
<style id="transparent_scrollbar">
<background part="transparent_scrollbar_bg" />
</style>
<style id="transparent_scrollbar:hover">
<background part="transparent_scrollbar_bg_hot" />
</style>
<style id="transparent_scrollbar_thumb">
<background part="transparent_scrollbar_thumb" />
</style>
<style id="transparent_scrollbar_thumb:hover">
<background part="transparent_scrollbar_thumb_hot" />
</style>
<!-- timeline --> <!-- timeline -->
<style id="timeline"> <style id="timeline">
<background color="timeline_normal" part="timeline_normal" /> <background color="timeline_normal" part="timeline_normal" />
@ -1040,6 +1004,29 @@
<text color="listitem_selected_text" align="left top wordwrap" x="2" state="selected" /> <text color="listitem_selected_text" align="left top wordwrap" x="2" state="selected" />
</style> </style>
<style id="scrollbar">
<background part="scrollbar_bg" repeat="repeat" />
</style>
<style id="scrollbar_thumb">
<background part="scrollbar_thumb" repeat="repeat" />
</style>
<style id="mini_scrollbar">
<background part="mini_scrollbar_bg" />
<background part="mini_scrollbar_bg_hot" state="mouse" />
</style>
<style id="mini_scrollbar_thumb">
<background part="mini_scrollbar_thumb" />
<background part="mini_scrollbar_thumb_hot" state="mouse" />
</style>
<style id="transparent_scrollbar">
<background part="transparent_scrollbar_bg" />
<background part="transparent_scrollbar_bg_hot" state="mouse" />
</style>
<style id="transparent_scrollbar_thumb">
<background part="transparent_scrollbar_thumb" />
<background part="transparent_scrollbar_thumb_hot" state="mouse" />
</style>
</styles> </styles>
</theme> </theme>

View File

@ -155,8 +155,10 @@ void EditorView::setupScrollbars()
horizontalBar()->setBarWidth(barsize); horizontalBar()->setBarWidth(barsize);
verticalBar()->setBarWidth(barsize); verticalBar()->setBarWidth(barsize);
setup_mini_look(horizontalBar()); horizontalBar()->setStyle(theme->newStyles.miniScrollbar());
setup_mini_look(verticalBar()); verticalBar()->setStyle(theme->newStyles.miniScrollbar());
horizontalBar()->setThumbStyle(theme->newStyles.miniScrollbarThumb());
verticalBar()->setThumbStyle(theme->newStyles.miniScrollbarThumb());
showScrollBars(); showScrollBars();
} }

View File

@ -974,8 +974,8 @@ void SkinTheme::initWidget(Widget* widget)
break; break;
case kViewScrollbarWidget: case kViewScrollbarWidget:
BORDER(1 * scale); widget->setStyle(newStyles.scrollbar());
widget->setChildSpacing(0); static_cast<ScrollBar*>(widget)->setThumbStyle(newStyles.scrollbarThumb());
break; break;
case kViewViewportWidget: case kViewViewportWidget:
@ -1589,55 +1589,6 @@ void SkinTheme::paintTextBox(ui::PaintEvent& ev)
BGCOLOR, colors.textboxText()); BGCOLOR, colors.textboxText());
} }
void SkinTheme::paintViewScrollbar(PaintEvent& ev)
{
ScrollBar* widget = static_cast<ScrollBar*>(ev.getSource());
Graphics* g = ev.graphics();
int pos, len;
bool isMiniLook = false;
SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name);
if (skinPropery)
isMiniLook = (skinPropery->getLook() == MiniLook);
skin::Style* bgStyle;
skin::Style* thumbStyle;
if (widget->isTransparent()) {
bgStyle = styles.transparentScrollbar();
thumbStyle = styles.transparentScrollbarThumb();
}
else if (isMiniLook) {
bgStyle = styles.miniScrollbar();
thumbStyle = styles.miniScrollbarThumb();
}
else {
bgStyle = styles.scrollbar();
thumbStyle = styles.scrollbarThumb();
}
widget->getScrollBarThemeInfo(&pos, &len);
Style::State state;
if (widget->hasMouse()) state += Style::hover();
gfx::Rect rc = widget->clientBounds();
bgStyle->paint(g, rc, NULL, state);
// Horizontal bar
if (widget->align() & HORIZONTAL) {
rc.x += pos;
rc.w = len;
}
// Vertical bar
else {
rc.y += pos;
rc.h = len;
}
thumbStyle->paint(g, rc, NULL, state);
}
void SkinTheme::paintViewViewport(PaintEvent& ev) void SkinTheme::paintViewViewport(PaintEvent& ev)
{ {
Viewport* widget = static_cast<Viewport*>(ev.getSource()); Viewport* widget = static_cast<Viewport*>(ev.getSource());

View File

@ -67,7 +67,6 @@ namespace app {
void paintSlider(ui::PaintEvent& ev) override; void paintSlider(ui::PaintEvent& ev) override;
void paintComboBoxEntry(ui::PaintEvent& ev) override; void paintComboBoxEntry(ui::PaintEvent& ev) override;
void paintTextBox(ui::PaintEvent& ev) override; void paintTextBox(ui::PaintEvent& ev) override;
void paintViewScrollbar(ui::PaintEvent& ev) override;
void paintViewViewport(ui::PaintEvent& ev) override; void paintViewViewport(ui::PaintEvent& ev) override;
int get_button_selected_offset() const { return 0; } // TODO Configurable in xml int get_button_selected_offset() const { return 0; } // TODO Configurable in xml

View File

@ -158,13 +158,17 @@ Timeline::Timeline()
addChild(&m_hbar); addChild(&m_hbar);
addChild(&m_vbar); addChild(&m_vbar);
int barsize = skinTheme()->dimensions.miniScrollbarSize(); SkinTheme* theme = static_cast<SkinTheme*>(this->theme());
int barsize = theme->dimensions.miniScrollbarSize();
m_hbar.setBarWidth(barsize); m_hbar.setBarWidth(barsize);
m_vbar.setBarWidth(barsize); m_vbar.setBarWidth(barsize);
m_hbar.setBgColor(gfx::rgba(0, 0, 0, 128));
m_vbar.setBgColor(gfx::rgba(0, 0, 0, 128));
m_hbar.setTransparent(true); m_hbar.setTransparent(true);
m_vbar.setTransparent(true); m_vbar.setTransparent(true);
m_hbar.setStyle(theme->newStyles.transparentScrollbar());
m_vbar.setStyle(theme->newStyles.transparentScrollbar());
m_hbar.setThumbStyle(theme->newStyles.transparentScrollbarThumb());
m_vbar.setThumbStyle(theme->newStyles.transparentScrollbarThumb());
} }
Timeline::~Timeline() Timeline::~Timeline()

View File

@ -1,5 +1,5 @@
// Aseprite UI Library // Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello // Copyright (C) 2001-2017 David Capello
// //
// This file is released under the terms of the MIT license. // This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information. // Read LICENSE.txt for more information.
@ -10,6 +10,7 @@
#include "gfx/size.h" #include "gfx/size.h"
#include "ui/message.h" #include "ui/message.h"
#include "ui/paint_event.h"
#include "ui/scroll_bar.h" #include "ui/scroll_bar.h"
#include "ui/theme.h" #include "ui/theme.h"
@ -25,6 +26,7 @@ int ScrollBar::m_whereclick = 0;
ScrollBar::ScrollBar(int align, ScrollableViewDelegate* delegate) ScrollBar::ScrollBar(int align, ScrollableViewDelegate* delegate)
: Widget(kViewScrollbarWidget) : Widget(kViewScrollbarWidget)
, m_delegate(delegate) , m_delegate(delegate)
, m_thumbStyle(nullptr)
, m_barWidth(theme()->getScrollbarSize()) , m_barWidth(theme()->getScrollbarSize())
, m_pos(0) , m_pos(0)
, m_size(0) , m_size(0)
@ -178,7 +180,15 @@ bool ScrollBar::onProcessMessage(Message* msg)
void ScrollBar::onPaint(PaintEvent& ev) void ScrollBar::onPaint(PaintEvent& ev)
{ {
theme()->paintViewScrollbar(ev); gfx::Rect thumbBounds = clientBounds();
if (align() & HORIZONTAL)
getScrollBarThemeInfo(&thumbBounds.x, &thumbBounds.w);
else
getScrollBarThemeInfo(&thumbBounds.y, &thumbBounds.h);
theme()->paintScrollBar(
ev.graphics(), this, style(), thumbStyle(),
clientBounds(), thumbBounds);
} }
void ScrollBar::getScrollBarInfo(int *_pos, int *_len, int *_bar_size, int *_viewport_size) void ScrollBar::getScrollBarInfo(int *_pos, int *_len, int *_bar_size, int *_viewport_size)

View File

@ -1,5 +1,5 @@
// Aseprite UI Library // Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello // Copyright (C) 2001-2017 David Capello
// //
// This file is released under the terms of the MIT license. // This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information. // Read LICENSE.txt for more information.
@ -24,6 +24,9 @@ namespace ui {
public: public:
ScrollBar(int align, ScrollableViewDelegate* delegate); ScrollBar(int align, ScrollableViewDelegate* delegate);
Style* thumbStyle() { return m_thumbStyle; }
void setThumbStyle(Style* style) { m_thumbStyle = style; }
int getBarWidth() const { return m_barWidth; } int getBarWidth() const { return m_barWidth; }
void setBarWidth(int barWidth) { m_barWidth = barWidth; } void setBarWidth(int barWidth) { m_barWidth = barWidth; }
@ -45,6 +48,7 @@ namespace ui {
void getScrollBarInfo(int* _pos, int* _len, int* _bar_size, int* _viewport_size); void getScrollBarInfo(int* _pos, int* _len, int* _bar_size, int* _viewport_size);
ScrollableViewDelegate* m_delegate; ScrollableViewDelegate* m_delegate;
Style* m_thumbStyle;
int m_barWidth; int m_barWidth;
int m_pos; int m_pos;
int m_size; int m_size;

View File

@ -149,7 +149,8 @@ void Theme::paintWidget(Graphics* g,
ASSERT(style); ASSERT(style);
// External background // External background
g->fillRect(widget->bgColor(), bounds); if (!widget->isTransparent())
g->fillRect(widget->bgColor(), bounds);
gfx::Rect rc = bounds; gfx::Rect rc = bounds;
gfx::Color bgColor = gfx::ColorNone; gfx::Color bgColor = gfx::ColorNone;
@ -160,6 +161,24 @@ void Theme::paintWidget(Graphics* g,
}); });
} }
void Theme::paintScrollBar(Graphics* g,
const Widget* widget,
const Style* style,
const Style* thumbStyle,
const gfx::Rect& bounds,
const gfx::Rect& thumbBounds)
{
paintWidget(g, widget, style, bounds);
gfx::Rect rc = thumbBounds;
gfx::Color bgColor = gfx::ColorNone;
for_each_layer(
widget, thumbStyle,
[this, g, widget, &rc, &bgColor](const Style::Layer& layer) {
paintLayer(g, widget, layer, rc, bgColor);
});
}
void Theme::paintTooltip(Graphics* g, void Theme::paintTooltip(Graphics* g,
const Widget* widget, const Widget* widget,
const Style* style, const Style* style,
@ -219,7 +238,6 @@ void Theme::paintTooltip(Graphics* g,
if (intClip) if (intClip)
paintWidget(g, widget, arrowStyle, rc); paintWidget(g, widget, arrowStyle, rc);
} }
} }
void Theme::paintLayer(Graphics* g, void Theme::paintLayer(Graphics* g,

View File

@ -63,7 +63,6 @@ namespace ui {
virtual void paintSlider(PaintEvent& ev) = 0; virtual void paintSlider(PaintEvent& ev) = 0;
virtual void paintComboBoxEntry(PaintEvent& ev) = 0; virtual void paintComboBoxEntry(PaintEvent& ev) = 0;
virtual void paintTextBox(PaintEvent& ev) = 0; virtual void paintTextBox(PaintEvent& ev) = 0;
virtual void paintViewScrollbar(PaintEvent& ev) = 0;
virtual void paintViewViewport(PaintEvent& ev) = 0; virtual void paintViewViewport(PaintEvent& ev) = 0;
// Default implementation to draw widgets with new ui::Styles // Default implementation to draw widgets with new ui::Styles
@ -72,6 +71,13 @@ namespace ui {
const Style* style, const Style* style,
const gfx::Rect& bounds); const gfx::Rect& bounds);
virtual void paintScrollBar(Graphics* g,
const Widget* widget,
const Style* style,
const Style* thumbStyle,
const gfx::Rect& bounds,
const gfx::Rect& thumbBounds);
virtual void paintTooltip(Graphics* g, virtual void paintTooltip(Graphics* g,
const Widget* widget, const Widget* widget,
const Style* style, const Style* style,