diff options
Diffstat (limited to 'src/FbWinFrame.cc')
-rw-r--r-- | src/FbWinFrame.cc | 97 |
1 files changed, 43 insertions, 54 deletions
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index 5cc7631..ea1236a 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc | |||
@@ -28,9 +28,10 @@ | |||
28 | #include "FbTk/Compose.hh" | 28 | #include "FbTk/Compose.hh" |
29 | #include "FbTk/Transparent.hh" | 29 | #include "FbTk/Transparent.hh" |
30 | #include "FbTk/CompareEqual.hh" | 30 | #include "FbTk/CompareEqual.hh" |
31 | |||
31 | #include "FbWinFrameTheme.hh" | 32 | #include "FbWinFrameTheme.hh" |
32 | #include "Screen.hh" | 33 | #include "Screen.hh" |
33 | 34 | #include "FocusableTheme.hh" | |
34 | #include "IconButton.hh" | 35 | #include "IconButton.hh" |
35 | 36 | ||
36 | #include <algorithm> | 37 | #include <algorithm> |
@@ -40,7 +41,7 @@ using std::mem_fun; | |||
40 | using std::string; | 41 | using std::string; |
41 | 42 | ||
42 | FbWinFrame::FbWinFrame(BScreen &screen, | 43 | FbWinFrame::FbWinFrame(BScreen &screen, |
43 | FbTk::ThemeProxy<FbWinFrameTheme> &theme, | 44 | FocusableTheme<FbWinFrameTheme> &theme, |
44 | FbTk::ImageControl &imgctrl, | 45 | FbTk::ImageControl &imgctrl, |
45 | FbTk::XLayer &layer, | 46 | FbTk::XLayer &layer, |
46 | int x, int y, | 47 | int x, int y, |
@@ -90,8 +91,8 @@ FbWinFrame::FbWinFrame(BScreen &screen, | |||
90 | m_button_size(1), | 91 | m_button_size(1), |
91 | m_height_before_shade(1), | 92 | m_height_before_shade(1), |
92 | m_shaded(false), | 93 | m_shaded(false), |
93 | m_focused_alpha(AlphaAcc(*theme, &FbWinFrameTheme::focusedAlpha)), | 94 | m_focused_alpha(AlphaAcc(*theme.focusedTheme(), &FbWinFrameTheme::alpha)), |
94 | m_unfocused_alpha(AlphaAcc(*theme, &FbWinFrameTheme::unfocusedAlpha)), | 95 | m_unfocused_alpha(AlphaAcc(*theme.unfocusedTheme(), &FbWinFrameTheme::alpha)), |
95 | m_shape(m_window, theme->shapePlace()), | 96 | m_shape(m_window, theme->shapePlace()), |
96 | m_disable_themeshape(false) { | 97 | m_disable_themeshape(false) { |
97 | init(); | 98 | init(); |
@@ -119,7 +120,7 @@ bool FbWinFrame::setTabMode(TabMode tabmode) { | |||
119 | if (tabmode == EXTERNAL) { | 120 | if (tabmode == EXTERNAL) { |
120 | m_label.show(); | 121 | m_label.show(); |
121 | m_tab_container.setBorderWidth(m_window.borderWidth()); | 122 | m_tab_container.setBorderWidth(m_window.borderWidth()); |
122 | m_tab_container.setBorderColor(theme()->border(m_focused).color()); | 123 | m_tab_container.setBorderColor(theme()->border().color()); |
123 | m_tab_container.setEventMask( | 124 | m_tab_container.setEventMask( |
124 | ButtonPressMask | ButtonReleaseMask | | 125 | ButtonPressMask | ButtonReleaseMask | |
125 | ButtonMotionMask | ExposureMask | | 126 | ButtonMotionMask | ExposureMask | |
@@ -486,10 +487,11 @@ void FbWinFrame::setFocus(bool newvalue) { | |||
486 | } | 487 | } |
487 | 488 | ||
488 | if (m_decoration_mask & DECORM_BORDER && | 489 | if (m_decoration_mask & DECORM_BORDER && |
489 | (theme()->border(true).width() != theme()->border(false).width() || | 490 | (theme().focusedTheme()->border().width() != |
490 | theme()->border(true).color().pixel() != | 491 | theme().unfocusedTheme()->border().width() || |
491 | theme()->border(false).color().pixel())) | 492 | theme().focusedTheme()->border().color().pixel() != |
492 | setBorderWidth(theme()->border(newvalue).width()); | 493 | theme().unfocusedTheme()->border().color().pixel())) |
494 | setBorderWidth(theme()->border().width()); | ||
493 | 495 | ||
494 | applyAll(); | 496 | applyAll(); |
495 | clearAll(); | 497 | clearAll(); |
@@ -1125,22 +1127,22 @@ void FbWinFrame::renderTitlebar() { | |||
1125 | } | 1127 | } |
1126 | 1128 | ||
1127 | // render pixmaps | 1129 | // render pixmaps |
1128 | render(theme()->titleFocusTexture(), m_title_focused_color, | 1130 | render(theme().focusedTheme()->titleTexture(), m_title_focused_color, |
1129 | m_title_focused_pm, | 1131 | m_title_focused_pm, |
1130 | m_titlebar.width(), m_titlebar.height()); | 1132 | m_titlebar.width(), m_titlebar.height()); |
1131 | 1133 | ||
1132 | render(theme()->titleUnfocusTexture(), m_title_unfocused_color, | 1134 | render(theme().unfocusedTheme()->titleTexture(), m_title_unfocused_color, |
1133 | m_title_unfocused_pm, | 1135 | m_title_unfocused_pm, |
1134 | m_titlebar.width(), m_titlebar.height()); | 1136 | m_titlebar.width(), m_titlebar.height()); |
1135 | 1137 | ||
1136 | //!! TODO: don't render label if internal tabs | 1138 | //!! TODO: don't render label if internal tabs |
1137 | 1139 | ||
1138 | render(theme()->focusedIconbarTheme()->texture(), m_label_focused_color, | 1140 | render(theme().focusedTheme()->iconbarTheme()->texture(), |
1139 | m_label_focused_pm, | 1141 | m_label_focused_color, m_label_focused_pm, |
1140 | m_label.width(), m_label.height()); | 1142 | m_label.width(), m_label.height()); |
1141 | 1143 | ||
1142 | render(theme()->unfocusedIconbarTheme()->texture(), m_label_unfocused_color, | 1144 | render(theme().unfocusedTheme()->iconbarTheme()->texture(), |
1143 | m_label_unfocused_pm, | 1145 | m_label_unfocused_color, m_label_unfocused_pm, |
1144 | m_label.width(), m_label.height()); | 1146 | m_label.width(), m_label.height()); |
1145 | 1147 | ||
1146 | } | 1148 | } |
@@ -1151,13 +1153,13 @@ void FbWinFrame::renderTabContainer() { | |||
1151 | return; | 1153 | return; |
1152 | } | 1154 | } |
1153 | 1155 | ||
1154 | const FbTk::Texture *tc_focused = &theme()->focusedIconbarTheme()->texture(); | 1156 | const FbTk::Texture *tc_focused = &theme().focusedTheme()->iconbarTheme()->texture(); |
1155 | const FbTk::Texture *tc_unfocused = &theme()->unfocusedIconbarTheme()->texture(); | 1157 | const FbTk::Texture *tc_unfocused = &theme().unfocusedTheme()->iconbarTheme()->texture(); |
1156 | 1158 | ||
1157 | if (m_tabmode == EXTERNAL && tc_focused->type() & FbTk::Texture::PARENTRELATIVE) | 1159 | if (m_tabmode == EXTERNAL && tc_focused->type() & FbTk::Texture::PARENTRELATIVE) |
1158 | tc_focused = &theme()->titleFocusTexture(); | 1160 | tc_focused = &theme().focusedTheme()->titleTexture(); |
1159 | if (m_tabmode == EXTERNAL && tc_unfocused->type() & FbTk::Texture::PARENTRELATIVE) | 1161 | if (m_tabmode == EXTERNAL && tc_unfocused->type() & FbTk::Texture::PARENTRELATIVE) |
1160 | tc_unfocused = &theme()->titleUnfocusTexture(); | 1162 | tc_unfocused = &theme().unfocusedTheme()->titleTexture(); |
1161 | 1163 | ||
1162 | render(*tc_focused, m_tabcontainer_focused_color, | 1164 | render(*tc_focused, m_tabcontainer_focused_color, |
1163 | m_tabcontainer_focused_pm, | 1165 | m_tabcontainer_focused_pm, |
@@ -1186,12 +1188,8 @@ void FbWinFrame::applyTitlebar() { | |||
1186 | m_label.setAlpha(alpha); | 1188 | m_label.setAlpha(alpha); |
1187 | 1189 | ||
1188 | if (m_tabmode != INTERNAL) { | 1190 | if (m_tabmode != INTERNAL) { |
1189 | m_label.setGC(m_focused ? | 1191 | m_label.setGC(theme()->iconbarTheme()->text().textGC()); |
1190 | theme()->focusedIconbarTheme()->text().textGC() : | 1192 | m_label.setJustify(theme()->iconbarTheme()->text().justify()); |
1191 | theme()->unfocusedIconbarTheme()->text().textGC()); | ||
1192 | m_label.setJustify(m_focused ? | ||
1193 | theme()->focusedIconbarTheme()->text().justify() : | ||
1194 | theme()->unfocusedIconbarTheme()->text().justify()); | ||
1195 | 1193 | ||
1196 | if (label_pm != 0) | 1194 | if (label_pm != 0) |
1197 | m_label.setBackgroundPixmap(label_pm); | 1195 | m_label.setBackgroundPixmap(label_pm); |
@@ -1217,18 +1215,19 @@ void FbWinFrame::renderHandles() { | |||
1217 | return; | 1215 | return; |
1218 | } | 1216 | } |
1219 | 1217 | ||
1220 | render(theme()->handleFocusTexture(), m_handle_focused_color, | 1218 | render(theme().focusedTheme()->handleTexture(), m_handle_focused_color, |
1221 | m_handle_focused_pm, | 1219 | m_handle_focused_pm, |
1222 | m_handle.width(), m_handle.height()); | 1220 | m_handle.width(), m_handle.height()); |
1223 | 1221 | ||
1224 | render(theme()->handleUnfocusTexture(), m_handle_unfocused_color, | 1222 | render(theme().unfocusedTheme()->handleTexture(), m_handle_unfocused_color, |
1225 | m_handle_unfocused_pm, | 1223 | m_handle_unfocused_pm, |
1226 | m_handle.width(), m_handle.height()); | 1224 | m_handle.width(), m_handle.height()); |
1227 | 1225 | ||
1228 | render(theme()->gripFocusTexture(), m_grip_focused_color, m_grip_focused_pm, | 1226 | render(theme().focusedTheme()->gripTexture(), m_grip_focused_color, |
1227 | m_grip_focused_pm, | ||
1229 | m_grip_left.width(), m_grip_left.height()); | 1228 | m_grip_left.width(), m_grip_left.height()); |
1230 | 1229 | ||
1231 | render(theme()->gripUnfocusTexture(), m_grip_unfocused_color, | 1230 | render(theme().unfocusedTheme()->gripTexture(), m_grip_unfocused_color, |
1232 | m_grip_unfocused_pm, | 1231 | m_grip_unfocused_pm, |
1233 | m_grip_left.width(), m_grip_left.height()); | 1232 | m_grip_left.width(), m_grip_left.height()); |
1234 | 1233 | ||
@@ -1283,11 +1282,11 @@ void FbWinFrame::renderButtons() { | |||
1283 | return; | 1282 | return; |
1284 | } | 1283 | } |
1285 | 1284 | ||
1286 | render(theme()->buttonFocusTexture(), m_button_color, | 1285 | render(theme().focusedTheme()->buttonTexture(), m_button_color, |
1287 | m_button_pm, | 1286 | m_button_pm, |
1288 | m_button_size, m_button_size); | 1287 | m_button_size, m_button_size); |
1289 | 1288 | ||
1290 | render(theme()->buttonUnfocusTexture(), m_button_unfocused_color, | 1289 | render(theme().unfocusedTheme()->buttonTexture(), m_button_unfocused_color, |
1291 | m_button_unfocused_pm, | 1290 | m_button_unfocused_pm, |
1292 | m_button_size, m_button_size); | 1291 | m_button_size, m_button_size); |
1293 | 1292 | ||
@@ -1351,24 +1350,14 @@ void FbWinFrame::applyButton(FbTk::Button &btn) { | |||
1351 | else | 1350 | else |
1352 | btn.setPressedColor(m_button_pressed_color); | 1351 | btn.setPressedColor(m_button_pressed_color); |
1353 | 1352 | ||
1354 | if (focused()) { // focused | 1353 | Pixmap pm = m_focused ? m_button_pm : m_button_unfocused_pm; |
1355 | btn.setAlpha(getAlpha(true)); | 1354 | btn.setAlpha(getAlpha(m_focused)); |
1356 | 1355 | btn.setGC(theme()->buttonPicGC()); | |
1357 | btn.setGC(theme()->buttonPicFocusGC()); | 1356 | if (pm) |
1358 | if (m_button_pm) | 1357 | btn.setBackgroundPixmap(pm); |
1359 | btn.setBackgroundPixmap(m_button_pm); | 1358 | else |
1360 | else | 1359 | btn.setBackgroundColor(m_focused ? m_button_color |
1361 | btn.setBackgroundColor(m_button_color); | 1360 | : m_button_unfocused_color); |
1362 | } else { // unfocused | ||
1363 | btn.setAlpha(getAlpha(false)); | ||
1364 | |||
1365 | btn.setGC(theme()->buttonPicUnfocusGC()); | ||
1366 | if (m_button_unfocused_pm) | ||
1367 | btn.setBackgroundPixmap(m_button_unfocused_pm); | ||
1368 | else | ||
1369 | btn.setBackgroundColor(m_button_unfocused_color); | ||
1370 | } | ||
1371 | |||
1372 | } | 1361 | } |
1373 | 1362 | ||
1374 | void FbWinFrame::render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm, | 1363 | void FbWinFrame::render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm, |
@@ -1460,21 +1449,21 @@ void FbWinFrame::setBorderWidth(unsigned int border_width) { | |||
1460 | bw_changes += static_cast<signed>(border_width - handle().borderWidth()); | 1449 | bw_changes += static_cast<signed>(border_width - handle().borderWidth()); |
1461 | 1450 | ||
1462 | window().setBorderWidth(border_width); | 1451 | window().setBorderWidth(border_width); |
1463 | window().setBorderColor(theme()->border(m_focused).color()); | 1452 | window().setBorderColor(theme()->border().color()); |
1464 | 1453 | ||
1465 | setTabMode(NOTSET); | 1454 | setTabMode(NOTSET); |
1466 | 1455 | ||
1467 | titlebar().setBorderWidth(border_width); | 1456 | titlebar().setBorderWidth(border_width); |
1468 | titlebar().setBorderColor(theme()->border(m_focused).color()); | 1457 | titlebar().setBorderColor(theme()->border().color()); |
1469 | 1458 | ||
1470 | handle().setBorderWidth(border_width); | 1459 | handle().setBorderWidth(border_width); |
1471 | handle().setBorderColor(theme()->border(m_focused).color()); | 1460 | handle().setBorderColor(theme()->border().color()); |
1472 | 1461 | ||
1473 | gripLeft().setBorderWidth(border_width); | 1462 | gripLeft().setBorderWidth(border_width); |
1474 | gripLeft().setBorderColor(theme()->border(m_focused).color()); | 1463 | gripLeft().setBorderColor(theme()->border().color()); |
1475 | 1464 | ||
1476 | gripRight().setBorderWidth(border_width); | 1465 | gripRight().setBorderWidth(border_width); |
1477 | gripRight().setBorderColor(theme()->border(m_focused).color()); | 1466 | gripRight().setBorderColor(theme()->border().color()); |
1478 | 1467 | ||
1479 | if (bw_changes != 0) | 1468 | if (bw_changes != 0) |
1480 | resize(width(), height() + bw_changes); | 1469 | resize(width(), height() + bw_changes); |