123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089 |
- /**
- *
- * Copyright (c) 2002, Marc Bruenink
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of his contributors may be
- * used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef _TITLEFADER_CONFIG_H_
- #define _TITLEFADER_CONFIG_H_
- //#include <xmms/xmmsctrl.h>
- #include <xmms/configfile.h>
- #include <gtk/gtk.h>
- #include <string>
- #include <stdio.h> // sprintf
- #include "myhelpfunctions.h"
- #include "Xlib_textfader.h"
- //#include "positionsel.h"
- // error defines
- #define CONFIGCANNOTOPEN -1001
- // config defines
- // defines the upper value from the frame scale
- #define MAXFRAMESTOFADE 250
- #define XMMSCONFIGNAME "Title Fader Plugin"
- //pos_sel win = root window / POSSELCONFIGWIN2ROOTWIN
- #define POSSELCONFIGWIN2ROOTWIN 5
- class Config {
- private:
- GtkWidget *win;
- GtkWidget *hWinScale, *vWinScale;
- GtkWidget *color, *font;
- //positon selection drawable
- GtkWidget* pos_sel;
- GtkWidget *frameScale;
-
- // load help vars
- gchar *vAlignComboSelection, *hAlignComboSelection;
-
- // handler id to block changed signal in position selection
- guint pos_sel_changed_handler_id;
- // back image position selection
- GdkPixmap *pos_sel_pixmap;
- //PositionSel pos_sel;
- // xmms config file
- ConfigFile *confFile;
- // gtk widget alginment combos
- GtkWidget *vAlignCombo, *hAlignCombo;
-
- // i allways make a centered blending
- // to implement different fading position i've to correct
- // the x and y values.....
- int xCorrect, yCorrect;
- gchar *cArrangePoint;
-
- public:
- int vWinScalePos, hWinScalePos;
- int frameScalePos;
- unsigned long fadeOptions;
- // last selected color
- gdouble col_selected[4];
- // selected font
- gchar * font_selected;
- // width and height of position selection
- int pos_sel_width, pos_sel_height;
- int screen_width, screen_height;
- public:
- Config();
- ~Config();
-
- // show the configuration window
- int show();
- void hide();
- // button callbacks
- // buttons
- public:
- void main_ok_button_clicked();
- void main_test_button_clicked();
- void main_cancel_button_clicked();
- void main_center_button_clicked();
- void main_color_button_clicked() ;
- void main_font_button_clicked();
- void main_scale_value_changed(GtkWidget*);
- void color_cancel_button_clicked();
- void color_ok_button_clicked();
- void font_ok_button_clicked();
- void font_cancel_button_clicked();
- //position selector callbacks
- public:
- void pos_sel_motion_notified(GtkWidget*,GdkEventButton*);
- void pos_sel_exposed(GtkWidget*,GdkEventExpose*);
- void pos_sel_configure(GtkWidget*, GdkEventConfigure*);
- void pos_sel_mouse_released(GtkWidget*, GdkEventButton*);
- void main_pos_sel_combo_changed(GtkWidget*);
- private:
- void pos_sel_update(GtkWidget *widget, const int& x, const int&y);
- int read_values();
- int save_values();
-
- };
- /*
- some pseudo oop funtions
- button callbacks
- */
- static void st_main_ok_button_clicked(GtkWidget*, Config*);
- static void st_main_test_button_clicked(GtkWidget*, Config*);
- static void st_main_cancel_button_clicked(GtkWidget*, Config*);
- static void st_main_center_button_clicked(GtkWidget*, Config*);
- static void st_main_font_button_clicked(GtkWidget *widget, Config *object);
- static void st_main_color_button_clicked(GtkWidget *widget, Config *object);
- static void st_main_win_closed(GtkWidget*, Config*);
- static void st_color_cancel_button_clicked(GtkWidget *widget, Config *config);
- static void st_color_ok_button_clicked(GtkWidget *widget, Config *config);
- static void st_font_ok_button_clicked(GtkWidget *widget, Config *config);
- static void st_font_cancel_button_clicked(GtkWidget *widget, Config *config);
- static void st_main_scale_value_changed(GtkWidget*, Config*);
- /*
- yooo hoooo no O O (P)
- */
- static void st_pos_sel_motion_notified(GtkWidget*, GdkEventButton*,Config*);
- static gint st_pos_sel_exposed(GtkWidget*,GdkEventExpose* ,Config*);
- static void st_pos_sel_configure(GtkWidget*,GdkEventConfigure* ,Config*);
- static void st_pos_sel_mouse_released(GtkWidget*, GdkEventButton*, Config*);
- static void st_main_pos_sel_combo_changed(GtkWidget*, /*GdkEventAny*,*/ Config*);
- /*
- constructors
- */
- Config::Config() {
-
- win = NULL;
- screen_width = gdk_screen_width();
- pos_sel_width = screen_width / POSSELCONFIGWIN2ROOTWIN;
- screen_height = gdk_screen_height();
- pos_sel_height = screen_height / POSSELCONFIGWIN2ROOTWIN;
- /* load last values */
- xCorrect = 0;
- yCorrect = 0;
- col_selected[0]=1;
- col_selected[1]=1;
- col_selected[2]=1;
- col_selected[3]=1;
- font_selected = NULL;
- hWinScale = NULL;
- vWinScalePos = screen_height / 2;
- hWinScalePos = screen_width / 2;
- hAlignComboSelection = vAlignComboSelection = "center";
- frameScalePos = 60;
-
- fadeOptions = TF_COORDINATES_CENTER_CENTER;
-
- read_values();
- }
- /*
- destructor
- */
- Config::~Config() {
- g_free(font_selected);
- gtk_widget_destroy(GTK_WIDGET(win));
- }
- /*
- show main configuration window
- */
- int Config::show() {
- GtkWidget *hBox, *vBox, *vBox2, *hBox2;
- GtkWidget *button;
- // GtkWidget *frameScale;
- GtkObject *adj;
- GtkWidget *table, *frame;
- //GtkWidget *vWinScale, *hWinScale;
- GtkWidget *label;
- GList *glist=NULL;
- read_values();
- if (win != NULL) return 1;
- // create window
- win = gtk_window_new(GTK_WINDOW_DIALOG);
- gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &win);
- gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(st_main_win_closed), this);
- // gtk_signal_connect(GTK_OBJECT
- gtk_window_set_title(GTK_WINDOW(win), "Title Fader Plugin - Configuration");
- gtk_container_set_border_width (GTK_CONTAINER (win), 15);
-
- vBox = gtk_vbox_new(FALSE, 10);
- gtk_container_add(GTK_CONTAINER(win), vBox);
- // Color + Font + position row
- hBox = gtk_hbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0);
- // position selection
- frame = gtk_frame_new("Position Selection");
- gtk_box_pack_start(GTK_BOX(hBox), frame, FALSE, FALSE, 0);
- table = gtk_table_new(6, 3, FALSE);
- gtk_container_add(GTK_CONTAINER(frame), table);
-
- label = gtk_label_new("Just play around. You'll get it!!\nThe management of different sizes of the fade-window is influenced by your alignment choice.\n");
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
- gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
- gtk_table_attach((GtkTable*)table, label, 0, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 10, 10);
- gtk_widget_show(label);
- //position selection visualization
- pos_sel = gtk_drawing_area_new();
- gtk_drawing_area_size(GTK_DRAWING_AREA(pos_sel), pos_sel_width, pos_sel_height);
- gtk_widget_set_events (pos_sel, GDK_EXPOSURE_MASK
- | GDK_BUTTON_PRESS_MASK
- | GDK_BUTTON_MOTION_MASK
- | GDK_POINTER_MOTION_HINT_MASK);
- gtk_signal_connect (GTK_OBJECT (pos_sel), "expose_event", (GtkSignalFunc)st_pos_sel_exposed, this);
- gtk_signal_connect (GTK_OBJECT(pos_sel),"configure_event", (GtkSignalFunc) st_pos_sel_configure, this);
- gtk_signal_connect (GTK_OBJECT (pos_sel), "motion_notify_event", (GtkSignalFunc)st_pos_sel_motion_notified, this);
- gtk_signal_connect (GTK_OBJECT (pos_sel), "button_press_event", (GtkSignalFunc)st_pos_sel_mouse_released, this);
- // gtk_signal_connect (GTK_OBJECT (pos_sel.pixmap), "button_press_event", (GtkSignalFunc)st_pos_sel_button_pressed, NULL);
- gtk_table_attach((GtkTable*)table, pos_sel, 0, 1, 1, 2, GTK_EXPAND, GTK_EXPAND, 10, 10);
- // hWinScale
- adj = gtk_adjustment_new(hWinScalePos,0, screen_width,1,10,0);
- gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(st_main_scale_value_changed), this);
- hWinScale = gtk_hscale_new((GtkAdjustment*)adj);
- gtk_scale_set_draw_value((GtkScale*)hWinScale, TRUE );
- gtk_scale_set_digits((GtkScale*)hWinScale, 0);
- gtk_scale_set_value_pos((GtkScale*)hWinScale, GTK_POS_TOP);
- gtk_table_attach_defaults((GtkTable*)table, hWinScale, 0, 1, 2, 3);
- gtk_widget_show(hWinScale);
- // vWinScale
- adj = gtk_adjustment_new(vWinScalePos,0,screen_height,1,10,0);
- gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(st_main_scale_value_changed), this);
- vWinScale = gtk_vscale_new((GtkAdjustment*)adj);
- gtk_scale_set_draw_value((GtkScale*)hWinScale, TRUE );
- gtk_scale_set_digits((GtkScale*)vWinScale, 0);
- gtk_scale_set_value_pos((GtkScale*)vWinScale, GTK_POS_LEFT);
- gtk_table_attach((GtkTable*)table, vWinScale, 1, 2, 1, 2, GTK_EXPAND, GTK_FILL, 10, 0);
- gtk_widget_show(vWinScale);
- hBox2 = gtk_hbox_new(FALSE, 10);
- gtk_table_attach((GtkTable*)table, hBox2, 0, 3, 3, 4, GTK_EXPAND, GTK_EXPAND, 10, 10);
-
- label = gtk_label_new("choose v-alignment: ");
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
- gtk_box_pack_start(GTK_BOX(hBox2), label, FALSE, FALSE, 0);
- gtk_widget_show(label);
- vAlignCombo = gtk_combo_new();
-
- gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(vAlignCombo)->entry), FALSE);
- //glist = g_list_alloc();
- glist = g_list_append(glist, (void*)"above");
- glist = g_list_append(glist,(void*) "center");
- glist = g_list_append(glist, (void*)"under");
- gtk_combo_set_popdown_strings(GTK_COMBO(vAlignCombo), glist) ;
- g_list_free(glist);
- glist = NULL;
-
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(vAlignCombo)->entry), vAlignComboSelection);
- main_pos_sel_combo_changed(GTK_COMBO(vAlignCombo)->entry);
- gtk_box_pack_start(GTK_BOX(hBox2), vAlignCombo, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(GTK_COMBO(vAlignCombo)->entry), "changed", GTK_SIGNAL_FUNC(st_main_pos_sel_combo_changed), this);
-
- gtk_widget_show(vAlignCombo);
- gtk_widget_show(hBox2);
- hBox2 = gtk_hbox_new(FALSE, 10);
- gtk_table_attach((GtkTable*)table, hBox2, 0, 3, 4, 5, GTK_EXPAND, GTK_EXPAND, 10, 10);
-
- label = gtk_label_new("choose h-alignment: ");
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
- gtk_box_pack_start(GTK_BOX(hBox2), label, FALSE, FALSE, 0);
- gtk_widget_show(label);
- hAlignCombo = gtk_combo_new();
- gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(hAlignCombo)->entry), FALSE);
- //glist = g_list_alloc();
- glist = g_list_append(glist, (void*)"left");
- glist = g_list_append(glist,(void*) "center");
- glist = g_list_append(glist, (void*)"right");
- gtk_combo_set_popdown_strings(GTK_COMBO(hAlignCombo), glist) ;
- g_list_free(glist);
- glist = NULL;
- gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(hAlignCombo)->entry), hAlignComboSelection);
- main_pos_sel_combo_changed(GTK_COMBO(hAlignCombo)->entry);
- gtk_box_pack_start(GTK_BOX(hBox2), hAlignCombo, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(GTK_COMBO(hAlignCombo)->entry), "changed", GTK_SIGNAL_FUNC(st_main_pos_sel_combo_changed), this);
- gtk_widget_show(hAlignCombo);
- gtk_widget_show(hBox2);
- button = gtk_button_new_with_label(" center ");
- gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(st_main_center_button_clicked), this);
- gtk_table_attach((GtkTable*)table, button, 0, 1, 5, 6, GTK_FILL , GTK_FILL, 10, 10);
- gtk_widget_show(button);
-
- gtk_widget_show(frame);
- gtk_widget_show(table);
- // color + font
- //color
- vBox2 = gtk_vbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(hBox), vBox2, FALSE, FALSE, 0);
- color = gtk_color_selection_dialog_new("Title Fader Plugin - Color");
- // set saved color!!
- GtkColorSelection *colorsel;
- colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color)->colorsel);
-
- //gtk_color_selection_get_color(colorsel, col_selected);
- gtk_color_selection_set_color(colorsel, col_selected);
- gtk_color_selection_set_opacity(colorsel, FALSE );
- // color dialog ok button
- gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color)->ok_button), "clicked", GTK_SIGNAL_FUNC(st_color_ok_button_clicked), this);
- // color dialog cancel button
- gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(color)->cancel_button), "clicked", GTK_SIGNAL_FUNC(st_color_cancel_button_clicked), this);
- // color dialog help button
- // if you need help in a color selection dialog you're an idiot
- // so you're a normal user ;-)
- // but in fact if've not a good mind to create a help window.
- // it seems to be useless.
- // Soooooooo... Lets kill the help button
- gtk_widget_destroy(GTK_COLOR_SELECTION_DIALOG(color)->help_button);
- button = gtk_button_new_with_label(" choose color ");
- gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_show), GTK_OBJECT(color));
- gtk_box_pack_start(GTK_BOX(vBox2), button, FALSE, FALSE, 0);
- gtk_widget_show(button);
- //font selection
- font = gtk_font_selection_dialog_new("Title Fader Plugin - Font");
- gtk_font_selection_set_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font)->fontsel), font_selected);
- // font selection ok button
- gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font)->ok_button), "clicked", GTK_SIGNAL_FUNC(st_font_ok_button_clicked), this);
- // font selection cancel button
- gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font)->cancel_button), "clicked", GTK_SIGNAL_FUNC(st_font_cancel_button_clicked), this);
-
- button = gtk_button_new_with_label(" choose font ");
- gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(st_main_font_button_clicked), this);
- gtk_box_pack_start(GTK_BOX(vBox2), button, FALSE, FALSE, 0);
- gtk_widget_show(button);
- gtk_widget_show(vBox2);
- gtk_widget_show(hBox);
-
- // frames row
- hBox = gtk_hbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(vBox), hBox, TRUE, TRUE, 0);
- label = gtk_label_new("\nChoose the number of frames:");
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
- gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
- gtk_box_pack_start(GTK_BOX(hBox), label, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hBox), NULL, TRUE, TRUE, 0);
- gtk_widget_show(label);
- gtk_widget_show(hBox);
- adj = gtk_adjustment_new( frameScalePos, 0, 250, 1, 10, 0 );
- frameScale = gtk_hscale_new((GtkAdjustment *)adj);
- gtk_scale_set_draw_value((GtkScale*)frameScale, TRUE );
- gtk_scale_set_digits((GtkScale*)frameScale, 0);
- gtk_box_pack_start(GTK_BOX(vBox), frameScale, FALSE, FALSE, 0);
- gtk_widget_show(frameScale);
-
- // button row
- hBox = gtk_hbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(vBox), hBox, FALSE, FALSE, 0);
- button = gtk_button_new_with_label(" Test ");
- gtk_box_pack_start(GTK_BOX(hBox), button, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(st_main_test_button_clicked), this);
- gtk_widget_show(button);
- button = gtk_button_new_with_label(" OK ");
- gtk_box_pack_start(GTK_BOX(hBox), button, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(st_main_ok_button_clicked), this);
- gtk_widget_show(button);
- button = gtk_button_new_with_label(" Cancel ");
- gtk_box_pack_start(GTK_BOX(hBox), button, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(st_main_cancel_button_clicked), this);
- gtk_widget_show(button);
- gtk_widget_show(hBox);
- gtk_widget_show(vBox);
- // free of charge
- gtk_widget_show_all (win);
-
- pos_sel_update(pos_sel, hWinScalePos/ POSSELCONFIGWIN2ROOTWIN, vWinScalePos / POSSELCONFIGWIN2ROOTWIN);
- }
- void Config::hide() {
-
- // gtk_widget_destroy(win);
- //win = NULL;
- gtk_widget_destroy(hWinScale);
- hWinScale = NULL;
- gtk_widget_destroy(vWinScale);
- vWinScale = NULL;
- gtk_widget_destroy(color);
- color = NULL;
- gtk_widget_destroy(font);
- font = NULL;
- gtk_widget_destroy(pos_sel);
- pos_sel = NULL;
- }
- /*
- main configuration window button callbacks
- */
- static void st_main_win_closed(GtkWidget*, Config *conf) {
- conf ->hide();
- }
- static void st_main_ok_button_clicked(GtkWidget *widget, Config *object){
- object->main_ok_button_clicked();
- }
- static void st_main_test_button_clicked(GtkWidget *widget, Config *object){
- object->main_test_button_clicked();
- }
- static void st_main_cancel_button_clicked(GtkWidget *widget, Config *object){
- object->main_cancel_button_clicked();
- }
- static void st_main_center_button_clicked(GtkWidget *widget, Config *object){
- object->main_center_button_clicked();
- }
- static void st_main_color_button_clicked(GtkWidget *widget, Config *object){
- object->main_color_button_clicked();
- }
- static void st_main_font_button_clicked(GtkWidget *widget, Config *object){
- object->main_font_button_clicked();
- }
- static void st_main_scale_value_changed(GtkWidget *widget, Config *config){
- config->main_scale_value_changed(widget);
- }
- void Config::main_ok_button_clicked() {
- //save!!
- // reset plugin!!
-
- hWinScalePos = (int)gtk_range_get_adjustment(GTK_RANGE(hWinScale))->value;
- vWinScalePos = (int)gtk_range_get_adjustment(GTK_RANGE(vWinScale))->value;
- frameScalePos = (int)gtk_range_get_adjustment(GTK_RANGE(frameScale))->value;
- save_values();
- // implicit call of hide()
- gtk_widget_destroy(win);
- win = NULL;
- }
- void Config::main_test_button_clicked() {
- if (font_selected == NULL) {
- return;
- }
- Xlib_textfader fader;
- fader.set_font(font_selected);
- fader.set_text_color(col_selected[0], col_selected[1], col_selected[2]);
- fader.set_fade_position(gtk_range_get_adjustment(GTK_RANGE(hWinScale))->value, gtk_range_get_adjustment(GTK_RANGE(vWinScale))->value);
- fader.fade("Test button clicked!!", 21, gtk_range_get_adjustment(GTK_RANGE(frameScale))->value, fadeOptions);
- }
- void Config::main_cancel_button_clicked() {
- read_values();
- gtk_widget_destroy(win);
- win= NULL;
- }
- void Config::main_center_button_clicked() {
- GtkAdjustment *adj;
- // block changed signal
- //gtk_signal_handler_block_by_func(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(vWinScale))), GTK_SIGNAL_FUNC(st_main_scale_value_changed),NULL);
- adj = gtk_range_get_adjustment((GtkRange*)vWinScale);
- gtk_adjustment_set_value(adj, (adj->upper - adj->lower) / 2);
- //gtk_signal_emit_stop_by_name(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(vWinScale))), "value_changed");
- //gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(vWinScale))), GTK_SIGNAL_FUNC(st_main_scale_value_changed),NULL);
- //gtk_signal_handler_block_by_func(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hWinScale))), GTK_SIGNAL_FUNC(st_main_scale_value_changed),NULL);
- adj = gtk_range_get_adjustment((GtkRange*)hWinScale);
- gtk_adjustment_set_value(adj, (adj->upper - adj->lower) / 2);
- //gtk_signal_emit_stop_by_name(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hWinScale))), "value_changed");
- //gtk_signal_handler_unblock_by_func(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hWinScale))), GTK_SIGNAL_FUNC(st_main_scale_value_changed),NULL);
- }
- void Config::main_font_button_clicked() {
- gtk_widget_show(font);
- }
- void Config::main_color_button_clicked() {
- // gtk_widget_show(color);
- }
- // scale values changed
- void Config::main_scale_value_changed(GtkWidget *widget) {
- pos_sel_update(pos_sel, gtk_range_get_adjustment(GTK_RANGE(hWinScale))->value / POSSELCONFIGWIN2ROOTWIN, gtk_range_get_adjustment(GTK_RANGE(vWinScale))->value / POSSELCONFIGWIN2ROOTWIN);
- }
- /*
- colorselectiondialog buttons
- */
- static void st_color_cancel_button_clicked(GtkWidget *widget, Config *object){
- object->color_cancel_button_clicked();
- }
- static void st_color_ok_button_clicked(GtkWidget *widget, Config *object){
- object->color_ok_button_clicked();
- }
- void Config::color_cancel_button_clicked(){
- GtkColorSelection *colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color)->colorsel);
- gtk_color_selection_set_color(colorsel, col_selected);
- gtk_widget_hide(color);
- }
- void Config::color_ok_button_clicked(){
- GtkColorSelection *colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(color)->colorsel);
- gtk_color_selection_get_color(colorsel, col_selected);
- gtk_widget_hide(color);
- }
- /*
- font selection dialog button callbacks
- */
- static void st_font_ok_button_clicked(GtkWidget * widget, Config *config) {
- config->font_ok_button_clicked();
- }
- static void st_font_cancel_button_clicked(GtkWidget * widget, Config *config) {
- config->font_cancel_button_clicked();
- }
- void Config::font_ok_button_clicked() {
- g_free(font_selected);
- GtkFontSelection *fontsel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font)->fontsel);
- font_selected = gtk_font_selection_get_font_name(fontsel);
- gtk_widget_hide(font);
- }
- void Config::font_cancel_button_clicked() {
- GtkFontSelection *fontsel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font)->fontsel);
- gtk_font_selection_set_font_name(fontsel, font_selected);
- gtk_widget_hide(font);
- }
- /*
- position selector callbacks
- */
- static void st_pos_sel_motion_notified(GtkWidget* widget, GdkEventButton *event, Config* config){
- config->pos_sel_motion_notified(widget, event);
- }
- static gint st_pos_sel_exposed(GtkWidget* widget,GdkEventExpose *event, Config* config){
- config->pos_sel_exposed(widget,event);
- return TRUE;
- }
- static void st_pos_sel_configure(GtkWidget* widget, GdkEventConfigure *event, Config* config){
- config->pos_sel_configure(widget, event);
- }
- static void st_pos_sel_mouse_released(GtkWidget* widget, GdkEventButton *event, Config* config){
-
- config->pos_sel_mouse_released(widget, event);
- }
- static void st_main_pos_sel_combo_changed(GtkWidget* widget, /*GdkEventAny* event,*/ Config* config) {
- config->main_pos_sel_combo_changed(widget/*, event*/);
- }
- void Config::pos_sel_motion_notified(GtkWidget *widget, GdkEventButton *event){
-
- gint x, y;
- gtk_widget_get_pointer (widget, &x, &y);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)vWinScale), y * POSSELCONFIGWIN2ROOTWIN);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)hWinScale), x * POSSELCONFIGWIN2ROOTWIN);
- // pos_sel_update(widget, x, y);
- }
- void Config::pos_sel_mouse_released(GtkWidget *widget, GdkEventButton *event){
-
- gint x, y;
- gtk_widget_get_pointer (widget, &x, &y);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)vWinScale), y * POSSELCONFIGWIN2ROOTWIN);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)hWinScale), x * POSSELCONFIGWIN2ROOTWIN);
- // pos_sel_update(widget, x, y);
- // value changed soo implicit call of pos_sel_update
- }
- void Config::pos_sel_exposed(GtkWidget *widget, GdkEventExpose *event){
- // gdk_draw_pixmap(widget->window, widget->style->black_gc, pos_sel_pixmap ,0,0,0, 0, 100, 100);
- gdk_draw_pixmap(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
- pos_sel_pixmap,
- event->area.x, event->area.y,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
- }
- void Config::pos_sel_configure(GtkWidget *widget, GdkEventConfigure *event) {
- if (pos_sel_pixmap)
- gdk_pixmap_unref(pos_sel_pixmap);
- pos_sel_pixmap = gdk_pixmap_new(widget->window,
- widget->allocation.width,
- widget->allocation.height,
- -1);
- pos_sel_update(widget, 0, 0);
- }
- void Config::main_pos_sel_combo_changed(GtkWidget* widget/*, GdkEventAny *event*/) {
- std::string str;
- // xy position corrections
- str =(std::string)gtk_entry_get_text(GTK_ENTRY(widget));
- // hey which fucking widget was changed ??
- if (widget == GTK_COMBO(vAlignCombo)->entry) {
- if (str == "under") {
- yCorrect = 5;
- if ((fadeOptions & TF_COORDINATES_CENTER_LEFT) ||
- (fadeOptions & TF_COORDINATES_LOWER_LEFT)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_LEFT);
- }else
- if ((fadeOptions & TF_COORDINATES_CENTER_CENTER) ||
- (fadeOptions & TF_COORDINATES_LOWER_CENTER)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_CENTER);
- }else
- if((fadeOptions & TF_COORDINATES_CENTER_RIGHT) ||
- (fadeOptions & TF_COORDINATES_LOWER_RIGHT)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_RIGHT);
-
- }
- }
- if (str == "above") {
- yCorrect = -5;
- if ((fadeOptions & TF_COORDINATES_UPPER_LEFT) ||
- (fadeOptions & TF_COORDINATES_CENTER_LEFT)) {
- fadeOptions = TF_COORDINATES_SET (fadeOptions, TF_COORDINATES_LOWER_LEFT);
-
- }else
- if ((fadeOptions & TF_COORDINATES_UPPER_CENTER) ||
- (fadeOptions & TF_COORDINATES_CENTER_CENTER)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_LOWER_CENTER);
-
- }else
- if ((fadeOptions & TF_COORDINATES_UPPER_RIGHT) ||
- (fadeOptions & TF_COORDINATES_CENTER_RIGHT)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_LOWER_RIGHT);
-
- }
- }
- if (str == "center") {
- yCorrect = 0;
- if ((fadeOptions & TF_COORDINATES_UPPER_LEFT) ||
- (fadeOptions & TF_COORDINATES_LOWER_LEFT)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_LEFT);
-
- }else
- if ((fadeOptions & TF_COORDINATES_UPPER_CENTER) ||
- (fadeOptions & TF_COORDINATES_LOWER_CENTER)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_CENTER);
-
- }else
- if ((fadeOptions &TF_COORDINATES_UPPER_RIGHT) ||
- (fadeOptions & TF_COORDINATES_LOWER_RIGHT)) {
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_RIGHT);
-
- }
- }
- }
- else if (widget == GTK_COMBO(hAlignCombo)->entry){
- if (str == "right") {
- xCorrect = 50;
- switch(TF_COORDINATES_GET(fadeOptions)) {
- case TF_COORDINATES_UPPER_CENTER:
- case TF_COORDINATES_UPPER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_LEFT);
-
- break;
- case TF_COORDINATES_CENTER_CENTER:
- case TF_COORDINATES_CENTER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_LEFT);
-
- break;
- case TF_COORDINATES_LOWER_CENTER:
- case TF_COORDINATES_LOWER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_LOWER_LEFT);
-
- break;
- }
- }else
- if(str == "left") {
- xCorrect= -50;
- switch(TF_COORDINATES_GET(fadeOptions)) {
- case TF_COORDINATES_UPPER_LEFT:
- case TF_COORDINATES_UPPER_CENTER:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_RIGHT);
-
- break;
- case TF_COORDINATES_CENTER_LEFT:
- case TF_COORDINATES_CENTER_CENTER:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_RIGHT);
-
- break;
- case TF_COORDINATES_LOWER_LEFT:
- case TF_COORDINATES_LOWER_CENTER:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_LOWER_RIGHT);
-
- break;
- }
- }else
- if (str == "center") {
- xCorrect = 0;
- switch(TF_COORDINATES_GET(fadeOptions)) {
- case TF_COORDINATES_UPPER_LEFT:
- case TF_COORDINATES_UPPER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_UPPER_CENTER);
-
- break;
- case TF_COORDINATES_CENTER_LEFT:
- case TF_COORDINATES_CENTER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_CENTER_CENTER);
-
- break;
- case TF_COORDINATES_LOWER_LEFT:
- case TF_COORDINATES_LOWER_RIGHT:
- fadeOptions = TF_COORDINATES_SET(fadeOptions, TF_COORDINATES_LOWER_CENTER);
-
- break;
- }
- }
- }
- // complications: the life becomes meaningful ;)
-
- pos_sel_update(pos_sel, gtk_range_get_adjustment(GTK_RANGE(hWinScale))->value / POSSELCONFIGWIN2ROOTWIN, gtk_range_get_adjustment(GTK_RANGE(vWinScale))->value / POSSELCONFIGWIN2ROOTWIN);
- }
- /*
- private functions
- */
- int Config::read_values(){
-
- ConfigFile *conf;
- gchar *cBuffer;
- if(!(conf = xmms_cfg_open_default_file())) {
- return CONFIGCANNOTOPEN;
- }
-
-
- if(xmms_cfg_read_string(conf, "TitleFader", "color-red", &cBuffer)){
- col_selected[0] = atoi(cBuffer);
- g_free(cBuffer);
- }
-
- if(xmms_cfg_read_string(conf, "TitleFader", "color-green", &cBuffer)) {
- col_selected[1] = atoi(cBuffer);
- g_free(cBuffer);
- }
-
- if(xmms_cfg_read_string(conf, "TitleFader", "color-blue", &cBuffer)) {
- col_selected[2] = atoi(cBuffer);
- g_free(cBuffer);
- }
-
-
- if(xmms_cfg_read_string(conf, "TitleFader", "font", &cBuffer)) {
- font_selected = cBuffer;
- cBuffer = NULL;
- }
-
-
- if(xmms_cfg_read_string(conf, "TitleFader", "vAlignComboSelection", &cBuffer)){
- vAlignComboSelection = cBuffer;
- }
- if(xmms_cfg_read_string(conf, "TitleFader", "hAlignComboSelection", &cBuffer)) {
- hAlignComboSelection = cBuffer;
- }
-
- if (xmms_cfg_read_string(conf, "TitleFader", "vWinScalePos", &cBuffer)){
- vWinScalePos = atoi(cBuffer);
- g_free(cBuffer);
- }
- if (xmms_cfg_read_string(conf, "TitleFader", "hWinScalePos", &cBuffer)) {
- hWinScalePos = atoi (cBuffer);
- g_free(cBuffer);
- }
- if (xmms_cfg_read_string(conf, "TitleFader", "frameScalePos", &cBuffer)) {
- frameScalePos = atoi(cBuffer);
- g_free(cBuffer);
- }
-
- if (xmms_cfg_read_string(conf, "TitleFader", "fadeoptions", &cBuffer)) {
- fadeOptions = atol(cBuffer);
- g_free(cBuffer);
- }
- xmms_cfg_free(conf);
- }
- int Config::save_values(){
-
- ConfigFile *conf;
- char *cBuffer= new char[sizeof(float) * 8 + 1];
-
- if (!(conf = xmms_cfg_open_default_file())) {
- return CONFIGCANNOTOPEN;
- }
- sprintf(cBuffer, "%f", (float)col_selected[0]);
- xmms_cfg_write_string(conf, "TitleFader", "color-red", cBuffer);
- sprintf(cBuffer, "%f", (float)col_selected[1]);
- xmms_cfg_write_string(conf, "TitleFader", "color-green", cBuffer);
- sprintf(cBuffer, "%f", (float)col_selected[2]);
- xmms_cfg_write_string(conf, "TitleFader", "color-blue", cBuffer);
- // font save
- g_free(cBuffer);
- cBuffer = gtk_font_selection_get_font_name(GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(font)->fontsel));
- xmms_cfg_write_string(conf, "TitleFader", "font", cBuffer);
- g_free(cBuffer);
-
- //save fade position
- cBuffer = new char[sizeof(int) * 8 + 1];
- sprintf(cBuffer, "%i",(int)((gtk_range_get_adjustment(GTK_RANGE(hWinScale)))->value));
- xmms_cfg_write_string(conf, "TitleFader", "hWinScalePos", cBuffer);
- sprintf(cBuffer, "%i", (int)((gtk_range_get_adjustment(GTK_RANGE(vWinScale)))->value));
- xmms_cfg_write_string(conf, "TitleFader", "vWinScalePos", cBuffer);
-
- sprintf(cBuffer, "%i", (int)((gtk_range_get_adjustment(GTK_RANGE(frameScale)))->value));
- xmms_cfg_write_string(conf, "TitleFader", "frameScalePos", cBuffer);
- g_free(cBuffer);
-
- // save alignment
- // don't free because its a pointer upon a pointer
- cBuffer = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(hAlignCombo)->entry));
- xmms_cfg_write_string(conf, "TitleFader", "hAlignComboSelection", cBuffer);
- cBuffer = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(vAlignCombo)->entry));
- xmms_cfg_write_string(conf, "TitleFader", "vAlignComboSelection", cBuffer);
- cBuffer = new char[sizeof(long) * 8 + 1];
- sprintf(cBuffer, "%u", fadeOptions);
- xmms_cfg_write_string(conf, "TitleFader", "fadeOptions", cBuffer);
-
- g_free(cBuffer);
-
- // at the end: save it !!
- xmms_cfg_write_default_file(conf);
- xmms_cfg_free(conf);
-
-
- }
- void Config::pos_sel_update(GtkWidget *widget, const int &_x, const int &_y) {
- int x, y;
- GdkRectangle update_rect;
- // x y limiting
- x = _x>pos_sel_width-1 ? pos_sel_width : _x;
- x = _x<0 ? 0 : x;
- y = _y>pos_sel_height-1 ? pos_sel_height : _y;
- y = _y<0? 0: y;
- update_rect.x = 0;
- update_rect.y = 0;
- update_rect.width = pos_sel_width;
- update_rect.height = pos_sel_height;
-
- // bad delete change this!!
- gdk_draw_rectangle (pos_sel_pixmap, widget->style->white_gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
- gdk_draw_rectangle(pos_sel_pixmap, widget->style->black_gc, 0, x- 50 + xCorrect, y-5 + yCorrect, 100, 10);
- gdk_draw_line(pos_sel_pixmap, widget->style->black_gc, -1, y, x -50+ xCorrect, y);
- gdk_draw_line(pos_sel_pixmap, widget->style->black_gc, x + 50 + xCorrect, y, pos_sel_width, y);
- gdk_draw_line(pos_sel_pixmap, widget->style->black_gc, x, -1, x, y -5+ yCorrect);
- gdk_draw_line(pos_sel_pixmap, widget->style->black_gc, x, y +5+ yCorrect, x , pos_sel_height);
- gtk_widget_draw (widget, &update_rect);
- }
- #endif
|