Ticket #1556: svnpatch

File svnpatch, 7.0 KB (added by hachuah@…, 14 years ago)
Line 
1Index: glsingleview.cpp
2===================================================================
3--- glsingleview.cpp    (revision 9409)
4+++ glsingleview.cpp    (working copy)
5@@ -35,6 +35,7 @@
6 
7 #include "glsingleview.h"
8 #include "galleryutil.h"
9+#include "config.h"
10 
11 GLSDialog::GLSDialog(const ThumbList& itemList, int pos, int slideShow,
12                      MythMainWindow *parent, const char *name)
13@@ -143,6 +144,11 @@
14     m_texInfo       = 0;
15     m_showInfo      = false;
16     m_sequence      = 0;
17+#ifdef EXIF_SUPPORT
18+    m_showDate      = gContext->GetNumSetting("SlideshowShowDate");
19+    m_texDate       = 0;
20+#endif
21+      // ---------------------------------------------------------------
22 
23     // ---------------------------------------------------------------
24 
25@@ -184,6 +190,10 @@
26         glDeleteTextures(1, &m_texItem[0].tex);
27     if (m_texItem[1].tex)
28         glDeleteTextures(1, &m_texItem[1].tex);
29+#ifdef EXIF_SUPPORT
30+//    if (m_texDate)
31+ //       glDeleteTextures(1, &m_texDate);
32+#endif   
33 }
34 
35 void GLSingleView::initializeGL()
36@@ -480,7 +490,6 @@
37     glEnd();
38 
39     if (m_showInfo) {
40-
41         createTexInfo();
42     
43         glMatrixMode(GL_MODELVIEW);
44@@ -508,7 +517,34 @@
45         glEnd();
46 
47     }
48+#ifdef EXIF_SUPPORT
49+    if (m_showDate) {
50+       createDateInfo(date);
51+       glMatrixMode(GL_MODELVIEW);
52+       glLoadIdentity();
53 
54+       glMatrixMode(GL_TEXTURE);
55+       glLoadIdentity();
56+
57+       glBindTexture(GL_TEXTURE_2D, m_texDate);
58+       glBegin(GL_QUADS);
59+       {
60+           glColor4f(1.0, 1.0, 1.0, 0.5);
61+           glTexCoord2f(0, 0);
62+           glVertex3f(0.3, -1, 0);
63+
64+           glTexCoord2f(1, 0);
65+           glVertex3f(1, -1, 0);
66+
67+           glTexCoord2f(1, 1);
68+           glVertex3f(1, -0.8, 0);
69+
70+           glTexCoord2f(0, 1);
71+           glVertex3f(0.3, -0.8, 0);
72+       }
73+       glEnd();       
74+    }
75+#endif
76 }
77 
78 void GLSingleView::advanceFrame()
79@@ -616,6 +652,10 @@
80         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
81         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
82 
83+#ifdef EXIF_SUPPORT
84+        date  = GalleryUtil::getDate(item->path);
85+#endif
86+
87     }
88 }
89 
90@@ -1545,3 +1585,35 @@
91     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
92 }
93 
94+#ifdef EXIF_SUPPORT
95+void GLSingleView::createDateInfo(QString value)
96+{
97+    if (m_texDate)
98+        glDeleteTextures(1, &m_texDate);
99+
100+    QPixmap pix(256, 32);
101+
102+    QPainter p(&pix, this);
103+    p.fillRect(0,0,pix.width(),pix.height(),Qt::black);
104+    p.setPen(Qt::white);
105+
106+    p.drawText(5, 5, pix.width()-5, pix.height()-5,
107+               Qt::AlignLeft, value);
108+    p.end();
109+
110+    QImage img(pix.convertToImage());
111+    img = img.convertDepth(32);
112+
113+    QImage tex = convertToGLFormat(img);
114+
115+    /* create the texture */
116+    glGenTextures(1, &m_texDate);
117+    glBindTexture(GL_TEXTURE_2D, m_texDate);
118+    /* actually generate the texture */
119+    glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
120+                  GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
121+    /* enable linear filtering  */
122+    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
123+    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
124+}
125+#endif
126Index: galleryutil.h
127===================================================================
128--- galleryutil.h       (revision 9409)
129+++ galleryutil.h       (working copy)
130@@ -28,7 +28,7 @@
131     static bool isImage(const char* filePath);
132     static bool isMovie(const char* filePath);
133     static long getNaturalRotation(const char* filePath);
134-
135+    static QString getDate(const char* filePath);
136     static QString getCaption(const QString &filePath);
137 
138     static bool loadDirectory(ThumbList& itemList,
139Index: glsingleview.h
140===================================================================
141--- glsingleview.h      (revision 9409)
142+++ glsingleview.h      (working copy)
143@@ -26,6 +26,7 @@
144 #include <qmap.h>
145 
146 #include "iconview.h"
147+#include "config.h"
148 #include "sequence.h"
149 
150 class QImage;
151@@ -99,6 +100,11 @@
152     bool          m_effectRunning;
153     bool          m_running;
154     int           m_slideShow;
155+#ifdef EXIF_SUPPORT
156+    int           m_showDate;
157+    GLuint        m_texDate;
158+    QString       date;
159+#endif
160 
161     GLuint        m_texInfo;
162     bool          m_showInfo;
163@@ -121,7 +127,9 @@
164     void  paintTexture();
165     void  rotate(int angle);
166     void  createTexInfo();
167-
168+#ifdef EXIF_SUPPORT
169+    void  createDateInfo(QString);
170+#endif
171     void  registerEffects();
172     EffectMethod getRandomEffect();
173 
174Index: gallerysettings.cpp
175===================================================================
176--- gallerysettings.cpp (revision 9409)
177+++ gallerysettings.cpp (working copy)
178@@ -72,6 +72,18 @@
179     return gc;
180 };
181 
182+#ifdef EXIF_SUPPORT
183+static HostCheckBox *SlideshowShowDate()
184+{
185+    HostCheckBox *gc = new HostCheckBox("SlideshowShowDate");
186+    gc->setLabel(QObject::tr("Show Photo date on image"));
187+    gc->setHelpText(QObject::tr("Check this to show the date/time "
188+                                "that the photo was taken on the image"));
189+    return gc;
190+};
191+#endif
192+
193+
194 static HostComboBox *SlideshowOpenGLTransition()
195 {
196     HostComboBox *gc = new HostComboBox("SlideshowOpenGLTransition");
197@@ -165,7 +177,7 @@
198         addChild(MythGalleryMoviePlayerCmd());
199 
200 #ifdef OPENGL_SUPPORT
201-       
202+
203         HostCheckBox* useOpenGL = SlideshowUseOpenGL();
204         addChild(useOpenGL);
205         setTrigger(useOpenGL);
206@@ -179,6 +191,11 @@
207         regularConfig->addChild(SlideshowBackground());
208         addTarget("0", regularConfig);
209 
210+#ifdef EXIF_SUPPORT
211+        HostCheckBox* showDate = SlideshowShowDate();
212+       openGLConfig->addChild(showDate);
213+#endif       
214+
215 #else
216         addChild(MythGalleryOverlayCaption());
217         addChild(SlideshowTransition());
218Index: galleryutil.cpp
219===================================================================
220--- galleryutil.cpp     (revision 9409)
221+++ galleryutil.cpp     (working copy)
222@@ -263,3 +263,47 @@
223 
224     return caption;
225 }
226+
227+QString GalleryUtil::getDate(const char* filePath)
228+{
229+    QString date;
230+    try
231+    {
232+#ifdef EXIF_SUPPORT
233+        char *exifvalue = new char[1024];
234+        ExifData *data = exif_data_new_from_file (filePath);
235+        if (data)
236+        {
237+            for (int i = 0; i < EXIF_IFD_COUNT; i++)
238+            {
239+                    ExifEntry *entry = exif_content_get_entry (data->ifd[i],
240+                                                        EXIF_TAG_DATE_TIME);
241+                    if (entry)
242+                    {
243+#if NEW_LIB_EXIF
244+                        exif_entry_get_value(entry, exifvalue, 1023);
245+                        date = exifvalue;
246+#else
247+                        date = exif_entry_get_value(entry);
248+#endif
249+                        break;
250+                    }
251+            }
252+            exif_data_free(data);
253+        }
254+        else
255+        {
256+                std::cerr << "Could not load exif data from " << filePath << std::endl;
257+        }
258+       
259+        delete [] exifvalue;
260+       
261+#endif // EXIF_SUPPORT
262+    }
263+    catch (...)
264+    {
265+        std::cerr << "GalleryUtil: Failed to extract EXIF headers from "
266+        << filePath << std::endl;
267+    }
268+    return date;
269+}