diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/gui/gui.cpp | 140 | ||||
-rw-r--r-- | src/gui/gui.h | 2 | ||||
-rw-r--r-- | src/gui/login.cpp | 3 | ||||
-rw-r--r-- | src/gui/passwordfield.cpp | 49 | ||||
-rw-r--r-- | src/gui/passwordfield.h | 47 | ||||
-rw-r--r-- | src/gui/textfield.h | 2 |
7 files changed, 100 insertions, 144 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index ffc5023a..1890a8d6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -11,6 +11,7 @@ tmw_SOURCES = sound/sound.cpp \ gui/inventory.cpp \ gui/login.cpp \ gui/npc.cpp \ + gui/passwordfield.cpp \ gui/progressbar.cpp \ gui/setup.cpp \ gui/shop.cpp \ diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 714f114f..0c052fec 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -727,146 +727,6 @@ int tmw_radio_proc(int msg, DIALOG *d, int c) { return D_O_K; } -int tmw_edit_proc(int msg, DIALOG *d, int c) { - int x; - int tx, ty, l; - int rtm = 0; - int col = 0; - char* start; - char* text; - char hack; - int cl, cr, cb, ct; - int lb, rb; - - - if (msg == MSG_DRAW) { - rectfill(gui_bitmap, d->x, d->y, d->x + d->w, d->y+d->h, d->bg); - draw_skinned_rect(gui_bitmap, &gui_skin.textbox.bg, d->x, d->y, d->w, d->h); - - if (d->flags & D_DISABLED) { - col = gui_skin.textbox.textcolor[1]; - } else { - col = gui_skin.textbox.textcolor[0]; - } - - lb = gui_skin.textbox.bg.grid[0]->w; - rb = gui_skin.textbox.bg.grid[2]->w; - tx = d->x + lb; - ty = d->y + (d->h - text_height(font))/2; - - - text = (char *)d->dp; - start = text; - - if (gui_bitmap->clip) { - cl = gui_bitmap->cl; - ct = gui_bitmap->ct; - cr = gui_bitmap->cr; - cb = gui_bitmap->cb; - } else { - cl=ct=0; - cr=gui_bitmap->w; - cb=gui_bitmap->h; - } - set_clip_rect(gui_bitmap, tx, ty, d->x+d->w-rb, ty + text_height(font)); - hack = text[d->d2]; - text[d->d2] = '\0'; - l = text_length(font, text); - text[d->d2] = hack; - - if (l > d->w-lb-rb) { - tx += ((d->w-lb-rb) - l); - } - gui_text(gui_bitmap, start, tx, ty, col, 0); - - - if (d->flags & D_GOTFOCUS) { - hack = text[d->d2]; - text[d->d2] = '\0'; - x = tx + text_length(font, text); - vline(gui_bitmap, x, ty, ty + text_height(font), col); - text[d->d2] = hack; - } - set_clip_rect(gui_bitmap, cl, ct, cr, cb); - } else { - return d_edit_proc(msg, d, c); - } - return D_O_K; -} - -int tmw_password_proc(int msg, DIALOG *d, int c) { -// BITMAP *box = NULL; - int x; - int tx, ty, l; - int rtm = 0; - int col = 0; - char* start; - char* text; - char hack; - int cl, cr, cb, ct; - int lb, rb; - - - if (msg == MSG_DRAW) { - rectfill(gui_bitmap, d->x, d->y, d->x + d->w, d->y+d->h, d->bg); - draw_skinned_rect(gui_bitmap, &gui_skin.textbox.bg, d->x, d->y, d->w, d->h); - - if (d->flags & D_DISABLED) { - col = gui_skin.textbox.textcolor[1]; - } else { - col = gui_skin.textbox.textcolor[0]; - } - - lb = gui_skin.textbox.bg.grid[0]->w; - rb = gui_skin.textbox.bg.grid[2]->w; - tx = d->x + lb; - ty = d->y + (d->h - text_height(font))/2; - - - text = (char *)malloc(strlen((char *)d->dp)+1); - // Sull: new ansi standard - unsigned int i; - for(i=0;i<strlen((char *)d->dp);i++)text[i] = '*'; - text[i] = '\0'; - start = text; - - if (gui_bitmap->clip) { - cl = gui_bitmap->cl; - ct = gui_bitmap->ct; - cr = gui_bitmap->cr; - cb = gui_bitmap->cb; - } else { - cl=ct=0; - cr=gui_bitmap->w; - cb=gui_bitmap->h; - } - set_clip_rect(gui_bitmap, tx, ty, d->x+d->w-rb, ty + text_height(font)); - - hack = text[d->d2]; - text[d->d2] = '\0'; - l = text_length(font, text); - text[d->d2] = hack; - - if (l > d->w-lb-rb) { - tx += ((d->w-lb-rb) - l); - } - gui_text(gui_bitmap, start, tx, ty, col, 0); - - - if (d->flags & D_GOTFOCUS) { - hack = text[d->d2]; - text[d->d2] = '\0'; - x = tx + text_length(font, text); - vline(gui_bitmap, x, ty, ty + text_height(font), col); - text[d->d2] = hack; - } - - set_clip_rect(gui_bitmap, cl, ct, cr, cb); - } else { - return d_edit_proc(msg, d, c); - } - return D_O_K; -} int tmw_list_proc(int msg, DIALOG *d, int c) { static int ignoreRedraw = FALSE; diff --git a/src/gui/gui.h b/src/gui/gui.h index d7936c06..d987c54f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -129,8 +129,6 @@ int gui_text(BITMAP *bmp, AL_CONST char *s, int tmw_button_proc(int msg, DIALOG *d, int c); int tmw_slider_proc(int msg, DIALOG *d, int c); int tmw_radio_proc(int msg, DIALOG *d, int c); -int tmw_edit_proc(int msg, DIALOG *d, int c); -int tmw_password_proc(int msg, DIALOG *d, int c); int tmw_list_proc(int msg, DIALOG *d, int c); int tmw_text_proc(int msg, DIALOG *d, int c); int tmw_dialog_proc(int msg, DIALOG *d, int c); diff --git a/src/gui/login.cpp b/src/gui/login.cpp index 4ba0fe67..252d9929 100644 --- a/src/gui/login.cpp +++ b/src/gui/login.cpp @@ -26,6 +26,7 @@ #include "button.h" #include "checkbox.h" #include "textfield.h" +#include "passwordfield.h" #include "../graphic/graphic.h" @@ -35,7 +36,7 @@ LoginDialog::LoginDialog(gcn::Container *parent): userLabel = new gcn::Label("Name:"); passLabel = new gcn::Label("Password:"); userField = new TextField("player"); - passField = new TextField(); + passField = new PasswordField(); keepCheck = new CheckBox("Keep", false); okButton = new Button("OK"); cancelButton = new Button("Cancel"); diff --git a/src/gui/passwordfield.cpp b/src/gui/passwordfield.cpp new file mode 100644 index 00000000..028d435b --- /dev/null +++ b/src/gui/passwordfield.cpp @@ -0,0 +1,49 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "passwordfield.h" +#include "gui.h" + + +PasswordField::PasswordField(const std::string& text): + TextField(text) +{ +} + +void PasswordField::draw(gcn::Graphics *graphics) +{ + int x, y, w, h, col; + getAbsolutePosition(x, y); + w = getWidth(); + h = getHeight(); + std::string stars; + stars.assign(mText.length(), '*'); + + if (hasFocus()) { + drawCaret(graphics, + getFont()->getWidth(stars.substr(0, mCaretPosition)) - + mXScroll); + } + + graphics->setColor(getForegroundColor()); + graphics->setFont(getFont()); + graphics->drawText(stars, 1 - mXScroll, 1); +} diff --git a/src/gui/passwordfield.h b/src/gui/passwordfield.h new file mode 100644 index 00000000..328dc4d0 --- /dev/null +++ b/src/gui/passwordfield.h @@ -0,0 +1,47 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __PASSWORDFIELD_H__ +#define __PASSWORDFIELD_H__ + +#include <allegro.h> +#include <guichan.hpp> +#include "textfield.h" + +/** + * A password field. + * + * \ingroup GUI + */ +class PasswordField : public TextField { + public: + /** + * Constructor, initializes the password field with the given string. + */ + PasswordField(const std::string& text = ""); + + /** + * Draws the text field. + */ + void draw(gcn::Graphics *graphics); +}; + +#endif diff --git a/src/gui/textfield.h b/src/gui/textfield.h index c401e416..619b87f8 100644 --- a/src/gui/textfield.h +++ b/src/gui/textfield.h @@ -40,7 +40,7 @@ class TextField : public gcn::TextField { /** * Draws the text field. */ - void draw(gcn::Graphics *graphics); + virtual void draw(gcn::Graphics *graphics); /** * Draws the background and border. |