mirror of https://github.com/aseprite/aseprite.git
Convert timeline widget to new styles
And remove the old skin::Style.
This commit is contained in:
parent
e2311392b8
commit
be3c9c1bcc
Binary file not shown.
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
|
@ -252,9 +252,8 @@
|
||||||
<part id="colorbar_1" x="16" y="192" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="colorbar_1" x="16" y="192" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="colorbar_2" x="0" y="208" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="colorbar_2" x="0" y="208" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="colorbar_3" x="16" y="208" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="colorbar_3" x="16" y="208" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="colorbar_border_fg" x="0" y="224" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="colorbar_selection_hot" x="0" y="224" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="colorbar_border_bg" x="16" y="224" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="colorbar_selection" x="16" y="224" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="colorbar_border_hotfg" x="32" y="224" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
|
||||||
<part id="scrollbar_bg" x="64" y="144" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="scrollbar_bg" x="64" y="144" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="scrollbar_thumb" x="64" y="160" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
<part id="scrollbar_thumb" x="64" y="160" w1="5" w2="6" w3="5" h1="5" h2="6" h3="5" />
|
||||||
<part id="mini_scrollbar_bg" x="64" y="176" w1="3" w2="2" w3="3" h1="3" h2="2" h3="3" />
|
<part id="mini_scrollbar_bg" x="64" y="176" w1="3" w2="2" w3="3" h1="3" h2="2" h3="3" />
|
||||||
|
@ -409,241 +408,6 @@
|
||||||
<part id="icon_slice" x="248" y="264" w="8" h="8" />
|
<part id="icon_slice" x="248" y="264" w="8" h="8" />
|
||||||
</parts>
|
</parts>
|
||||||
|
|
||||||
<stylesheet>
|
|
||||||
|
|
||||||
<!-- timeline -->
|
|
||||||
<style id="timeline">
|
|
||||||
<background color="timeline_normal" part="timeline_normal" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_box -->
|
|
||||||
<style id="timeline_box">
|
|
||||||
<background color="timeline_normal" part="timeline_normal" />
|
|
||||||
<text color="timeline_normal_text" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_box:hover">
|
|
||||||
<background color="timeline_hover" part="timeline_hover" />
|
|
||||||
<text color="timeline_hover_text" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_box:active">
|
|
||||||
<background color="timeline_active" part="timeline_active" />
|
|
||||||
<text color="timeline_active_text" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_box:active:hover">
|
|
||||||
<background color="timeline_active_hover" part="timeline_active_hover" />
|
|
||||||
<text color="timeline_active_hover_text" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_box:clicked">
|
|
||||||
<background color="timeline_clicked" part="timeline_clicked" />
|
|
||||||
<text color="timeline_clicked_text" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_eye -->
|
|
||||||
<style id="timeline_open_eye" base="timeline_box">
|
|
||||||
<icon part="timeline_open_eye_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_eye:active">
|
|
||||||
<icon part="timeline_open_eye_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_eye:disabled">
|
|
||||||
<icon color="disabled" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_eye" base="timeline_box">
|
|
||||||
<icon part="timeline_closed_eye_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_eye:active">
|
|
||||||
<icon part="timeline_closed_eye_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_eye:disabled">
|
|
||||||
<icon color="disabled" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_padlock -->
|
|
||||||
<style id="timeline_open_padlock" base="timeline_box">
|
|
||||||
<icon part="timeline_open_padlock_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_padlock:active">
|
|
||||||
<icon part="timeline_open_padlock_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_padlock:disabled">
|
|
||||||
<icon color="disabled" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_padlock" base="timeline_box">
|
|
||||||
<icon part="timeline_closed_padlock_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_padlock:active">
|
|
||||||
<icon part="timeline_closed_padlock_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_padlock:disabled">
|
|
||||||
<icon color="disabled" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_continuous -->
|
|
||||||
<style id="timeline_continuous" base="timeline_box">
|
|
||||||
<icon part="timeline_continuous_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_continuous:active">
|
|
||||||
<icon part="timeline_continuous_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_discontinuous" base="timeline_box">
|
|
||||||
<icon part="timeline_discontinuous_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_discontinuous:active">
|
|
||||||
<icon part="timeline_discontinuous_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_group -->
|
|
||||||
<style id="timeline_closed_group" base="timeline_box">
|
|
||||||
<icon part="timeline_closed_group_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_closed_group:active">
|
|
||||||
<icon part="timeline_closed_group_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_group" base="timeline_box">
|
|
||||||
<icon part="timeline_open_group_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_open_group:active">
|
|
||||||
<icon part="timeline_open_group_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_layer -->
|
|
||||||
<style id="timeline_layer" base="timeline_box">
|
|
||||||
<text align="left" valign="middle" padding-left="4" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_layer_text_only" base="timeline_layer">
|
|
||||||
<background color="none" part="none" repeat="none" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_layer_text_only:hover" base="timeline_layer">
|
|
||||||
<background color="none" part="none" repeat="none" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_layer_text_only:active" base="timeline_layer">
|
|
||||||
<background color="none" part="none" repeat="none" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_layer_text_only:active:hover" base="timeline_layer">
|
|
||||||
<background color="none" part="none" repeat="none" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_selected_cel -->
|
|
||||||
<style id="timeline_selected_cel">
|
|
||||||
<background color="timeline_clicked" part="timeline_clicked" />
|
|
||||||
<text color="timeline_clicked_text" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_empty_frame -->
|
|
||||||
<style id="timeline_empty_frame">
|
|
||||||
<icon part="timeline_empty_frame_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_empty_frame:active">
|
|
||||||
<icon part="timeline_empty_frame_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!--timeline_keyframe-->
|
|
||||||
<style id="timeline_keyframe">
|
|
||||||
<icon part="timeline_keyframe_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_keyframe:active">
|
|
||||||
<icon part="timeline_keyframe_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style id="timeline_from_left">
|
|
||||||
<icon part="timeline_from_left_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_from_left:active">
|
|
||||||
<icon part="timeline_from_left_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style id="timeline_from_right">
|
|
||||||
<icon part="timeline_from_right_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_from_right:active">
|
|
||||||
<icon part="timeline_from_right_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style id="timeline_from_both">
|
|
||||||
<icon part="timeline_from_both_normal" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_from_both:active">
|
|
||||||
<icon part="timeline_from_both_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style id="timeline_left_link">
|
|
||||||
<icon part="timeline_left_link_active" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_right_link">
|
|
||||||
<icon part="timeline_right_link_active" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_both_links">
|
|
||||||
<icon part="timeline_both_links_active" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_gear -->
|
|
||||||
<style id="timeline_gear" base="timeline_box">
|
|
||||||
<icon part="timeline_gear" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_gear:active">
|
|
||||||
<icon part="timeline_gear_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_gear:clicked">
|
|
||||||
<icon part="timeline_gear_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_onionskin -->
|
|
||||||
<style id="timeline_onionskin" base="timeline_box">
|
|
||||||
<icon part="timeline_onionskin" align="center" valign="middle" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_onionskin:active">
|
|
||||||
<icon part="timeline_onionskin_active" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_onionskin:clicked">
|
|
||||||
<icon part="timeline_onionskin_active" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_onionskin_range -->
|
|
||||||
<style id="timeline_onionskin_range">
|
|
||||||
<background part="timeline_onionskin_range" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- paddings -->
|
|
||||||
<style id="timeline_padding">
|
|
||||||
<background color="timeline_normal" part="timeline_padding" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_padding_tr">
|
|
||||||
<background color="timeline_normal" part="timeline_padding_tr" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_padding_bl">
|
|
||||||
<background color="timeline_normal" part="timeline_padding_bl" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_padding_br">
|
|
||||||
<background color="timeline_normal" part="timeline_padding_br" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_range_outline -->
|
|
||||||
<style id="timeline_range_outline">
|
|
||||||
</style>
|
|
||||||
<style id="timeline_range_outline:active">
|
|
||||||
<background part="colorbar_border_hotfg" />
|
|
||||||
</style>
|
|
||||||
<style id="timeline_range_outline:hover">
|
|
||||||
<background part="colorbar_border_fg" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_drop_layer_deco -->
|
|
||||||
<style id="timeline_drop_layer_deco">
|
|
||||||
<background part="timeline_drop_layer_deco" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_drop_frame_deco -->
|
|
||||||
<style id="timeline_drop_frame_deco">
|
|
||||||
<background part="timeline_drop_frame_deco" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- timeline_loop_range -->
|
|
||||||
<style id="timeline_loop_range">
|
|
||||||
<background part="timeline_loop_range" />
|
|
||||||
</style>
|
|
||||||
|
|
||||||
</stylesheet>
|
|
||||||
|
|
||||||
<styles>
|
<styles>
|
||||||
|
|
||||||
<style id="box" />
|
<style id="box" />
|
||||||
|
@ -983,6 +747,161 @@
|
||||||
<icon part="warning_box" align="center middle" />
|
<icon part="warning_box" align="center middle" />
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style id="timeline">
|
||||||
|
<background color="timeline_normal" part="timeline_normal" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_box">
|
||||||
|
<background color="timeline_normal" part="timeline_normal" />
|
||||||
|
<background color="timeline_hover" part="timeline_hover" state="mouse" />
|
||||||
|
<background color="timeline_active" part="timeline_active" state="focus" />
|
||||||
|
<background color="timeline_active_hover" part="timeline_active_hover" state="focus mouse" />
|
||||||
|
<background color="timeline_clicked" part="timeline_clicked" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_open_eye" extends="timeline_box">
|
||||||
|
<icon part="timeline_open_eye_normal" />
|
||||||
|
<icon part="timeline_open_eye_active" state="focus" />
|
||||||
|
<icon part="timeline_open_eye_active" state="selected" />
|
||||||
|
<icon part="timeline_open_eye_normal" color="disabled" state="disabled" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_closed_eye" extends="timeline_box">
|
||||||
|
<icon part="timeline_closed_eye_normal" />
|
||||||
|
<icon part="timeline_closed_eye_active" state="focus" />
|
||||||
|
<icon part="timeline_closed_eye_active" state="selected" />
|
||||||
|
<icon part="timeline_closed_eye_normal" color="disabled" state="disabled" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_open_padlock" extends="timeline_box">
|
||||||
|
<icon part="timeline_open_padlock_normal" />
|
||||||
|
<icon part="timeline_open_padlock_active" state="focus" />
|
||||||
|
<icon part="timeline_open_padlock_active" state="selected" />
|
||||||
|
<icon part="timeline_open_padlock_normal" color="disabled" state="disabled" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_closed_padlock" extends="timeline_box">
|
||||||
|
<icon part="timeline_closed_padlock_normal" />
|
||||||
|
<icon part="timeline_closed_padlock_active" state="focus" />
|
||||||
|
<icon part="timeline_closed_padlock_active" state="selected" />
|
||||||
|
<icon part="timeline_closed_padlock_normal" color="disabled" state="disabled" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_continuous" extends="timeline_box">
|
||||||
|
<icon part="timeline_continuous_normal" />
|
||||||
|
<icon part="timeline_continuous_active" state="focus" />
|
||||||
|
<icon part="timeline_continuous_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_discontinuous" extends="timeline_box">
|
||||||
|
<icon part="timeline_discontinuous_normal" />
|
||||||
|
<icon part="timeline_discontinuous_active" state="focus" />
|
||||||
|
<icon part="timeline_discontinuous_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_closed_group" extends="timeline_box">
|
||||||
|
<icon part="timeline_closed_group_normal" />
|
||||||
|
<icon part="timeline_closed_group_active" state="focus" />
|
||||||
|
<icon part="timeline_closed_group_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_open_group" extends="timeline_box">
|
||||||
|
<icon part="timeline_open_group_normal" />
|
||||||
|
<icon part="timeline_open_group_active" state="focus" />
|
||||||
|
<icon part="timeline_open_group_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_layer" extends="timeline_box">
|
||||||
|
<text color="timeline_normal_text" align="left middle" x="2" />
|
||||||
|
<text color="timeline_hover_text" align="left middle" x="2" state="mouse" />
|
||||||
|
<text color="timeline_active_text" align="left middle" x="2" state="focus" />
|
||||||
|
<text color="timeline_active_hover_text" align="left middle" x="2" state="focus mouse" />
|
||||||
|
<text color="timeline_clicked_text" align="left middle" x="2" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_layer_text_only" extends="timeline_layer">
|
||||||
|
<background color="none" part="none" repeat="none" />
|
||||||
|
<background color="none" part="none" repeat="none" state="mouse" />
|
||||||
|
<background color="none" part="none" repeat="none" state="focus" />
|
||||||
|
<background color="none" part="none" repeat="none" state="focus mouse" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_header_frame" extends="timeline_box" font="mini">
|
||||||
|
<text color="timeline_normal_text" />
|
||||||
|
<text color="timeline_hover_text" state="mouse" />
|
||||||
|
<text color="timeline_active_text" state="focus" />
|
||||||
|
<text color="timeline_active_hover_text" state="focus mouse" />
|
||||||
|
<text color="timeline_clicked_text" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_selected_cel">
|
||||||
|
<background color="timeline_clicked" part="timeline_clicked" />
|
||||||
|
<text color="timeline_clicked_text" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_empty_frame">
|
||||||
|
<icon part="timeline_empty_frame_normal" />
|
||||||
|
<icon part="timeline_empty_frame_active" state="focus" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_keyframe">
|
||||||
|
<icon part="timeline_keyframe_normal" />
|
||||||
|
<icon part="timeline_keyframe_active" state="focus" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_from_left">
|
||||||
|
<icon part="timeline_from_left_normal" />
|
||||||
|
<icon part="timeline_from_left_active" state="focus" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_from_right">
|
||||||
|
<icon part="timeline_from_right_normal" />
|
||||||
|
<icon part="timeline_from_right_active" state="focus" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_from_both">
|
||||||
|
<icon part="timeline_from_both_normal" />
|
||||||
|
<icon part="timeline_from_both_active" state="focus" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_left_link">
|
||||||
|
<icon part="timeline_left_link_active" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_right_link">
|
||||||
|
<icon part="timeline_right_link_active" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_both_links">
|
||||||
|
<icon part="timeline_both_links_active" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_gear" extends="timeline_box">
|
||||||
|
<icon part="timeline_gear" />
|
||||||
|
<icon part="timeline_gear_active" state="focus" />
|
||||||
|
<icon part="timeline_gear_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_onionskin" extends="timeline_box">
|
||||||
|
<icon part="timeline_onionskin" />
|
||||||
|
<icon part="timeline_onionskin_active" state="focus" />
|
||||||
|
<icon part="timeline_onionskin_active" state="selected" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_onionskin_range">
|
||||||
|
<background part="timeline_onionskin_range" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_padding">
|
||||||
|
<background color="timeline_normal" part="timeline_padding" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_padding_tr">
|
||||||
|
<background color="timeline_normal" part="timeline_padding_tr" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_padding_bl">
|
||||||
|
<background color="timeline_normal" part="timeline_padding_bl" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_padding_br">
|
||||||
|
<background color="timeline_normal" part="timeline_padding_br" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_range_outline">
|
||||||
|
<background part="colorbar_selection" state="focus" />
|
||||||
|
<background part="colorbar_selection_hot" state="focus mouse" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_drop_layer_deco">
|
||||||
|
<background part="timeline_drop_layer_deco" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_drop_frame_deco">
|
||||||
|
<background part="timeline_drop_frame_deco" />
|
||||||
|
</style>
|
||||||
|
<style id="timeline_loop_range">
|
||||||
|
<background part="timeline_loop_range" />
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style id="shade_selection">
|
||||||
|
<background part="colorbar_selection_hot" />
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style id="colorbar_selection">
|
||||||
|
<background part="colorbar_selection" />
|
||||||
|
<background part="colorbar_selection_hot" state="mouse" />
|
||||||
|
</style>
|
||||||
|
|
||||||
</styles>
|
</styles>
|
||||||
|
|
||||||
</theme>
|
</theme>
|
||||||
|
|
|
@ -482,10 +482,7 @@ add_library(app-lib
|
||||||
ui/skin/skin_part.cpp
|
ui/skin/skin_part.cpp
|
||||||
ui/skin/skin_property.cpp
|
ui/skin/skin_property.cpp
|
||||||
ui/skin/skin_slider_property.cpp
|
ui/skin/skin_slider_property.cpp
|
||||||
ui/skin/skin_style_property.cpp
|
|
||||||
ui/skin/skin_theme.cpp
|
ui/skin/skin_theme.cpp
|
||||||
ui/skin/style.cpp
|
|
||||||
ui/skin/style_sheet.cpp
|
|
||||||
ui/slice_window.cpp
|
ui/slice_window.cpp
|
||||||
ui/status_bar.cpp
|
ui/status_bar.cpp
|
||||||
ui/tabs.cpp
|
ui/tabs.cpp
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
|
@ -141,7 +141,7 @@ void draw_color_button(ui::Graphics* g,
|
||||||
if (hot) {
|
if (hot) {
|
||||||
theme->drawRect(
|
theme->drawRect(
|
||||||
g, gfx::Rect(rc.x, rc.y, rc.w, rc.h-1 - 1*scale),
|
g, gfx::Rect(rc.x, rc.y, rc.w, rc.h-1 - 1*scale),
|
||||||
theme->parts.colorbarBorderHotfg().get());
|
theme->parts.colorbarSelection().get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include "app/resource_finder.h"
|
#include "app/resource_finder.h"
|
||||||
#include "app/ui/browser_view.h"
|
#include "app/ui/browser_view.h"
|
||||||
#include "app/ui/main_window.h"
|
#include "app/ui/main_window.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/workspace.h"
|
#include "app/ui/workspace.h"
|
||||||
#include "base/file_handle.h"
|
#include "base/file_handle.h"
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include "app/transaction.h"
|
#include "app/transaction.h"
|
||||||
#include "app/ui/palette_view.h"
|
#include "app/ui/palette_view.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "app/ui_context.h"
|
#include "app/ui_context.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/scoped_value.h"
|
#include "base/scoped_value.h"
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include "app/ui/icon_button.h"
|
#include "app/ui/icon_button.h"
|
||||||
#include "app/ui/skin/button_icon_impl.h"
|
#include "app/ui/skin/button_icon_impl.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "app/ui_context.h"
|
#include "app/ui_context.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/scoped_value.h"
|
#include "base/scoped_value.h"
|
||||||
|
@ -663,8 +662,6 @@ class ContextBar::InkShadesField : public HBox {
|
||||||
bounds.w = w;
|
bounds.w = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
skin::Style::State state;
|
|
||||||
if (hasMouseOver()) state += Style::hover();
|
|
||||||
theme->paintWidget(g, this, theme->newStyles.view(), bounds);
|
theme->paintWidget(g, this, theme->newStyles.view(), bounds);
|
||||||
|
|
||||||
bounds.shrink(3*guiscale());
|
bounds.shrink(3*guiscale());
|
||||||
|
@ -707,10 +704,9 @@ class ContextBar::InkShadesField : public HBox {
|
||||||
if (!hotBounds.isEmpty() && m_click == DragAndDrop) {
|
if (!hotBounds.isEmpty() && m_click == DragAndDrop) {
|
||||||
hotBounds.enlarge(3*guiscale());
|
hotBounds.enlarge(3*guiscale());
|
||||||
|
|
||||||
Style::State state = Style::active();
|
PaintWidgetPartInfo info;
|
||||||
state += Style::hover();
|
theme->paintWidgetPart(
|
||||||
theme->styles.timelineRangeOutline()->paint(
|
g, theme->newStyles.shadeSelection(), hotBounds, info);
|
||||||
g, hotBounds, NULL, state);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include "app/crash/session.h"
|
#include "app/crash/session.h"
|
||||||
#include "app/modules/gui.h"
|
#include "app/modules/gui.h"
|
||||||
#include "app/ui/drop_down_button.h"
|
#include "app/ui/drop_down_button.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/workspace.h"
|
#include "app/ui/workspace.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include "app/ui/devconsole_view.h"
|
#include "app/ui/devconsole_view.h"
|
||||||
|
|
||||||
#include "app/app_menus.h"
|
#include "app/app_menus.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/workspace.h"
|
#include "app/ui/workspace.h"
|
||||||
#include "ui/entry.h"
|
#include "ui/entry.h"
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "app/ui/main_window.h"
|
#include "app/ui/main_window.h"
|
||||||
#include "app/ui/news_listbox.h"
|
#include "app/ui/news_listbox.h"
|
||||||
#include "app/ui/recent_listbox.h"
|
#include "app/ui/recent_listbox.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/workspace.h"
|
#include "app/ui/workspace.h"
|
||||||
#include "app/ui/workspace_tabs.h"
|
#include "app/ui/workspace_tabs.h"
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#include "app/notification_delegate.h"
|
#include "app/notification_delegate.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "base/launcher.h"
|
#include "base/launcher.h"
|
||||||
#include "ui/menu.h"
|
#include "ui/menu.h"
|
||||||
#include "ui/paint_event.h"
|
#include "ui/paint_event.h"
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
#include "app/ui/palette_view.h"
|
#include "app/ui/palette_view.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "app/ui/status_bar.h"
|
#include "app/ui/status_bar.h"
|
||||||
#include "app/util/clipboard.h"
|
#include "app/util/clipboard.h"
|
||||||
#include "base/convert_to.h"
|
#include "base/convert_to.h"
|
||||||
|
@ -515,8 +514,9 @@ void PaletteView::onPaint(ui::PaintEvent& ev)
|
||||||
|
|
||||||
// Draw selected entries
|
// Draw selected entries
|
||||||
|
|
||||||
Style::State state = Style::active();
|
PaintWidgetPartInfo info;
|
||||||
if (m_hot.part == Hit::OUTLINE) state += Style::hover();
|
if (m_hot.part == Hit::OUTLINE)
|
||||||
|
info.styleFlags |= ui::Style::Layer::kMouse;
|
||||||
|
|
||||||
PalettePicks dragPicks;
|
PalettePicks dragPicks;
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
@ -551,9 +551,9 @@ void PaletteView::onPaint(ui::PaintEvent& ev)
|
||||||
box2.y + box2.h/2 - minifont->height()/2));
|
box2.y + box2.h/2 - minifont->height()/2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw outlines
|
// Draw the selection
|
||||||
theme->styles.timelineRangeOutline()->paint(
|
theme->paintWidgetPart(
|
||||||
g, box, NULL, state);
|
g, theme->newStyles.colorbarSelection(), box, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
++j;
|
++j;
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2015 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
|
|
||||||
const char* SkinStyleProperty::Name = "SkinStyleProperty";
|
|
||||||
|
|
||||||
SkinStyleProperty::SkinStyleProperty(Style* style)
|
|
||||||
: Property(Name)
|
|
||||||
, m_style(style)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Style* SkinStyleProperty::getStyle() const
|
|
||||||
{
|
|
||||||
return m_style;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
|
@ -1,36 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2015 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifndef APP_UI_SKIN_SKIN_STYLE_PROPERTY_H_INCLUDED
|
|
||||||
#define APP_UI_SKIN_SKIN_STYLE_PROPERTY_H_INCLUDED
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "app/ui/skin/skin_property.h"
|
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "base/shared_ptr.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
class Style;
|
|
||||||
|
|
||||||
class SkinStyleProperty : public ui::Property {
|
|
||||||
public:
|
|
||||||
static const char* Name;
|
|
||||||
|
|
||||||
SkinStyleProperty(Style* style);
|
|
||||||
|
|
||||||
skin::Style* getStyle() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
skin::Style* m_style;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef base::SharedPtr<SkinStyleProperty> SkinStylePropertyPtr;
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -19,10 +19,7 @@
|
||||||
#include "app/ui/skin/font_data.h"
|
#include "app/ui/skin/font_data.h"
|
||||||
#include "app/ui/skin/skin_property.h"
|
#include "app/ui/skin/skin_property.h"
|
||||||
#include "app/ui/skin/skin_slider_property.h"
|
#include "app/ui/skin/skin_slider_property.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "app/ui/skin/style_sheet.h"
|
|
||||||
#include "app/xml_document.h"
|
#include "app/xml_document.h"
|
||||||
#include "app/xml_exception.h"
|
#include "app/xml_exception.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
|
@ -88,14 +85,6 @@ static const char* cursor_names[kCursorTypes] = {
|
||||||
"magnifier" // kMagnifierCursor
|
"magnifier" // kMagnifierCursor
|
||||||
};
|
};
|
||||||
|
|
||||||
static css::Value value_or_none(const char* valueStr)
|
|
||||||
{
|
|
||||||
if (strcmp(valueStr, "none") == 0)
|
|
||||||
return css::Value();
|
|
||||||
else
|
|
||||||
return css::Value(valueStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static FontData* load_font(std::map<std::string, FontData*>& fonts,
|
static FontData* load_font(std::map<std::string, FontData*>& fonts,
|
||||||
const TiXmlElement* xmlFont,
|
const TiXmlElement* xmlFont,
|
||||||
const std::string& xmlFilename)
|
const std::string& xmlFilename)
|
||||||
|
@ -512,93 +501,7 @@ void SkinTheme::loadXml(const std::string& skinId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load old stylesheet
|
// Load styles
|
||||||
{
|
|
||||||
TiXmlElement* xmlStyle = handle
|
|
||||||
.FirstChild("theme")
|
|
||||||
.FirstChild("stylesheet")
|
|
||||||
.FirstChild("style").ToElement();
|
|
||||||
while (xmlStyle) {
|
|
||||||
const char* style_id = xmlStyle->Attribute("id");
|
|
||||||
const char* base_id = xmlStyle->Attribute("base");
|
|
||||||
const css::Style* base = NULL;
|
|
||||||
|
|
||||||
if (base_id)
|
|
||||||
base = m_stylesheet.getCssStyle(base_id);
|
|
||||||
|
|
||||||
css::Style* style = new css::Style(style_id, base);
|
|
||||||
m_stylesheet.addCssStyle(style);
|
|
||||||
|
|
||||||
TiXmlElement* xmlRule = xmlStyle->FirstChildElement();
|
|
||||||
while (xmlRule) {
|
|
||||||
const std::string ruleName = xmlRule->Value();
|
|
||||||
|
|
||||||
LOG(VERBOSE) << "THEME: Rule " << ruleName
|
|
||||||
<< " for " << style_id << "\n";
|
|
||||||
|
|
||||||
// TODO This code design to read styles could be improved.
|
|
||||||
|
|
||||||
const char* part_id = xmlRule->Attribute("part");
|
|
||||||
const char* color_id = xmlRule->Attribute("color");
|
|
||||||
|
|
||||||
// Style align
|
|
||||||
int align = 0;
|
|
||||||
const char* halign = xmlRule->Attribute("align");
|
|
||||||
const char* valign = xmlRule->Attribute("valign");
|
|
||||||
const char* wordwrap = xmlRule->Attribute("wordwrap");
|
|
||||||
if (halign) {
|
|
||||||
if (strcmp(halign, "left") == 0) align |= LEFT;
|
|
||||||
else if (strcmp(halign, "right") == 0) align |= RIGHT;
|
|
||||||
else if (strcmp(halign, "center") == 0) align |= CENTER;
|
|
||||||
}
|
|
||||||
if (valign) {
|
|
||||||
if (strcmp(valign, "top") == 0) align |= TOP;
|
|
||||||
else if (strcmp(valign, "bottom") == 0) align |= BOTTOM;
|
|
||||||
else if (strcmp(valign, "middle") == 0) align |= MIDDLE;
|
|
||||||
}
|
|
||||||
if (wordwrap && strcmp(wordwrap, "true") == 0)
|
|
||||||
align |= WORDWRAP;
|
|
||||||
|
|
||||||
if (ruleName == "background") {
|
|
||||||
const char* repeat_id = xmlRule->Attribute("repeat");
|
|
||||||
|
|
||||||
if (color_id) (*style)[StyleSheet::backgroundColorRule()] = value_or_none(color_id);
|
|
||||||
if (part_id) (*style)[StyleSheet::backgroundPartRule()] = value_or_none(part_id);
|
|
||||||
if (repeat_id) (*style)[StyleSheet::backgroundRepeatRule()] = value_or_none(repeat_id);
|
|
||||||
}
|
|
||||||
else if (ruleName == "icon") {
|
|
||||||
if (align) (*style)[StyleSheet::iconAlignRule()] = css::Value(align);
|
|
||||||
if (part_id) (*style)[StyleSheet::iconPartRule()] = css::Value(part_id);
|
|
||||||
if (color_id) (*style)[StyleSheet::iconColorRule()] = value_or_none(color_id);
|
|
||||||
|
|
||||||
const char* x = xmlRule->Attribute("x");
|
|
||||||
const char* y = xmlRule->Attribute("y");
|
|
||||||
if (x) (*style)[StyleSheet::iconXRule()] = css::Value(strtol(x, NULL, 10));
|
|
||||||
if (y) (*style)[StyleSheet::iconYRule()] = css::Value(strtol(y, NULL, 10));
|
|
||||||
}
|
|
||||||
else if (ruleName == "text") {
|
|
||||||
if (color_id) (*style)[StyleSheet::textColorRule()] = css::Value(color_id);
|
|
||||||
if (align) (*style)[StyleSheet::textAlignRule()] = css::Value(align);
|
|
||||||
|
|
||||||
const char* l = xmlRule->Attribute("padding-left");
|
|
||||||
const char* t = xmlRule->Attribute("padding-top");
|
|
||||||
const char* r = xmlRule->Attribute("padding-right");
|
|
||||||
const char* b = xmlRule->Attribute("padding-bottom");
|
|
||||||
|
|
||||||
if (l) (*style)[StyleSheet::paddingLeftRule()] = css::Value(strtol(l, NULL, 10));
|
|
||||||
if (t) (*style)[StyleSheet::paddingTopRule()] = css::Value(strtol(t, NULL, 10));
|
|
||||||
if (r) (*style)[StyleSheet::paddingRightRule()] = css::Value(strtol(r, NULL, 10));
|
|
||||||
if (b) (*style)[StyleSheet::paddingBottomRule()] = css::Value(strtol(b, NULL, 10));
|
|
||||||
}
|
|
||||||
|
|
||||||
xmlRule = xmlRule->NextSiblingElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
xmlStyle = xmlStyle->NextSiblingElement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load new styles
|
|
||||||
{
|
{
|
||||||
TiXmlElement* xmlStyle = handle
|
TiXmlElement* xmlStyle = handle
|
||||||
.FirstChild("theme")
|
.FirstChild("theme")
|
||||||
|
@ -738,6 +641,9 @@ void SkinTheme::loadXml(const std::string& skinId)
|
||||||
auto it = m_colors_by_id.find(colorId);
|
auto it = m_colors_by_id.find(colorId);
|
||||||
if (it != m_colors_by_id.end())
|
if (it != m_colors_by_id.end())
|
||||||
layer.setColor(it->second);
|
layer.setColor(it->second);
|
||||||
|
else if (std::strcmp(colorId, "none") == 0) {
|
||||||
|
layer.setColor(gfx::ColorNone);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
throw base::Exception("Color <%s color='%s' ...> was not found in '%s'\n",
|
throw base::Exception("Color <%s color='%s' ...> was not found in '%s'\n",
|
||||||
layerName.c_str(), colorId,
|
layerName.c_str(), colorId,
|
||||||
|
@ -771,6 +677,12 @@ void SkinTheme::loadXml(const std::string& skinId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (std::strcmp(partId, "none") == 0) {
|
||||||
|
layer.setIcon(nullptr);
|
||||||
|
layer.setSpriteSheet(nullptr);
|
||||||
|
layer.setSpriteBounds(gfx::Rect(0, 0, 0, 0));
|
||||||
|
layer.setSlicesBounds(gfx::Rect(0, 0, 0, 0));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
throw base::Exception("Part <%s part='%s' ...> was not found in '%s'\n",
|
throw base::Exception("Part <%s part='%s' ...> was not found in '%s'\n",
|
||||||
layerName.c_str(), partId,
|
layerName.c_str(), partId,
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "app/ui/skin/skin_part.h"
|
#include "app/ui/skin/skin_part.h"
|
||||||
#include "app/ui/skin/style_sheet.h"
|
|
||||||
#include "gfx/color.h"
|
#include "gfx/color.h"
|
||||||
#include "gfx/fwd.h"
|
#include "gfx/fwd.h"
|
||||||
#include "ui/manager.h"
|
#include "ui/manager.h"
|
||||||
|
@ -84,10 +83,6 @@ namespace app {
|
||||||
void drawVline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart);
|
void drawVline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart);
|
||||||
void paintProgressBar(ui::Graphics* g, const gfx::Rect& rc, double progress);
|
void paintProgressBar(ui::Graphics* g, const gfx::Rect& rc, double progress);
|
||||||
|
|
||||||
Style* getStyle(const std::string& id) {
|
|
||||||
return m_stylesheet.getStyle(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
ui::Style* getNewStyle(const std::string& id) {
|
ui::Style* getNewStyle(const std::string& id) {
|
||||||
return m_styles[id];
|
return m_styles[id];
|
||||||
}
|
}
|
||||||
|
@ -136,7 +131,6 @@ namespace app {
|
||||||
std::map<std::string, gfx::Color> m_colors_by_id;
|
std::map<std::string, gfx::Color> m_colors_by_id;
|
||||||
std::map<std::string, int> m_dimensions_by_id;
|
std::map<std::string, int> m_dimensions_by_id;
|
||||||
std::vector<ui::Cursor*> m_cursors;
|
std::vector<ui::Cursor*> m_cursors;
|
||||||
StyleSheet m_stylesheet;
|
|
||||||
std::map<std::string, ui::Style*> m_styles;
|
std::map<std::string, ui::Style*> m_styles;
|
||||||
std::map<std::string, FontData*> m_fonts;
|
std::map<std::string, FontData*> m_fonts;
|
||||||
std::map<std::string, she::Font*> m_themeFonts;
|
std::map<std::string, she::Font*> m_themeFonts;
|
||||||
|
|
|
@ -1,268 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2017 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
|
||||||
#include "css/sheet.h"
|
|
||||||
#include "she/surface.h"
|
|
||||||
#include "ui/graphics.h"
|
|
||||||
#include "ui/theme.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
|
|
||||||
css::State Style::m_hoverState("hover");
|
|
||||||
css::State Style::m_activeState("active");
|
|
||||||
css::State Style::m_clickedState("clicked");
|
|
||||||
css::State Style::m_disabledState("disabled");
|
|
||||||
|
|
||||||
Rule::~Rule()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void Rule::paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text)
|
|
||||||
{
|
|
||||||
onPaint(g, bounds, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BackgroundRule::onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text)
|
|
||||||
{
|
|
||||||
SkinTheme* theme = SkinTheme::instance();
|
|
||||||
|
|
||||||
if (m_part && m_part->countBitmaps() > 0) {
|
|
||||||
if (!gfx::is_transparent(m_color))
|
|
||||||
g->fillRect(m_color, bounds);
|
|
||||||
|
|
||||||
if (m_part->countBitmaps() == 1) {
|
|
||||||
she::Surface* bmp = m_part->bitmap(0);
|
|
||||||
|
|
||||||
if (m_repeat == BackgroundRepeat::NO_REPEAT) {
|
|
||||||
g->drawRgbaSurface(bmp, bounds.x, bounds.y);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui::IntersectClip clip(g, bounds);
|
|
||||||
if (!clip)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int y=bounds.y; y<bounds.y2(); y+=bmp->height()) {
|
|
||||||
for (int x=bounds.x; x<bounds.x2(); x+=bmp->width()) {
|
|
||||||
g->drawRgbaSurface(bmp, x, y);
|
|
||||||
if (m_repeat == BackgroundRepeat::REPEAT_Y)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (m_repeat == BackgroundRepeat::REPEAT_X)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_part->countBitmaps() == 8) {
|
|
||||||
theme->drawRect(
|
|
||||||
g, bounds, m_part.get(),
|
|
||||||
// This is a hack (we could use a new property but anyway we
|
|
||||||
// have plans to change the whole theme structure). If
|
|
||||||
// "repeat" is REPEAT, the center will be filled with the
|
|
||||||
// center slice of the part.
|
|
||||||
m_repeat == BackgroundRepeat::REPEAT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!gfx::is_transparent(m_color)) {
|
|
||||||
g->fillRect(m_color, bounds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TextRule::onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text)
|
|
||||||
{
|
|
||||||
SkinTheme* theme = SkinTheme::instance();
|
|
||||||
|
|
||||||
if (text) {
|
|
||||||
g->drawAlignedUIText(text,
|
|
||||||
(gfx::is_transparent(m_color) ?
|
|
||||||
theme->colors.text():
|
|
||||||
m_color),
|
|
||||||
gfx::ColorNone,
|
|
||||||
gfx::Rect(bounds).shrink(m_padding), m_align);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IconRule::onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text)
|
|
||||||
{
|
|
||||||
she::Surface* bmp = m_part->bitmap(0);
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
if (m_align & ui::RIGHT)
|
|
||||||
x = bounds.x2() - bmp->width();
|
|
||||||
else if (m_align & ui::CENTER)
|
|
||||||
x = bounds.x + bounds.w/2 - bmp->width()/2;
|
|
||||||
else
|
|
||||||
x = bounds.x;
|
|
||||||
|
|
||||||
if (m_align & ui::BOTTOM)
|
|
||||||
y = bounds.y2() - bmp->height();
|
|
||||||
else if (m_align & ui::MIDDLE)
|
|
||||||
y = bounds.y + bounds.h/2 - bmp->height()/2;
|
|
||||||
else
|
|
||||||
y = bounds.y;
|
|
||||||
|
|
||||||
x += m_x;
|
|
||||||
y += m_y;
|
|
||||||
|
|
||||||
if (m_color == gfx::ColorNone)
|
|
||||||
g->drawRgbaSurface(bmp, x, y);
|
|
||||||
else
|
|
||||||
g->drawColoredRgbaSurface(bmp, m_color, x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
Rules::Rules(const css::Query& query) :
|
|
||||||
m_background(NULL),
|
|
||||||
m_text(NULL),
|
|
||||||
m_icon(NULL)
|
|
||||||
{
|
|
||||||
css::Value backgroundColor = query[StyleSheet::backgroundColorRule()];
|
|
||||||
css::Value backgroundPart = query[StyleSheet::backgroundPartRule()];
|
|
||||||
css::Value backgroundRepeat = query[StyleSheet::backgroundRepeatRule()];
|
|
||||||
css::Value iconAlign = query[StyleSheet::iconAlignRule()];
|
|
||||||
css::Value iconPart = query[StyleSheet::iconPartRule()];
|
|
||||||
css::Value iconX = query[StyleSheet::iconXRule()];
|
|
||||||
css::Value iconY = query[StyleSheet::iconYRule()];
|
|
||||||
css::Value iconColor = query[StyleSheet::iconColorRule()];
|
|
||||||
css::Value textAlign = query[StyleSheet::textAlignRule()];
|
|
||||||
css::Value textColor = query[StyleSheet::textColorRule()];
|
|
||||||
css::Value paddingLeft = query[StyleSheet::paddingLeftRule()];
|
|
||||||
css::Value paddingTop = query[StyleSheet::paddingTopRule()];
|
|
||||||
css::Value paddingRight = query[StyleSheet::paddingRightRule()];
|
|
||||||
css::Value paddingBottom = query[StyleSheet::paddingBottomRule()];
|
|
||||||
css::Value none;
|
|
||||||
|
|
||||||
if (backgroundColor != none
|
|
||||||
|| backgroundPart != none
|
|
||||||
|| backgroundRepeat != none) {
|
|
||||||
m_background = new BackgroundRule();
|
|
||||||
m_background->setColor(StyleSheet::convertColor(backgroundColor));
|
|
||||||
m_background->setPart(StyleSheet::convertPart(backgroundPart));
|
|
||||||
m_background->setRepeat(StyleSheet::convertRepeat(backgroundRepeat));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iconAlign != none
|
|
||||||
|| iconPart != none
|
|
||||||
|| iconX != none
|
|
||||||
|| iconY != none
|
|
||||||
|| iconColor != none) {
|
|
||||||
m_icon = new IconRule();
|
|
||||||
m_icon->setAlign((int)iconAlign.number());
|
|
||||||
m_icon->setPart(StyleSheet::convertPart(iconPart));
|
|
||||||
m_icon->setX((int)iconX.number()*ui::guiscale());
|
|
||||||
m_icon->setY((int)iconY.number()*ui::guiscale());
|
|
||||||
m_icon->setColor(StyleSheet::convertColor(iconColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (textAlign != none
|
|
||||||
|| textColor != none
|
|
||||||
|| paddingLeft != none
|
|
||||||
|| paddingTop != none
|
|
||||||
|| paddingRight != none
|
|
||||||
|| paddingBottom != none) {
|
|
||||||
m_text = new TextRule();
|
|
||||||
m_text->setAlign((int)textAlign.number());
|
|
||||||
m_text->setColor(StyleSheet::convertColor(textColor));
|
|
||||||
m_text->setPadding(gfx::Border(
|
|
||||||
int(paddingLeft.number()),
|
|
||||||
int(paddingTop.number()),
|
|
||||||
int(paddingRight.number()),
|
|
||||||
int(paddingBottom.number()))*ui::guiscale());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rules::~Rules()
|
|
||||||
{
|
|
||||||
delete m_background;
|
|
||||||
delete m_text;
|
|
||||||
delete m_icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Rules::paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text)
|
|
||||||
{
|
|
||||||
if (m_background) m_background->paint(g, bounds, text);
|
|
||||||
if (m_icon) m_icon->paint(g, bounds, text);
|
|
||||||
if (m_text) m_text->paint(g, bounds, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
gfx::Size Rules::sizeHint(const char* text, int maxWidth)
|
|
||||||
{
|
|
||||||
gfx::Size sz(0, 0);
|
|
||||||
if (m_icon) {
|
|
||||||
sz.w += m_icon->getPart()->bitmap(0)->width();
|
|
||||||
sz.h = m_icon->getPart()->bitmap(0)->height();
|
|
||||||
}
|
|
||||||
if (m_text && text) {
|
|
||||||
ui::ScreenGraphics g;
|
|
||||||
gfx::Size textSize = g.fitString(text, maxWidth, m_text->align());
|
|
||||||
if (sz.w > 0) sz.w += 2*ui::guiscale(); // TODO text separation
|
|
||||||
sz.w += textSize.w;
|
|
||||||
sz.h = MAX(sz.h, textSize.h);
|
|
||||||
|
|
||||||
sz.w += m_text->padding().left() + m_text->padding().right();
|
|
||||||
sz.h += m_text->padding().top() + m_text->padding().bottom();
|
|
||||||
}
|
|
||||||
return sz;
|
|
||||||
}
|
|
||||||
|
|
||||||
Style::Style(css::Sheet& sheet, const std::string& id)
|
|
||||||
: m_id(id)
|
|
||||||
, m_compoundStyle(sheet.compoundStyle(id))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Style::~Style()
|
|
||||||
{
|
|
||||||
for (RulesMap::iterator it = m_rules.begin(), end = m_rules.end();
|
|
||||||
it != end; ++it) {
|
|
||||||
delete it->second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rules* Style::getRulesFromState(const State& state)
|
|
||||||
{
|
|
||||||
Rules* rules = NULL;
|
|
||||||
|
|
||||||
RulesMap::iterator it = m_rules.find(state);
|
|
||||||
if (it != m_rules.end()) {
|
|
||||||
rules = it->second;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rules = new Rules(m_compoundStyle[state]);
|
|
||||||
m_rules[state] = rules;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rules;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Style::paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text,
|
|
||||||
const State& state)
|
|
||||||
{
|
|
||||||
getRulesFromState(state)->paint(g, bounds, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
gfx::Size Style::sizeHint(
|
|
||||||
const char* text,
|
|
||||||
const State& state,
|
|
||||||
int maxWidth)
|
|
||||||
{
|
|
||||||
return getRulesFromState(state)->sizeHint(text, maxWidth);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
|
@ -1,168 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2016 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifndef APP_UI_SKIN_STYLE_H_INCLUDED
|
|
||||||
#define APP_UI_SKIN_STYLE_H_INCLUDED
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "app/ui/skin/background_repeat.h"
|
|
||||||
#include "app/ui/skin/skin_part.h"
|
|
||||||
#include "base/disable_copying.h"
|
|
||||||
#include "css/compound_style.h"
|
|
||||||
#include "css/state.h"
|
|
||||||
#include "css/stateful_style.h"
|
|
||||||
#include "gfx/border.h"
|
|
||||||
#include "gfx/color.h"
|
|
||||||
#include "gfx/fwd.h"
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace ui {
|
|
||||||
class Graphics;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
|
|
||||||
class Rule {
|
|
||||||
public:
|
|
||||||
Rule() { }
|
|
||||||
virtual ~Rule();
|
|
||||||
|
|
||||||
void paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class BackgroundRule : public Rule {
|
|
||||||
public:
|
|
||||||
BackgroundRule() : m_color(gfx::ColorNone)
|
|
||||||
, m_repeat(BackgroundRepeat::NO_REPEAT) { }
|
|
||||||
|
|
||||||
void setColor(gfx::Color color) { m_color = color; }
|
|
||||||
void setPart(const SkinPartPtr& part) { m_part = part; }
|
|
||||||
void setRepeat(BackgroundRepeat repeat) { m_repeat = repeat; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
gfx::Color m_color;
|
|
||||||
SkinPartPtr m_part;
|
|
||||||
BackgroundRepeat m_repeat;
|
|
||||||
};
|
|
||||||
|
|
||||||
class TextRule : public Rule {
|
|
||||||
public:
|
|
||||||
explicit TextRule() : m_align(0),
|
|
||||||
m_color(gfx::ColorNone) { }
|
|
||||||
|
|
||||||
void setAlign(int align) { m_align = align; }
|
|
||||||
void setColor(gfx::Color color) { m_color = color; }
|
|
||||||
void setPadding(const gfx::Border& padding) { m_padding = padding; }
|
|
||||||
|
|
||||||
int align() const { return m_align; }
|
|
||||||
gfx::Border padding() const { return m_padding; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
int m_align;
|
|
||||||
gfx::Color m_color;
|
|
||||||
gfx::Border m_padding;
|
|
||||||
};
|
|
||||||
|
|
||||||
class IconRule : public Rule {
|
|
||||||
public:
|
|
||||||
explicit IconRule() : m_align(0),
|
|
||||||
m_color(gfx::ColorNone) { }
|
|
||||||
|
|
||||||
void setAlign(int align) { m_align = align; }
|
|
||||||
void setPart(const SkinPartPtr& part) { m_part = part; }
|
|
||||||
void setX(int x) { m_x = x; }
|
|
||||||
void setY(int y) { m_y = y; }
|
|
||||||
void setColor(gfx::Color color) { m_color = color; }
|
|
||||||
|
|
||||||
SkinPartPtr getPart() { return m_part; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void onPaint(ui::Graphics* g, const gfx::Rect& bounds, const char* text) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
int m_align;
|
|
||||||
SkinPartPtr m_part;
|
|
||||||
int m_x, m_y;
|
|
||||||
gfx::Color m_color;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Rules {
|
|
||||||
public:
|
|
||||||
Rules(const css::Query& query);
|
|
||||||
~Rules();
|
|
||||||
|
|
||||||
void paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text);
|
|
||||||
|
|
||||||
gfx::Size sizeHint(const char* text, int maxWidth);
|
|
||||||
|
|
||||||
private:
|
|
||||||
BackgroundRule* m_background;
|
|
||||||
TextRule* m_text;
|
|
||||||
IconRule* m_icon;
|
|
||||||
|
|
||||||
DISABLE_COPYING(Rules);
|
|
||||||
};
|
|
||||||
|
|
||||||
class Style {
|
|
||||||
public:
|
|
||||||
typedef css::States State;
|
|
||||||
|
|
||||||
static const css::State& hover() { return m_hoverState; }
|
|
||||||
static const css::State& active() { return m_activeState; }
|
|
||||||
static const css::State& clicked() { return m_clickedState; }
|
|
||||||
static const css::State& disabled() { return m_disabledState; }
|
|
||||||
|
|
||||||
Style(css::Sheet& sheet, const std::string& id);
|
|
||||||
~Style();
|
|
||||||
|
|
||||||
void paint(ui::Graphics* g,
|
|
||||||
const gfx::Rect& bounds,
|
|
||||||
const char* text,
|
|
||||||
const State& state);
|
|
||||||
|
|
||||||
gfx::Size sizeHint(
|
|
||||||
const char* text,
|
|
||||||
const State& state,
|
|
||||||
int maxWidth = 0);
|
|
||||||
|
|
||||||
const std::string& id() const { return m_id; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
typedef std::map<State, Rules*> RulesMap;
|
|
||||||
|
|
||||||
Rules* getRulesFromState(const State& state);
|
|
||||||
|
|
||||||
std::string m_id;
|
|
||||||
css::CompoundStyle m_compoundStyle;
|
|
||||||
RulesMap m_rules;
|
|
||||||
|
|
||||||
static css::State m_hoverState;
|
|
||||||
static css::State m_activeState;
|
|
||||||
static css::State m_clickedState;
|
|
||||||
static css::State m_disabledState;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,145 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2016 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "app/ui/skin/style_sheet.h"
|
|
||||||
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "base/exception.h"
|
|
||||||
#include "css/sheet.h"
|
|
||||||
|
|
||||||
#include "tinyxml.h"
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
|
|
||||||
css::Rule StyleSheet::m_backgroundColorRule("background-color");
|
|
||||||
css::Rule StyleSheet::m_backgroundPartRule("background-part");
|
|
||||||
css::Rule StyleSheet::m_backgroundRepeatRule("background-repeat");
|
|
||||||
css::Rule StyleSheet::m_iconAlignRule("icon-align");
|
|
||||||
css::Rule StyleSheet::m_iconPartRule("icon-part");
|
|
||||||
css::Rule StyleSheet::m_iconXRule("icon-x");
|
|
||||||
css::Rule StyleSheet::m_iconYRule("icon-y");
|
|
||||||
css::Rule StyleSheet::m_iconColorRule("icon-color");
|
|
||||||
css::Rule StyleSheet::m_textAlignRule("text-align");
|
|
||||||
css::Rule StyleSheet::m_textColorRule("text-color");
|
|
||||||
css::Rule StyleSheet::m_paddingLeftRule("padding-left");
|
|
||||||
css::Rule StyleSheet::m_paddingTopRule("padding-top");
|
|
||||||
css::Rule StyleSheet::m_paddingRightRule("padding-right");
|
|
||||||
css::Rule StyleSheet::m_paddingBottomRule("padding-bottom");
|
|
||||||
|
|
||||||
StyleSheet::StyleSheet()
|
|
||||||
{
|
|
||||||
m_sheet = new css::Sheet;
|
|
||||||
m_sheet->addRule(&m_backgroundColorRule);
|
|
||||||
m_sheet->addRule(&m_backgroundPartRule);
|
|
||||||
m_sheet->addRule(&m_backgroundRepeatRule);
|
|
||||||
m_sheet->addRule(&m_iconAlignRule);
|
|
||||||
m_sheet->addRule(&m_iconPartRule);
|
|
||||||
m_sheet->addRule(&m_iconXRule);
|
|
||||||
m_sheet->addRule(&m_iconYRule);
|
|
||||||
m_sheet->addRule(&m_iconColorRule);
|
|
||||||
m_sheet->addRule(&m_textAlignRule);
|
|
||||||
m_sheet->addRule(&m_textColorRule);
|
|
||||||
m_sheet->addRule(&m_paddingLeftRule);
|
|
||||||
m_sheet->addRule(&m_paddingTopRule);
|
|
||||||
m_sheet->addRule(&m_paddingRightRule);
|
|
||||||
m_sheet->addRule(&m_paddingBottomRule);
|
|
||||||
}
|
|
||||||
|
|
||||||
StyleSheet::~StyleSheet()
|
|
||||||
{
|
|
||||||
// Destroy skin::Styles
|
|
||||||
for (StyleMap::iterator it = m_styles.begin(), end = m_styles.end();
|
|
||||||
it != end; ++it)
|
|
||||||
delete it->second;
|
|
||||||
|
|
||||||
// Destroy css::Styles
|
|
||||||
for (std::vector<css::Style*>::iterator it = m_cssStyles.begin(), end = m_cssStyles.end();
|
|
||||||
it != end; ++it)
|
|
||||||
delete *it;
|
|
||||||
|
|
||||||
delete m_sheet;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StyleSheet::addCssStyle(css::Style* style)
|
|
||||||
{
|
|
||||||
m_sheet->addStyle(style);
|
|
||||||
m_cssStyles.push_back(style);
|
|
||||||
}
|
|
||||||
|
|
||||||
const css::Style* StyleSheet::getCssStyle(const std::string& id)
|
|
||||||
{
|
|
||||||
return m_sheet->getStyle(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
Style* StyleSheet::getStyle(const std::string& id)
|
|
||||||
{
|
|
||||||
Style* style = NULL;
|
|
||||||
|
|
||||||
StyleMap::iterator it = m_styles.find(id);
|
|
||||||
if (it != m_styles.end())
|
|
||||||
style = it->second;
|
|
||||||
else {
|
|
||||||
style = new Style(*m_sheet, id);
|
|
||||||
m_styles[id] = style;
|
|
||||||
}
|
|
||||||
|
|
||||||
return style;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
SkinPartPtr StyleSheet::convertPart(const css::Value& value)
|
|
||||||
{
|
|
||||||
SkinPartPtr part;
|
|
||||||
if (value.type() == css::Value::String) {
|
|
||||||
const std::string& part_id = value.string();
|
|
||||||
part = get_part_by_id(part_id);
|
|
||||||
if (!part)
|
|
||||||
throw base::Exception("Unknown part '%s'\n", part_id.c_str());
|
|
||||||
}
|
|
||||||
return part;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
gfx::Color StyleSheet::convertColor(const css::Value& value)
|
|
||||||
{
|
|
||||||
gfx::Color color = gfx::ColorNone;
|
|
||||||
if (value.type() == css::Value::String) {
|
|
||||||
const std::string& color_id = value.string();
|
|
||||||
color = get_color_by_id(color_id);
|
|
||||||
if (color == gfx::ColorNone)
|
|
||||||
throw base::Exception("Unknown color '%s'\n", color_id.c_str());
|
|
||||||
}
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
BackgroundRepeat StyleSheet::convertRepeat(const css::Value& value)
|
|
||||||
{
|
|
||||||
BackgroundRepeat repeat = BackgroundRepeat::NO_REPEAT;
|
|
||||||
if (value.type() == css::Value::String) {
|
|
||||||
const std::string& id = value.string();
|
|
||||||
if (id == "repeat")
|
|
||||||
repeat = BackgroundRepeat::REPEAT;
|
|
||||||
else if (id == "repeat-x")
|
|
||||||
repeat = BackgroundRepeat::REPEAT_X;
|
|
||||||
else if (id == "repeat-y")
|
|
||||||
repeat = BackgroundRepeat::REPEAT_Y;
|
|
||||||
else if (id == "no_repeat")
|
|
||||||
repeat = BackgroundRepeat::NO_REPEAT;
|
|
||||||
else
|
|
||||||
throw base::Exception("Unknown repeat value '%s'\n", id.c_str());
|
|
||||||
}
|
|
||||||
return repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
|
@ -1,88 +0,0 @@
|
||||||
// Aseprite
|
|
||||||
// Copyright (C) 2001-2016 David Capello
|
|
||||||
//
|
|
||||||
// This program is distributed under the terms of
|
|
||||||
// the End-User License Agreement for Aseprite.
|
|
||||||
|
|
||||||
#ifndef APP_UI_SKIN_STYLE_SHEET_H_INCLUDED
|
|
||||||
#define APP_UI_SKIN_STYLE_SHEET_H_INCLUDED
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "app/ui/skin/background_repeat.h"
|
|
||||||
#include "app/ui/skin/skin_part.h"
|
|
||||||
#include "css/rule.h"
|
|
||||||
#include "css/state.h"
|
|
||||||
#include "gfx/color.h"
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
class TiXmlElement;
|
|
||||||
|
|
||||||
namespace css {
|
|
||||||
class Sheet;
|
|
||||||
class Style;
|
|
||||||
class Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace app {
|
|
||||||
namespace skin {
|
|
||||||
|
|
||||||
class Style;
|
|
||||||
|
|
||||||
class StyleSheet {
|
|
||||||
public:
|
|
||||||
StyleSheet();
|
|
||||||
~StyleSheet();
|
|
||||||
|
|
||||||
static css::Rule& backgroundColorRule() { return m_backgroundColorRule; }
|
|
||||||
static css::Rule& backgroundPartRule() { return m_backgroundPartRule; }
|
|
||||||
static css::Rule& backgroundRepeatRule() { return m_backgroundRepeatRule; }
|
|
||||||
static css::Rule& iconAlignRule() { return m_iconAlignRule; }
|
|
||||||
static css::Rule& iconPartRule() { return m_iconPartRule; }
|
|
||||||
static css::Rule& iconXRule() { return m_iconXRule; }
|
|
||||||
static css::Rule& iconYRule() { return m_iconYRule; }
|
|
||||||
static css::Rule& iconColorRule() { return m_iconColorRule; }
|
|
||||||
static css::Rule& textAlignRule() { return m_textAlignRule; }
|
|
||||||
static css::Rule& textColorRule() { return m_textColorRule; }
|
|
||||||
static css::Rule& paddingLeftRule() { return m_paddingLeftRule; }
|
|
||||||
static css::Rule& paddingTopRule() { return m_paddingTopRule; }
|
|
||||||
static css::Rule& paddingRightRule() { return m_paddingRightRule; }
|
|
||||||
static css::Rule& paddingBottomRule() { return m_paddingBottomRule; }
|
|
||||||
|
|
||||||
void addCssStyle(css::Style* style);
|
|
||||||
const css::Style* getCssStyle(const std::string& id);
|
|
||||||
|
|
||||||
Style* getStyle(const std::string& id);
|
|
||||||
|
|
||||||
static SkinPartPtr convertPart(const css::Value& value);
|
|
||||||
static gfx::Color convertColor(const css::Value& value);
|
|
||||||
static BackgroundRepeat convertRepeat(const css::Value& value);
|
|
||||||
|
|
||||||
private:
|
|
||||||
typedef std::map<std::string, Style*> StyleMap;
|
|
||||||
|
|
||||||
static css::Rule m_backgroundColorRule;
|
|
||||||
static css::Rule m_backgroundPartRule;
|
|
||||||
static css::Rule m_backgroundRepeatRule;
|
|
||||||
static css::Rule m_iconAlignRule;
|
|
||||||
static css::Rule m_iconPartRule;
|
|
||||||
static css::Rule m_iconXRule;
|
|
||||||
static css::Rule m_iconYRule;
|
|
||||||
static css::Rule m_iconColorRule;
|
|
||||||
static css::Rule m_textAlignRule;
|
|
||||||
static css::Rule m_textColorRule;
|
|
||||||
static css::Rule m_paddingLeftRule;
|
|
||||||
static css::Rule m_paddingTopRule;
|
|
||||||
static css::Rule m_paddingRightRule;
|
|
||||||
static css::Rule m_paddingBottomRule;
|
|
||||||
|
|
||||||
css::Sheet* m_sheet;
|
|
||||||
std::vector<css::Style*> m_cssStyles;
|
|
||||||
StyleMap m_styles;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace skin
|
|
||||||
} // namespace app
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
#include "app/ui/keyboard_shortcuts.h"
|
#include "app/ui/keyboard_shortcuts.h"
|
||||||
#include "app/ui/main_window.h"
|
#include "app/ui/main_window.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/status_bar.h"
|
#include "app/ui/status_bar.h"
|
||||||
#include "app/ui/timeline.h"
|
#include "app/ui/timeline.h"
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include "app/modules/gui.h"
|
#include "app/modules/gui.h"
|
||||||
#include "app/ui/editor/editor_view.h"
|
#include "app/ui/editor/editor_view.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "she/font.h"
|
#include "she/font.h"
|
||||||
#include "she/surface.h"
|
#include "she/surface.h"
|
||||||
#include "she/system.h"
|
#include "she/system.h"
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
#include "app/ui/input_chain.h"
|
#include "app/ui/input_chain.h"
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/ui/skin/style.h"
|
|
||||||
#include "app/ui/status_bar.h"
|
#include "app/ui/status_bar.h"
|
||||||
#include "app/ui/workspace.h"
|
#include "app/ui/workspace.h"
|
||||||
#include "app/ui_context.h"
|
#include "app/ui_context.h"
|
||||||
|
@ -1177,8 +1176,9 @@ void Timeline::onPaint(ui::PaintEvent& ev)
|
||||||
// Draw onionskin indicators.
|
// Draw onionskin indicators.
|
||||||
gfx::Rect bounds = getOnionskinFramesBounds();
|
gfx::Rect bounds = getOnionskinFramesBounds();
|
||||||
if (!bounds.isEmpty()) {
|
if (!bounds.isEmpty()) {
|
||||||
drawPart(g, bounds,
|
drawPart(
|
||||||
NULL, skinTheme()->styles.timelineOnionskinRange(),
|
g, bounds, nullptr,
|
||||||
|
skinTheme()->newStyles.timelineOnionskinRange(),
|
||||||
false, false, false);
|
false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1289,8 +1289,9 @@ void Timeline::onPaint(ui::PaintEvent& ev)
|
||||||
|
|
||||||
paintNoDoc:;
|
paintNoDoc:;
|
||||||
if (noDoc)
|
if (noDoc)
|
||||||
drawPart(g, clientBounds(), NULL,
|
drawPart(
|
||||||
skinTheme()->styles.timelinePadding());
|
g, clientBounds(), nullptr,
|
||||||
|
skinTheme()->newStyles.timelinePadding());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timeline::onAfterCommandExecution(CommandExecutionEvent& ev)
|
void Timeline::onAfterCommandExecution(CommandExecutionEvent& ev)
|
||||||
|
@ -1503,23 +1504,25 @@ void Timeline::getDrawableFrames(ui::Graphics* g, frame_t* firstFrame, frame_t*
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timeline::drawPart(ui::Graphics* g, const gfx::Rect& bounds,
|
void Timeline::drawPart(ui::Graphics* g, const gfx::Rect& bounds,
|
||||||
const char* text, Style* style,
|
const std::string* text, ui::Style* style,
|
||||||
bool is_active,
|
const bool is_active,
|
||||||
bool is_hover,
|
const bool is_hover,
|
||||||
bool is_clicked,
|
const bool is_clicked,
|
||||||
bool is_disabled)
|
const bool is_disabled)
|
||||||
{
|
{
|
||||||
IntersectClip clip(g, bounds);
|
IntersectClip clip(g, bounds);
|
||||||
if (!clip)
|
if (!clip)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Style::State state;
|
PaintWidgetPartInfo info;
|
||||||
if (is_active) state += Style::active();
|
info.text = text;
|
||||||
if (is_hover) state += Style::hover();
|
info.styleFlags =
|
||||||
if (is_clicked) state += Style::clicked();
|
(is_active ? ui::Style::Layer::kFocus: 0) |
|
||||||
if (is_disabled) state += Style::disabled();
|
(is_hover ? ui::Style::Layer::kMouse: 0) |
|
||||||
|
(is_clicked ? ui::Style::Layer::kSelected: 0) |
|
||||||
|
(is_disabled ? ui::Style::Layer::kDisabled: 0);
|
||||||
|
|
||||||
style->paint(g, bounds, text, state);
|
theme()->paintWidgetPart(g, style, bounds, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timeline::drawClipboardRange(ui::Graphics* g)
|
void Timeline::drawClipboardRange(ui::Graphics* g)
|
||||||
|
@ -1549,34 +1552,35 @@ void Timeline::drawTop(ui::Graphics* g)
|
||||||
|
|
||||||
void Timeline::drawHeader(ui::Graphics* g)
|
void Timeline::drawHeader(ui::Graphics* g)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
bool allInvisible = allLayersInvisible();
|
bool allInvisible = allLayersInvisible();
|
||||||
bool allLocked = allLayersLocked();
|
bool allLocked = allLayersLocked();
|
||||||
bool allContinuous = allLayersContinuous();
|
bool allContinuous = allLayersContinuous();
|
||||||
|
|
||||||
drawPart(g, getPartBounds(Hit(PART_HEADER_EYE)),
|
drawPart(g, getPartBounds(Hit(PART_HEADER_EYE)),
|
||||||
NULL,
|
nullptr,
|
||||||
allInvisible ? styles.timelineClosedEye(): styles.timelineOpenEye(),
|
allInvisible ? styles.timelineClosedEye(): styles.timelineOpenEye(),
|
||||||
m_clk.part == PART_HEADER_EYE,
|
m_clk.part == PART_HEADER_EYE,
|
||||||
m_hot.part == PART_HEADER_EYE,
|
m_hot.part == PART_HEADER_EYE,
|
||||||
m_clk.part == PART_HEADER_EYE);
|
m_clk.part == PART_HEADER_EYE);
|
||||||
|
|
||||||
drawPart(g, getPartBounds(Hit(PART_HEADER_PADLOCK)),
|
drawPart(g, getPartBounds(Hit(PART_HEADER_PADLOCK)),
|
||||||
NULL,
|
nullptr,
|
||||||
allLocked ? styles.timelineClosedPadlock(): styles.timelineOpenPadlock(),
|
allLocked ? styles.timelineClosedPadlock(): styles.timelineOpenPadlock(),
|
||||||
m_clk.part == PART_HEADER_PADLOCK,
|
m_clk.part == PART_HEADER_PADLOCK,
|
||||||
m_hot.part == PART_HEADER_PADLOCK,
|
m_hot.part == PART_HEADER_PADLOCK,
|
||||||
m_clk.part == PART_HEADER_PADLOCK);
|
m_clk.part == PART_HEADER_PADLOCK);
|
||||||
|
|
||||||
drawPart(g, getPartBounds(Hit(PART_HEADER_CONTINUOUS)),
|
drawPart(g, getPartBounds(Hit(PART_HEADER_CONTINUOUS)),
|
||||||
NULL,
|
nullptr,
|
||||||
allContinuous ? styles.timelineContinuous(): styles.timelineDiscontinuous(),
|
allContinuous ? styles.timelineContinuous(): styles.timelineDiscontinuous(),
|
||||||
m_clk.part == PART_HEADER_CONTINUOUS,
|
m_clk.part == PART_HEADER_CONTINUOUS,
|
||||||
m_hot.part == PART_HEADER_CONTINUOUS,
|
m_hot.part == PART_HEADER_CONTINUOUS,
|
||||||
m_clk.part == PART_HEADER_CONTINUOUS);
|
m_clk.part == PART_HEADER_CONTINUOUS);
|
||||||
|
|
||||||
drawPart(g, getPartBounds(Hit(PART_HEADER_GEAR)),
|
drawPart(g, getPartBounds(Hit(PART_HEADER_GEAR)),
|
||||||
NULL, styles.timelineGear(),
|
nullptr,
|
||||||
|
styles.timelineGear(),
|
||||||
false,
|
false,
|
||||||
m_hot.part == PART_HEADER_GEAR,
|
m_hot.part == PART_HEADER_GEAR,
|
||||||
m_clk.part == PART_HEADER_GEAR);
|
m_clk.part == PART_HEADER_GEAR);
|
||||||
|
@ -1603,21 +1607,17 @@ void Timeline::drawHeaderFrame(ui::Graphics* g, frame_t frame)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Draw the header for the layers.
|
// Draw the header for the layers.
|
||||||
char buf[4];
|
std::string text = base::convert_to<std::string, int>(
|
||||||
std::snprintf(
|
|
||||||
buf, sizeof(buf), "%d",
|
|
||||||
// Draw only the first two digits
|
|
||||||
(docPref().timeline.firstFrame()+frame) % 100);
|
(docPref().timeline.firstFrame()+frame) % 100);
|
||||||
|
|
||||||
she::Font* oldFont = g->font();
|
drawPart(g, bounds, &text,
|
||||||
g->setFont(skinTheme()->getMiniFont());
|
skinTheme()->newStyles.timelineHeaderFrame(),
|
||||||
drawPart(g, bounds, buf, skinTheme()->styles.timelineBox(), is_active, is_hover, is_clicked);
|
is_active, is_hover, is_clicked);
|
||||||
g->setFont(oldFont);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
Layer* layer = m_layers[layerIdx].layer;
|
Layer* layer = m_layers[layerIdx].layer;
|
||||||
bool is_active = isLayerActive(layerIdx);
|
bool is_active = isLayerActive(layerIdx);
|
||||||
bool hotlayer = (m_hot.layer == layerIdx);
|
bool hotlayer = (m_hot.layer == layerIdx);
|
||||||
|
@ -1652,7 +1652,7 @@ void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
||||||
// Draw the continuous flag/group icon.
|
// Draw the continuous flag/group icon.
|
||||||
bounds = getPartBounds(Hit(PART_LAYER_CONTINUOUS_ICON, layerIdx));
|
bounds = getPartBounds(Hit(PART_LAYER_CONTINUOUS_ICON, layerIdx));
|
||||||
if (layer->isImage()) {
|
if (layer->isImage()) {
|
||||||
drawPart(g, bounds, NULL,
|
drawPart(g, bounds, nullptr,
|
||||||
layer->isContinuous() ? styles.timelineContinuous():
|
layer->isContinuous() ? styles.timelineContinuous():
|
||||||
styles.timelineDiscontinuous(),
|
styles.timelineDiscontinuous(),
|
||||||
is_active,
|
is_active,
|
||||||
|
@ -1660,7 +1660,7 @@ void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
||||||
(clklayer && m_clk.part == PART_LAYER_CONTINUOUS_ICON));
|
(clklayer && m_clk.part == PART_LAYER_CONTINUOUS_ICON));
|
||||||
}
|
}
|
||||||
else if (layer->isGroup()) {
|
else if (layer->isGroup()) {
|
||||||
drawPart(g, bounds, NULL,
|
drawPart(g, bounds, nullptr,
|
||||||
layer->isCollapsed() ? styles.timelineClosedGroup():
|
layer->isCollapsed() ? styles.timelineClosedGroup():
|
||||||
styles.timelineOpenGroup(),
|
styles.timelineOpenGroup(),
|
||||||
is_active,
|
is_active,
|
||||||
|
@ -1695,13 +1695,17 @@ void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
||||||
doc::rgba_geta(layerColor)),
|
doc::rgba_geta(layerColor)),
|
||||||
b2);
|
b2);
|
||||||
|
|
||||||
drawPart(g, textBounds, layer->name().c_str(), styles.timelineLayerTextOnly(),
|
drawPart(g, textBounds,
|
||||||
|
&layer->name(),
|
||||||
|
styles.timelineLayerTextOnly(),
|
||||||
is_active,
|
is_active,
|
||||||
(hotlayer && m_hot.part == PART_LAYER_TEXT),
|
(hotlayer && m_hot.part == PART_LAYER_TEXT),
|
||||||
(clklayer && m_clk.part == PART_LAYER_TEXT));
|
(clklayer && m_clk.part == PART_LAYER_TEXT));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
drawPart(g, textBounds, layer->name().c_str(), styles.timelineLayer(),
|
drawPart(g, textBounds,
|
||||||
|
&layer->name(),
|
||||||
|
styles.timelineLayer(),
|
||||||
is_active,
|
is_active,
|
||||||
(hotlayer && m_hot.part == PART_LAYER_TEXT),
|
(hotlayer && m_hot.part == PART_LAYER_TEXT),
|
||||||
(clklayer && m_clk.part == PART_LAYER_TEXT));
|
(clklayer && m_clk.part == PART_LAYER_TEXT));
|
||||||
|
@ -1741,7 +1745,7 @@ void Timeline::drawLayer(ui::Graphics* g, int layerIdx)
|
||||||
|
|
||||||
void Timeline::drawCel(ui::Graphics* g, layer_t layerIndex, frame_t frame, Cel* cel, DrawCelData* data)
|
void Timeline::drawCel(ui::Graphics* g, layer_t layerIndex, frame_t frame, Cel* cel, DrawCelData* data)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
Layer* layer = m_layers[layerIndex].layer;
|
Layer* layer = m_layers[layerIndex].layer;
|
||||||
Image* image = (cel ? cel->image(): nullptr);
|
Image* image = (cel ? cel->image(): nullptr);
|
||||||
bool is_hover = (m_hot.part == PART_CEL &&
|
bool is_hover = (m_hot.part == PART_CEL &&
|
||||||
|
@ -1757,9 +1761,9 @@ void Timeline::drawCel(ui::Graphics* g, layer_t layerIndex, frame_t frame, Cel*
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (layer == m_layer && frame == m_frame)
|
if (layer == m_layer && frame == m_frame)
|
||||||
drawPart(g, bounds, NULL, styles.timelineSelectedCel(), false, false, true);
|
drawPart(g, bounds, nullptr, styles.timelineSelectedCel(), false, false, true);
|
||||||
else
|
else
|
||||||
drawPart(g, bounds, NULL, styles.timelineBox(), is_active, is_hover);
|
drawPart(g, bounds, nullptr, styles.timelineBox(), is_active, is_hover);
|
||||||
|
|
||||||
if ((docPref().thumbnails.enabled() || m_zoom > 1) && image) {
|
if ((docPref().thumbnails.enabled() || m_zoom > 1) && image) {
|
||||||
gfx::Rect thumb_bounds = gfx::Rect(bounds).shrink(guiscale()).inflate(guiscale(), guiscale());
|
gfx::Rect thumb_bounds = gfx::Rect(bounds).shrink(guiscale()).inflate(guiscale(), guiscale());
|
||||||
|
@ -1794,7 +1798,7 @@ void Timeline::drawCel(ui::Graphics* g, layer_t layerIndex, frame_t frame, Cel*
|
||||||
|
|
||||||
bounds.w = headerBoxWidth();
|
bounds.w = headerBoxWidth();
|
||||||
|
|
||||||
skin::Style* style;
|
ui::Style* style = nullptr;
|
||||||
bool fromLeft = false;
|
bool fromLeft = false;
|
||||||
bool fromRight = false;
|
bool fromRight = false;
|
||||||
if (is_empty || !data) {
|
if (is_empty || !data) {
|
||||||
|
@ -1822,14 +1826,14 @@ void Timeline::drawCel(ui::Graphics* g, layer_t layerIndex, frame_t frame, Cel*
|
||||||
else
|
else
|
||||||
style = styles.timelineKeyframe();
|
style = styles.timelineKeyframe();
|
||||||
}
|
}
|
||||||
drawPart(g, bounds, NULL, style, is_active, is_hover);
|
drawPart(g, bounds, nullptr, style, is_active, is_hover);
|
||||||
|
|
||||||
if (m_zoom > 1) {
|
if (m_zoom > 1) {
|
||||||
if (style == styles.timelineFromBoth() ||
|
if (style == styles.timelineFromBoth() ||
|
||||||
style == styles.timelineFromRight()) {
|
style == styles.timelineFromRight()) {
|
||||||
style = styles.timelineFromBoth();
|
style = styles.timelineFromBoth();
|
||||||
while ((bounds.x += bounds.w) < full_bounds.x + full_bounds.w) {
|
while ((bounds.x += bounds.w) < full_bounds.x + full_bounds.w) {
|
||||||
drawPart(g, bounds, NULL, style, is_active, is_hover);
|
drawPart(g, bounds, nullptr, style, is_active, is_hover);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1950,11 +1954,11 @@ void Timeline::drawCelLinkDecorators(ui::Graphics* g, const gfx::Rect& full_boun
|
||||||
Cel* cel, frame_t frame, bool is_active, bool is_hover,
|
Cel* cel, frame_t frame, bool is_active, bool is_hover,
|
||||||
DrawCelData* data)
|
DrawCelData* data)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
ObjectId imageId = (*data->activeIt)->image()->id();
|
ObjectId imageId = (*data->activeIt)->image()->id();
|
||||||
|
|
||||||
gfx::Rect bounds = gfx::Rect(full_bounds).setSize(gfx::Size(headerBoxWidth(), headerBoxHeight()));
|
gfx::Rect bounds = gfx::Rect(full_bounds).setSize(gfx::Size(headerBoxWidth(), headerBoxHeight()));
|
||||||
skin::Style* style = NULL;
|
ui::Style* style = NULL;
|
||||||
|
|
||||||
// Links at the left or right side
|
// Links at the left or right side
|
||||||
bool left = (data->firstLink != data->end ? frame > (*data->firstLink)->frame(): false);
|
bool left = (data->firstLink != data->end ? frame > (*data->firstLink)->frame(): false);
|
||||||
|
@ -1978,12 +1982,12 @@ void Timeline::drawCelLinkDecorators(ui::Graphics* g, const gfx::Rect& full_boun
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style) {
|
if (style) {
|
||||||
drawPart(g, bounds, NULL, style, is_active, is_hover);
|
drawPart(g, bounds, nullptr, style, is_active, is_hover);
|
||||||
|
|
||||||
if (m_zoom > 1 && (style == styles.timelineBothLinks() || style == styles.timelineRightLink())) {
|
if (m_zoom > 1 && (style == styles.timelineBothLinks() || style == styles.timelineRightLink())) {
|
||||||
style = styles.timelineBothLinks();
|
style = styles.timelineBothLinks();
|
||||||
while ((bounds.x += bounds.w) < full_bounds.x + full_bounds.w) {
|
while ((bounds.x += bounds.w) < full_bounds.x + full_bounds.w) {
|
||||||
drawPart(g, bounds, NULL, style, is_active, is_hover);
|
drawPart(g, bounds, nullptr, style, is_active, is_hover);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1996,7 +2000,7 @@ void Timeline::drawFrameTags(ui::Graphics* g)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SkinTheme* theme = skinTheme();
|
SkinTheme* theme = skinTheme();
|
||||||
SkinTheme::Styles& styles = theme->styles;
|
auto& styles = theme->newStyles;
|
||||||
|
|
||||||
g->fillRect(theme->colors.workspace(),
|
g->fillRect(theme->colors.workspace(),
|
||||||
gfx::Rect(
|
gfx::Rect(
|
||||||
|
@ -2013,7 +2017,7 @@ void Timeline::drawFrameTags(ui::Graphics* g)
|
||||||
{
|
{
|
||||||
IntersectClip clip(g, bounds);
|
IntersectClip clip(g, bounds);
|
||||||
if (clip)
|
if (clip)
|
||||||
drawPart(g, bounds, NULL, styles.timelineLoopRange());
|
drawPart(g, bounds, nullptr, styles.timelineLoopRange());
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -2048,7 +2052,7 @@ void Timeline::drawFrameTags(ui::Graphics* g)
|
||||||
|
|
||||||
void Timeline::drawRangeOutline(ui::Graphics* g)
|
void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
|
|
||||||
gfx::Rect clipBounds;
|
gfx::Rect clipBounds;
|
||||||
switch (m_range.type()) {
|
switch (m_range.type()) {
|
||||||
|
@ -2060,12 +2064,14 @@ void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
if (!clip)
|
if (!clip)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Style::State state;
|
PaintWidgetPartInfo info;
|
||||||
if (m_range.enabled()) state += Style::active();
|
info.styleFlags =
|
||||||
if (m_hot.part == PART_RANGE_OUTLINE) state += Style::hover();
|
(m_range.enabled() ? ui::Style::Layer::kFocus: 0) |
|
||||||
|
(m_hot.part == PART_RANGE_OUTLINE ? ui::Style::Layer::kMouse: 0);
|
||||||
|
|
||||||
gfx::Rect bounds = getPartBounds(Hit(PART_RANGE_OUTLINE));
|
gfx::Rect bounds = getPartBounds(Hit(PART_RANGE_OUTLINE));
|
||||||
styles.timelineRangeOutline()->paint(g, bounds, NULL, state);
|
theme()->paintWidgetPart(
|
||||||
|
g, styles.timelineRangeOutline(), bounds, info);
|
||||||
|
|
||||||
Range drop = m_dropRange;
|
Range drop = m_dropRange;
|
||||||
gfx::Rect dropBounds = getRangeBounds(drop);
|
gfx::Rect dropBounds = getRangeBounds(drop);
|
||||||
|
@ -2074,7 +2080,9 @@ void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
|
|
||||||
case Range::kCels: {
|
case Range::kCels: {
|
||||||
dropBounds = dropBounds.enlarge(outlineWidth());
|
dropBounds = dropBounds.enlarge(outlineWidth());
|
||||||
styles.timelineRangeOutline()->paint(g, dropBounds, NULL, Style::active());
|
info.styleFlags = ui::Style::Layer::kFocus;
|
||||||
|
theme()->paintWidgetPart(
|
||||||
|
g, styles.timelineRangeOutline(), dropBounds, info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2090,7 +2098,9 @@ void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
|
|
||||||
dropBounds.w = w;
|
dropBounds.w = w;
|
||||||
|
|
||||||
styles.timelineDropFrameDeco()->paint(g, dropBounds, NULL, Style::State());
|
info.styleFlags = 0;
|
||||||
|
theme()->paintWidgetPart(
|
||||||
|
g, styles.timelineDropFrameDeco(), dropBounds, info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2106,7 +2116,8 @@ void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
|
|
||||||
dropBounds.h = h;
|
dropBounds.h = h;
|
||||||
|
|
||||||
styles.timelineDropLayerDeco()->paint(g, dropBounds, NULL, Style::State());
|
theme()->paintWidgetPart(
|
||||||
|
g, styles.timelineDropLayerDeco(), dropBounds, info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2114,7 +2125,7 @@ void Timeline::drawRangeOutline(ui::Graphics* g)
|
||||||
|
|
||||||
void Timeline::drawPaddings(ui::Graphics* g)
|
void Timeline::drawPaddings(ui::Graphics* g)
|
||||||
{
|
{
|
||||||
SkinTheme::Styles& styles = skinTheme()->styles;
|
auto& styles = skinTheme()->newStyles;
|
||||||
|
|
||||||
gfx::Rect client = clientBounds();
|
gfx::Rect client = clientBounds();
|
||||||
gfx::Rect bottomLayer;
|
gfx::Rect bottomLayer;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2001-2016 David Capello
|
// Copyright (C) 2001-2017 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
|
@ -40,7 +40,6 @@ namespace ui {
|
||||||
namespace app {
|
namespace app {
|
||||||
|
|
||||||
namespace skin {
|
namespace skin {
|
||||||
class Style;
|
|
||||||
class SkinTheme;
|
class SkinTheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,9 +239,12 @@ namespace app {
|
||||||
void getDrawableLayers(ui::Graphics* g, layer_t* firstLayer, layer_t* lastLayer);
|
void getDrawableLayers(ui::Graphics* g, layer_t* firstLayer, layer_t* lastLayer);
|
||||||
void getDrawableFrames(ui::Graphics* g, frame_t* firstFrame, frame_t* lastFrame);
|
void getDrawableFrames(ui::Graphics* g, frame_t* firstFrame, frame_t* lastFrame);
|
||||||
void drawPart(ui::Graphics* g, const gfx::Rect& bounds,
|
void drawPart(ui::Graphics* g, const gfx::Rect& bounds,
|
||||||
const char* text, skin::Style* style,
|
const std::string* text,
|
||||||
bool is_active = false, bool is_hover = false,
|
ui::Style* style,
|
||||||
bool is_clicked = false, bool is_disabled = false);
|
const bool is_active = false,
|
||||||
|
const bool is_hover = false,
|
||||||
|
const bool is_clicked = false,
|
||||||
|
const bool is_disabled = false);
|
||||||
void drawTop(ui::Graphics* g);
|
void drawTop(ui::Graphics* g);
|
||||||
void drawHeader(ui::Graphics* g);
|
void drawHeader(ui::Graphics* g);
|
||||||
void drawHeaderFrame(ui::Graphics* g, frame_t frame);
|
void drawHeaderFrame(ui::Graphics* g, frame_t frame);
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include "app/ui/drop_down_button.h"
|
#include "app/ui/drop_down_button.h"
|
||||||
#include "app/ui/icon_button.h"
|
#include "app/ui/icon_button.h"
|
||||||
#include "app/ui/search_entry.h"
|
#include "app/ui/search_entry.h"
|
||||||
#include "app/ui/skin/skin_style_property.h"
|
|
||||||
#include "app/ui/skin/skin_theme.h"
|
#include "app/ui/skin/skin_theme.h"
|
||||||
#include "app/widget_not_found.h"
|
#include "app/widget_not_found.h"
|
||||||
#include "app/xml_document.h"
|
#include "app/xml_document.h"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Aseprite Document Library
|
// Aseprite Document Library
|
||||||
// Copyright (c) 2001-2016 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.
|
||||||
|
@ -51,7 +51,7 @@ namespace doc {
|
||||||
|
|
||||||
virtual int getMemSize() const override;
|
virtual int getMemSize() const override;
|
||||||
|
|
||||||
std::string name() const { return m_name; }
|
const std::string& name() const { return m_name; }
|
||||||
void setName(const std::string& name) { m_name = name; }
|
void setName(const std::string& name) { m_name = name; }
|
||||||
|
|
||||||
Sprite* sprite() const { return m_sprite; }
|
Sprite* sprite() const { return m_sprite; }
|
||||||
|
|
|
@ -17,7 +17,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
std::vector<std::string> dimensions;
|
std::vector<std::string> dimensions;
|
||||||
std::vector<std::string> colors;
|
std::vector<std::string> colors;
|
||||||
std::vector<std::string> parts;
|
std::vector<std::string> parts;
|
||||||
std::vector<std::string> styles;
|
|
||||||
std::vector<std::string> newStyles;
|
std::vector<std::string> newStyles;
|
||||||
|
|
||||||
TiXmlHandle handle(doc);
|
TiXmlHandle handle(doc);
|
||||||
|
@ -52,17 +51,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
elem = elem->NextSiblingElement();
|
elem = elem->NextSiblingElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
elem = handle
|
|
||||||
.FirstChild("theme")
|
|
||||||
.FirstChild("stylesheet")
|
|
||||||
.FirstChild("style").ToElement();
|
|
||||||
while (elem) {
|
|
||||||
const char* id = elem->Attribute("id");
|
|
||||||
if (!strchr(id, ':'))
|
|
||||||
styles.push_back(id);
|
|
||||||
elem = elem->NextSiblingElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
elem = handle
|
elem = handle
|
||||||
.FirstChild("theme")
|
.FirstChild("theme")
|
||||||
.FirstChild("styles")
|
.FirstChild("styles")
|
||||||
|
@ -148,27 +136,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
std::cout
|
std::cout
|
||||||
<< " };\n";
|
<< " };\n";
|
||||||
|
|
||||||
// Styles sub class
|
|
||||||
std::cout
|
|
||||||
<< "\n"
|
|
||||||
<< " class Styles {\n"
|
|
||||||
<< " template<typename> friend class ThemeFile;\n"
|
|
||||||
<< " public:\n";
|
|
||||||
for (auto style : styles) {
|
|
||||||
std::string id = convert_xmlid_to_cppid(style, false);
|
|
||||||
std::cout
|
|
||||||
<< " skin::Style* " << id << "() const { return m_" << id << "; }\n";
|
|
||||||
}
|
|
||||||
std::cout
|
|
||||||
<< " private:\n";
|
|
||||||
for (auto style : styles) {
|
|
||||||
std::string id = convert_xmlid_to_cppid(style, false);
|
|
||||||
std::cout
|
|
||||||
<< " skin::Style* m_" << id << ";\n";
|
|
||||||
}
|
|
||||||
std::cout
|
|
||||||
<< " };\n";
|
|
||||||
|
|
||||||
// New styles sub class
|
// New styles sub class
|
||||||
std::cout
|
std::cout
|
||||||
<< "\n"
|
<< "\n"
|
||||||
|
@ -195,7 +162,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
<< " Dimensions dimensions;\n"
|
<< " Dimensions dimensions;\n"
|
||||||
<< " Colors colors;\n"
|
<< " Colors colors;\n"
|
||||||
<< " Parts parts;\n"
|
<< " Parts parts;\n"
|
||||||
<< " Styles styles;\n"
|
|
||||||
<< " NewStyles newStyles;\n"
|
<< " NewStyles newStyles;\n"
|
||||||
<< "\n"
|
<< "\n"
|
||||||
<< " protected:\n"
|
<< " protected:\n"
|
||||||
|
@ -215,11 +181,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
std::cout << " byId(parts.m_" << id
|
std::cout << " byId(parts.m_" << id
|
||||||
<< ", \"" << part << "\");\n";
|
<< ", \"" << part << "\");\n";
|
||||||
}
|
}
|
||||||
for (auto style : styles) {
|
|
||||||
std::string id = convert_xmlid_to_cppid(style, false);
|
|
||||||
std::cout << " byId(styles.m_" << id
|
|
||||||
<< ", \"" << style << "\");\n";
|
|
||||||
}
|
|
||||||
for (auto newStyle : newStyles) {
|
for (auto newStyle : newStyles) {
|
||||||
std::string id = convert_xmlid_to_cppid(newStyle, false);
|
std::string id = convert_xmlid_to_cppid(newStyle, false);
|
||||||
std::cout << " byId(newStyles.m_" << id
|
std::cout << " byId(newStyles.m_" << id
|
||||||
|
@ -238,9 +199,6 @@ void gen_theme_class(TiXmlDocument* doc, const std::string& inputFn)
|
||||||
<< " void byId(skin::SkinPartPtr& part, const std::string& id) {\n"
|
<< " void byId(skin::SkinPartPtr& part, const std::string& id) {\n"
|
||||||
<< " part = static_cast<T*>(this)->getPartById(id);\n"
|
<< " part = static_cast<T*>(this)->getPartById(id);\n"
|
||||||
<< " }\n"
|
<< " }\n"
|
||||||
<< " void byId(skin::Style*& style, const std::string& id) {\n"
|
|
||||||
<< " style = static_cast<T*>(this)->getStyle(id);\n"
|
|
||||||
<< " }\n"
|
|
||||||
<< " void byId(ui::Style*& style, const std::string& id) {\n"
|
<< " void byId(ui::Style*& style, const std::string& id) {\n"
|
||||||
<< " style = static_cast<T*>(this)->getNewStyle(id);\n"
|
<< " style = static_cast<T*>(this)->getNewStyle(id);\n"
|
||||||
<< " }\n";
|
<< " }\n";
|
||||||
|
|
|
@ -187,8 +187,9 @@ void Theme::paintWidgetPart(Graphics* g,
|
||||||
gfx::Color outBgColor = gfx::ColorNone;
|
gfx::Color outBgColor = gfx::ColorNone;
|
||||||
for_each_layer(
|
for_each_layer(
|
||||||
info.styleFlags, style,
|
info.styleFlags, style,
|
||||||
[this, g, &info, &rc, &outBgColor](const Style::Layer& layer) {
|
[this, g, style, &info, &rc, &outBgColor]
|
||||||
paintLayer(g, layer,
|
(const Style::Layer& layer) {
|
||||||
|
paintLayer(g, style, layer,
|
||||||
(info.text ? *info.text: std::string()),
|
(info.text ? *info.text: std::string()),
|
||||||
info.mnemonic, rc, outBgColor);
|
info.mnemonic, rc, outBgColor);
|
||||||
});
|
});
|
||||||
|
@ -284,6 +285,7 @@ void Theme::paintTooltip(Graphics* g,
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::paintLayer(Graphics* g,
|
void Theme::paintLayer(Graphics* g,
|
||||||
|
const Style* style,
|
||||||
const Style::Layer& layer,
|
const Style::Layer& layer,
|
||||||
const std::string& text,
|
const std::string& text,
|
||||||
const int mnemonic,
|
const int mnemonic,
|
||||||
|
@ -390,6 +392,10 @@ void Theme::paintLayer(Graphics* g,
|
||||||
|
|
||||||
case Style::Layer::Type::kText:
|
case Style::Layer::Type::kText:
|
||||||
if (layer.color() != gfx::ColorNone) {
|
if (layer.color() != gfx::ColorNone) {
|
||||||
|
she::Font* oldFont = g->font();
|
||||||
|
if (style->font())
|
||||||
|
g->setFont(style->font());
|
||||||
|
|
||||||
if (layer.align() & WORDWRAP) {
|
if (layer.align() & WORDWRAP) {
|
||||||
gfx::Rect textBounds = rc;
|
gfx::Rect textBounds = rc;
|
||||||
textBounds.offset(layer.offset());
|
textBounds.offset(layer.offset());
|
||||||
|
@ -424,6 +430,9 @@ void Theme::paintLayer(Graphics* g,
|
||||||
bgColor,
|
bgColor,
|
||||||
pt, mnemonic);
|
pt, mnemonic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (style->font())
|
||||||
|
g->setFont(oldFont);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -470,6 +479,7 @@ gfx::Size Theme::calcSizeHint(const Widget* widget,
|
||||||
}
|
}
|
||||||
|
|
||||||
void Theme::measureLayer(const Widget* widget,
|
void Theme::measureLayer(const Widget* widget,
|
||||||
|
const Style* style,
|
||||||
const Style::Layer& layer,
|
const Style::Layer& layer,
|
||||||
gfx::Border& borderHint,
|
gfx::Border& borderHint,
|
||||||
gfx::Size& textHint, int& textAlign,
|
gfx::Size& textHint, int& textAlign,
|
||||||
|
@ -496,9 +506,9 @@ void Theme::measureLayer(const Widget* widget,
|
||||||
|
|
||||||
case Style::Layer::Type::kText:
|
case Style::Layer::Type::kText:
|
||||||
if (layer.color() != gfx::ColorNone) {
|
if (layer.color() != gfx::ColorNone) {
|
||||||
gfx::Size textSize(Graphics::measureUITextLength(widget->text(),
|
she::Font* font = (style->font() ? style->font(): widget->font());
|
||||||
widget->font()),
|
gfx::Size textSize(Graphics::measureUITextLength(widget->text(), font),
|
||||||
widget->font()->height());
|
font->height());
|
||||||
textHint.w = std::max(textHint.w, textSize.w);
|
textHint.w = std::max(textHint.w, textSize.w);
|
||||||
textHint.h = std::max(textHint.h, textSize.h);
|
textHint.h = std::max(textHint.h, textSize.h);
|
||||||
textAlign = layer.align();
|
textAlign = layer.align();
|
||||||
|
@ -591,9 +601,9 @@ void Theme::calcWidgetMetrics(const Widget* widget,
|
||||||
|
|
||||||
for_each_layer(
|
for_each_layer(
|
||||||
widget, style,
|
widget, style,
|
||||||
[this, widget, &borderHint, &textHint, &textAlign, &iconHint, &iconAlign]
|
[this, widget, style, &borderHint, &textHint, &textAlign, &iconHint, &iconAlign]
|
||||||
(const Style::Layer& layer) {
|
(const Style::Layer& layer) {
|
||||||
measureLayer(widget, layer,
|
measureLayer(widget, style, layer,
|
||||||
borderHint,
|
borderHint,
|
||||||
textHint, textAlign,
|
textHint, textAlign,
|
||||||
iconHint, iconAlign);
|
iconHint, iconAlign);
|
||||||
|
|
|
@ -130,12 +130,14 @@ namespace ui {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void paintLayer(Graphics* g,
|
void paintLayer(Graphics* g,
|
||||||
|
const Style* style,
|
||||||
const Style::Layer& layer,
|
const Style::Layer& layer,
|
||||||
const std::string& text,
|
const std::string& text,
|
||||||
const int mnemonic,
|
const int mnemonic,
|
||||||
gfx::Rect& rc,
|
gfx::Rect& rc,
|
||||||
gfx::Color& bgColor);
|
gfx::Color& bgColor);
|
||||||
void measureLayer(const Widget* widget,
|
void measureLayer(const Widget* widget,
|
||||||
|
const Style* style,
|
||||||
const Style::Layer& layer,
|
const Style::Layer& layer,
|
||||||
gfx::Border& borderHint,
|
gfx::Border& borderHint,
|
||||||
gfx::Size& textHint, int& textAlign,
|
gfx::Size& textHint, int& textAlign,
|
||||||
|
|
Loading…
Reference in New Issue