status_t PeThemesAddon::ApplyDefaultTheme(uint32 flags) { BMessage theme; BMessage uisettings; rgb_color bg = {255, 255, 255, 255}; rgb_color fg = {0, 0, 0, 255}; rgb_color selbg = {180, 200, 240, 255}; AddRGBColor(uisettings, B_UI_DOCUMENT_BACKGROUND_COLOR, bg); AddRGBColor(uisettings, B_UI_DOCUMENT_TEXT_COLOR, fg); AddRGBColor(uisettings, B_UI_DOCUMENT_SELECTION_BACKGROUND_COLOR, selbg); theme.AddMessage(Z_THEME_UI_SETTINGS, &uisettings); return ApplyTheme(theme, flags); }
myinline ArpMessage& ArpMessage::SetRGBColor(const char *name, const rgb_color* dat) { if( !this ) return *((ArpMessage*)NULL); if( status == B_NO_ERROR ) { status = AddRGBColor(name, dat); } return *this; }
status_t SoundplayThemesAddon::ApplyDefaultTheme(uint32 flags) { BMessage theme; BMessage uisettings; rgb_color bg = {216, 216, 216, 255}; AddRGBColor(uisettings, B_UI_PANEL_BACKGROUND_COLOR, bg); theme.AddMessage(Z_THEME_UI_SETTINGS, &uisettings); return ApplyTheme(theme, flags); }
status_t BackgroundThemesAddon::ApplyDefaultTheme(uint32 flags) { BMessage theme; BMessage backgrounds; rgb_color col = {51,102,152,255}; // Be Blues... ;) backgrounds.AddBool(B_BACKGROUND_ERASE_TEXT, true); AddRGBColor(backgrounds, B__DESKTOP_COLOR, col); theme.AddMessage(A_MSGNAME, &backgrounds); return ApplyTheme(theme, flags); }
status_t SoundplayThemesAddon::ApplyTheme(BMessage &theme, uint32 flags) { BMessage uisettings; status_t err; rgb_color panelcol; int32 wincnt = 1; err = theme.FindMessage(Z_THEME_UI_SETTINGS, &uisettings); if (err) return err; if (FindRGBColor(uisettings, B_UI_PANEL_BACKGROUND_COLOR, 0, &panelcol) < B_OK) panelcol = make_color(216,216,216,255); if (flags & UI_THEME_SETTINGS_SAVE && AddonFlags() & Z_THEME_ADDON_DO_SAVE) { // WRITEME } if (flags & UI_THEME_SETTINGS_APPLY && AddonFlags() & Z_THEME_ADDON_DO_APPLY) { BMessenger msgr(kSoundPlaySig); BMessage command(B_COUNT_PROPERTIES); BMessage answer; command.AddSpecifier("Window"); err = msgr.SendMessage(&command, &answer,2000000LL,2000000LL); if(B_OK == err) { if (answer.FindInt32("result", &wincnt) != B_OK) wincnt = 1; } BMessage msg(B_PASTE); AddRGBColor(msg, "RGBColor", panelcol); msg.AddPoint("_drop_point_", BPoint(0,0)); // send to every window (the Playlist window needs it too) for (int32 i = 0; i < wincnt; i++) { BMessage wmsg(msg); wmsg.AddSpecifier("Window", i); msgr.SendMessage(&wmsg, (BHandler *)NULL, 2000000LL); } } return B_OK; }
status_t TerminalThemesAddon::MakeThemeR5(BMessage &theme, uint32 flags) { BMessage termpref; status_t err; struct termprefs tp; BPath pTermPref; (void)flags; err = MyMessage(theme, termpref); if (err) termpref.MakeEmpty(); if (find_directory(B_USER_SETTINGS_DIRECTORY, &pTermPref) < B_OK) return EINVAL; pTermPref.Append("Terminal"); BFile fTermPref(pTermPref.Path(), B_READ_ONLY); if (fTermPref.InitCheck() != B_OK) return fTermPref.InitCheck(); if (fTermPref.Read(&tp, sizeof(struct termprefs)) < (ssize_t)sizeof(struct termprefs)) return EIO; if ((tp.magic != TP_MAGIC) || (tp.version != TP_VERSION)) return EINVAL; termpref.AddInt32(TP_COLS, tp.p.cols); termpref.AddInt32(TP_ROWS, tp.p.rows); termpref.AddInt32(TP_TABWIDTH, tp.p.tab_width); BFont tFont; font_family ff; font_style fs; BString str(tp.p.font); str.Truncate(str.FindFirst('/')); strncpy(ff, str.String(), sizeof(ff)); str.SetTo(tp.p.font); str.Remove(0, str.FindFirst('/')+1); strncpy(fs, str.String(), sizeof(fs)); tFont.SetFamilyAndStyle(ff, fs); tFont.SetSize(tp.p.font_size); AddFont(termpref, TP_FONT, &tFont); AddRGBColor(termpref, TP_BG, tp.p.bg); AddRGBColor(termpref, TP_FG, tp.p.fg); AddRGBColor(termpref, TP_CURBG, tp.p.curbg); AddRGBColor(termpref, TP_CURFG, tp.p.curfg); AddRGBColor(termpref, TP_SELBG, tp.p.selbg); AddRGBColor(termpref, TP_SELFG, tp.p.selfg); termpref.AddInt32(TP_ENCODING, tp.p.encoding); err = SetMyMessage(theme, termpref); return B_OK; }
status_t TerminalThemesAddon::ApplyDefaultTheme(uint32 flags) { BMessage theme; BMessage termpref; // XXX: add font and stuff... AddRGBColor(termpref, "term:c:bg",make_color(255,255,255,0)); AddRGBColor(termpref, "term:c:fg",make_color(0,0,0,0)); AddRGBColor(termpref, "term:c:curbg",make_color(0,0,0,0)); AddRGBColor(termpref, "term:c:curfg",make_color(255,255,255,0)); AddRGBColor(termpref, "term:c:selbg",make_color(0,0,0,0)); AddRGBColor(termpref, "term:c:selfg",make_color(255,255,255,0)); theme.AddMessage(Z_THEME_TERMINAL_SETTINGS, &termpref); return ApplyTheme(theme, flags); }
status_t TerminalThemesAddon::ApplyDefaultTheme(uint32 flags) { BMessage theme; BMessage termpref; int32 i; // XXX: add font and stuff... for (i = 0; i < NENTS(sHaikuPrefsMapInt32); i++) { termpref.AddInt32(sHaikuPrefsMapInt32[i].name, sHaikuPrefsMapInt32[i].def); } for (i = 0; i < NENTS(sHaikuPrefsMapColors); i++) { AddRGBColor(termpref, sHaikuPrefsMapColors[i].name, sHaikuPrefsMapColors[i].def); } theme.AddMessage(Z_THEME_TERMINAL_SETTINGS, &termpref); return ApplyTheme(theme, flags); }
status_t TerminalThemesAddon::MakeThemeHaiku(BMessage &theme, uint32 flags) { BMessage termpref; BMessage lines; status_t err; BString value; int n, i; (void)flags; err = MyMessage(theme, termpref); if (err) termpref.MakeEmpty(); err = LoadHaikuTerminalSettings(lines); for (i = 0; i < NENTS(sHaikuPrefsMapInt32); i++) { int v; if (lines.FindString(sHaikuPrefsMapInt32[i].pref, &value) < B_OK) continue; n = sscanf(value.String(), "%d", &v); //printf("n=%d '%s'\n", n, value.String()); if (n == 1) termpref.AddInt32(sHaikuPrefsMapInt32[i].name, v); } for (i = 0; i < NENTS(sHaikuPrefsMapColors); i++) { int r, g, b; if (lines.FindString(sHaikuPrefsMapColors[i].pref, &value) < B_OK) continue; n = sscanf(value.String(), "%d%*[, ]%d%*[, ]%d", &r, &g, &b); //printf("n=%d '%s' %d,%d,%d\n", n, value.String(), r, g, b); if (n == 3) { rgb_color c = make_color(r, g, b, 255); AddRGBColor(termpref, sHaikuPrefsMapColors[i].name, c); } } BFont font; BString s; font_family family; font_style style; float size = 12.0; memset(&family, 0, sizeof(family)); memset(&style, 0, sizeof(style)); if (lines.FindString(PREF_HALF_FONT_FAMILY, &s) == B_OK) strncpy(family, s.String(), B_FONT_FAMILY_LENGTH); if (lines.FindString(PREF_HALF_FONT_STYLE, &s) == B_OK) strncpy(style, s.String(), B_FONT_STYLE_LENGTH); font.SetFamilyAndStyle(family, style); if (lines.FindString(PREF_HALF_FONT_SIZE, &s) == B_OK) sscanf(s.String(), "%f", &size); font.SetSize(size); //termpref.PrintToStream(); err = SetMyMessage(theme, termpref); return B_OK; }
status_t BackgroundThemesAddon::MakeTheme(BMessage &theme, uint32 flags) { BMessage backgrounds; status_t err = B_OK; BPath pDesktop; struct attr_info ai; char *pAttr; BScreen bs; rgb_color last_color = {0, 0, 0, 254}; rgb_color col; int last_change = 0; int i; (void)flags; err = MyMessage(theme, backgrounds); if (err) backgrounds.MakeEmpty(); if (find_directory(B_DESKTOP_DIRECTORY, &pDesktop) < B_OK) return EINVAL; BNode nDesktop(pDesktop.Path()); if (nDesktop.InitCheck() < B_OK) return nDesktop.InitCheck(); if (nDesktop.GetAttrInfo(B_BACKGROUND_INFO, &ai) < B_OK) return EIO; pAttr = new char[ai.size]; if (pAttr == NULL) return ENOMEM; err = nDesktop.ReadAttr(B_BACKGROUND_INFO, ai.type, 0LL, pAttr, ai.size); if (err < B_OK) goto getout; err = backgrounds.Unflatten(pAttr); if (err < B_OK) goto getout; // make sure other colors are removed backgrounds.RemoveName(B__DESKTOP_COLOR); // get desktop color... XXX: move it in ui_settings ? // should work as the rest of the fields (grouping) for (i = 0; i < count_workspaces(); i++) { col = bs.DesktopColor(i); if (memcmp(&last_color, &col, sizeof(rgb_color))) { last_change = i; last_color = col; } } //printf("ws col cnt %d\n", last_change); for (i = 0; i <= last_change; i++) { col = bs.DesktopColor(i); AddRGBColor(backgrounds, B__DESKTOP_COLOR, col); //backgrounds->AddData(B__DESKTOP_COLOR, (type_code)'RGBC', &col, 4); } err = SetMyMessage(theme, backgrounds); return err; getout: delete [] pAttr; return err; }