summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2001-03-26 18:03:32 +0000
committerleo2001-03-26 18:03:32 +0000
commit8d291f870c589a35930c068326daffceebc63daa (patch)
tree2aa85c440c4f3e68efe9c938e6a09d9c74dbe708
parentf1b22e07982337233ee4c1ad4cfbee0334ad93df (diff)
Fixed the file dialog preview.
git-svn-id: http://svn.leocad.org/trunk@264 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--common/image.cpp22
-rw-r--r--common/image.h3
-rw-r--r--common/texture.cpp2
-rwxr-xr-xlinux/dlgfile.cpp29
4 files changed, 32 insertions, 24 deletions
diff --git a/common/image.cpp b/common/image.cpp
index 7f2e5c8..1accf6f 100644
--- a/common/image.cpp
+++ b/common/image.cpp
@@ -41,6 +41,20 @@ void Image::FreeData ()
m_pData = NULL;
}
+void Image::Allocate (int width, int height, bool alpha)
+{
+ FreeData ();
+
+ m_nWidth = width;
+ m_nHeight = height;
+ m_bAlpha = alpha;
+
+ if (m_bAlpha)
+ m_pData = (unsigned char*)malloc (width * height * 4);
+ else
+ m_pData = (unsigned char*)malloc (width * height * 3);
+}
+
void Image::ResizePow2 ()
{
int i, shifted_x, shifted_y;
@@ -124,12 +138,11 @@ bool Image::FileLoad (File& file)
file.Seek (-8, SEEK_CUR);
// Check for the BMP header
- if ((buf[0] == 'B') && (buf[1] == 'M'))
+ if ((buf[0] == 'B') && (buf[1] == 'M'))
{
if (!LoadBMP (file))
return false;
- ResizePow2 ();
return true;
}
@@ -139,7 +152,6 @@ bool Image::FileLoad (File& file)
if (!LoadJPG (file))
return false;
- ResizePow2 ();
return true;
}
#endif
@@ -153,20 +165,18 @@ bool Image::FileLoad (File& file)
if (!LoadPNG (file))
return false;
- ResizePow2 ();
return true;
}
#endif
// Check for the GIF header
if ((buf[0] == 'G') && (buf[1] == 'I') && (buf[2] == 'F') &&
- (buf[3] == '8') && ((buf[4] != '7') || (buf[4] == '9')) &&
+ (buf[3] == '8') && ((buf[4] == '7') || (buf[4] == '9')) &&
(buf[5] == 'a'))
{
if (!LoadGIF (file))
return false;
- ResizePow2 ();
return true;
}
diff --git a/common/image.h b/common/image.h
index ae7fb9e..8bff6c5 100644
--- a/common/image.h
+++ b/common/image.h
@@ -19,6 +19,7 @@ public:
void Resize (int width, int height);
void ResizePow2 ();
void FromOpenGL (int width, int height);
+ void Allocate (int width, int height, bool alpha);
int Width () const
{ return m_nWidth; }
@@ -50,4 +51,4 @@ protected:
void SaveVideo(char* filename, Image *images, int count, float fps);
-#endif // _IMAGE_H_ \ No newline at end of file
+#endif // _IMAGE_H_
diff --git a/common/texture.cpp b/common/texture.cpp
index a4d34f2..0f31195 100644
--- a/common/texture.cpp
+++ b/common/texture.cpp
@@ -155,6 +155,8 @@ bool Texture::LoadFromFile (char* strFilename, bool bFilter)
if (image.FileLoad (strFilename))
{
+ image.ResizePow2 ();
+
m_nWidth = image.Width ();
m_nHeight = image.Height ();
diff --git a/linux/dlgfile.cpp b/linux/dlgfile.cpp
index a215466..7806ab6 100755
--- a/linux/dlgfile.cpp
+++ b/linux/dlgfile.cpp
@@ -25,7 +25,8 @@ static void openprojectdlg_select (GtkCList *clist, gint row, gint col, GdkEvent
{
GtkWidget *parent = gtk_widget_get_toplevel (GTK_WIDGET (clist));
char *filename, *p;
- LC_IMAGE *image = NULL;
+ bool loaded = false;
+ Image image;
filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (parent));
@@ -56,18 +57,14 @@ static void openprojectdlg_select (GtkCList *clist, gint row, gint col, GdkEvent
{
file.Seek (54, SEEK_CUR);
- image = (LC_IMAGE*)malloc (120 * 100 * 3 + sizeof (LC_IMAGE));
- image->width = 120;
- image->height = 100;
- image->bits = (unsigned char*)image + sizeof (LC_IMAGE);
-
- file.Read (image->bits, 36000);
+ image.Allocate (120, 100, false);
+ file.Read (image.GetData (), 36000);
for (int y = 0; y < 50; y++)
for (int x = 0; x < 120; x++)
{
- unsigned char *from = (unsigned char*)image->bits + x*3 + y*360;
- unsigned char *to = (unsigned char*)image->bits + x*3 + (100-y-1)*360;
+ unsigned char *from = image.GetData() + x*3 + y*360;
+ unsigned char *to = image.GetData() + x*3 + (100-y-1)*360;
unsigned char tmp[3] = { from[0], from[1], from[2] };
from[0] = to[2];
@@ -77,10 +74,11 @@ static void openprojectdlg_select (GtkCList *clist, gint row, gint col, GdkEvent
to[1] = tmp[1];
to[2] = tmp[0];
}
+ loaded = true;
}
else
{
- image = OpenImage (&file, LC_IMAGE_GIF);
+ loaded = image.FileLoad (file);
}
}
}
@@ -88,7 +86,7 @@ static void openprojectdlg_select (GtkCList *clist, gint row, gint col, GdkEvent
file.Close();
}
- if (image == NULL)
+ if (loaded == false)
{
GtkWidget *w = GTK_WIDGET (preview);
guchar row[360];
@@ -103,15 +101,12 @@ static void openprojectdlg_select (GtkCList *clist, gint row, gint col, GdkEvent
for (int y = 0; y < 100; y++)
gtk_preview_draw_row (preview, row, 0, y, 120);
gtk_widget_draw (w, NULL);
-
}
else
{
for (int y = 0; y < 100; y++)
- gtk_preview_draw_row (preview, ((unsigned char*)image->bits)+y*360, 0, y, 120);
+ gtk_preview_draw_row (preview, image.GetData ()+y*360, 0, y, 120);
gtk_widget_draw (GTK_WIDGET (preview), NULL);
-
- free (image);
}
}
@@ -186,7 +181,7 @@ int openprojectdlg_execute (char* filename)
static void saveprojectdlg_preview (GtkToggleButton *button, gpointer data)
{
- Sys_ProfileSaveInt ("Default", "SavePreview", gtk_toggle_button_get_active (button));
+ Sys_ProfileSaveInt ("Default", "Save Preview", gtk_toggle_button_get_active (button));
}
// used by the save project and save picture dialogs
@@ -231,7 +226,7 @@ int saveprojectdlg_execute (char* filename)
gtk_widget_show (check);
gtk_box_pack_start (GTK_BOX (GTK_FILE_SELECTION (dlg)->main_vbox), check, FALSE, FALSE, 0);
- int i = Sys_ProfileLoadInt ("Default", "SavePreview", 0);
+ int i = Sys_ProfileLoadInt ("Default", "Save Preview", 0);
if (i != 0)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
gtk_signal_connect (GTK_OBJECT (check), "toggled", GTK_SIGNAL_FUNC (saveprojectdlg_preview), NULL);