summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2016-10-02Add support for HiDPI imagesTomas Bzatek8-79/+266
This works by creating corresponding hidpi image sizes on startup and letting the machinery generate high resolution images from the source images (no way to use supplied images). However since browsers expect exact image dimension multiples for the particular scale factor, a reference image size (scale factor 1.0x) must be read first, then cropped to match reference aspect ratio and resized to exact dimensions. That way pixel-perfect results can be achieved for the chosen scale factor. TODO: the CSS background-image: image-set() tags are not supported on Firefox. TODO: try the 1.5x scale factor
2016-10-02generators: Don't read EXIF data for all image sizesTomas Bzatek1-1/+1
EXIF data were read in cases where weren't even used.
2016-10-02jpeg-utils: Add support for custom resize optionsTomas Bzatek8-12/+185
This change brings the possibility to tweak resize options using standard ImageMagick `convert` command syntax. Separate options are offered for thumbnails.
2016-09-23generators: Make image quality threshold inclusiveTomas Bzatek1-1/+1
(95% + 5% threshold == 100% source image quality acceptance)
2016-09-23fluid: Use CSS media queries to determine displayed image sizeTomas Bzatek3-68/+45
This is a huge step forward in terms of usability and simplicity. Image sizes are now determined by browser automatically based on window width. As a result the image size switch buttons have been removed and only a single page is generated (index.html). Note: in order to make image title, description and EXIF table dynamically aligned to the image width, "display: table" and relatives were used. This may not be the best webdesigner practice but it's an effective and sufficient approach for the moment.
2016-09-23generators: Expose all image sizesTomas Bzatek1-12/+55
A new block LIST_PICTURE_ALL_SIZES has been introduced to expose all available image sizes when iterating through the album items. Image size availability can be tested by the HAVE_IMG_SIZE_xxx define where "xxx" is an upper-case image size name as defined in the theme XML file. Similarly the image standard tags IMG_SIZE_W__xxx, IMG_SIZE_H__xxx and IMG_SRC__xxx have been introduced as well.
2016-09-19block-parser: Clear processed data for further useTomas Bzatek3-3/+37
This change will allow certain blocks to be present multiple times and processed independently within a single page.
2016-09-18Introduce resizing thresholdsTomas Bzatek9-184/+301
This commit brings deeper changes to the image sizes concept. The goal was to allow more flexible input in resizing vs. supplied files mixed mode. Instead of hard <noresize> flags the decision whether to resize or copy an image is now based on threshold. While not 100% universal, it brings more control regarding image size bounds. Also brings a level of tolerance for specific errors (off-by-one exports). Image sizes' rules are a bit simpler, hopefully easier to understand. A lot can be achieved by combination of thresholds.
2016-09-17Drop explicit references to "original" and "preview" image sizesTomas Bzatek3-46/+42
All image sizes are now equal, no special treatment (except of thumbnails).
2016-09-17Drop legacy nofullsize and album width/height/quality tagsTomas Bzatek9-151/+45
This drops the legacy functionality that doesn't really fit into the new flexible design concept and makes code unnecessarily complicated. Most of these overrides affected only the "preview" image size anyway. This also makes the <item src> attribute mandatory as it's being the only source of metadata (unless overriden or supplied externally). This unfortunately breaks the so-far 100% album XML files compatibility.
2016-09-11generators: Optionally warn when an image is being resizedTomas Bzatek3-3/+12
This adds commandline argument --debug-warn-resize that is useful for debugging image resizing, particularly for detecting unintended supplied image resizes.
2016-09-11atom-writer: Use _DEFAULT_SOURCE instead of deprecated _BSD_SOURCETomas Bzatek1-1/+1
Needed for struct tm.tm_gmtoff
2016-04-03cgg-dirgen: Support the 'hires' image sizeTomas Bzatek1-0/+13
Used by the new fluid theme.
2016-04-03Switch the sample gallery to the new fluid themeTomas Bzatek2-2/+2
2016-04-03New 'fluid' themeTomas Bzatek12-1/+1443
Introducing a modern looking theme that changes gallery philosophy a bit. Instead of having thumbnails on an album page and photos on separate pages this new design brings emphasis on story telling. Viewer is advised to go through the whole album sequentially, bringing atmosphere to the whole set. All photos are loaded within a single page and keyboard navigation via left/right arrows is supposed to be used to switch the presentation mode on. Three photo sizes are supported now with the 'preview' size being the default. High resolution size has been introduced for 2560x1440 screens and larger. Note that this template uses code from 3rd parties, see CREDITS for details. I haven't been able to contact anyone behind the TheCodePlayer.com project so licensing of the breadcrumbs might be an issue.
2016-04-03jpeg-utils: Override artist and owner nameTomas Bzatek8-0/+37
Useful to override previous camera owner name stored in EXIF.
2016-04-03gallery-utils: Copy extra files recursivelyTomas Bzatek3-2/+44
This brings support for copying whole directories when specified in album extra files or template supplemental files.
2015-08-29jpeg-utils: Unify media libraries initializationTomas Bzatek3-6/+30
Both MagickWand and exiv2 needs some initialization and cleanup, move it to jpeg-utils for clean includes in cgg.c. Also add explicit exiv2 XMP initialization as stated on http://dev.exiv2.org/projects/exiv2/wiki/Thread_safety: "The XMP SDK initialization function is not mutex protected, thus Exiv2::XmpParser::initialize is not thread-safe. Therefore, multi-threaded applications need to ensure that this XMP function is serialized, e.g., by calling them from an initialization section which is run before any threads are started." See also https://bugs.kde.org/show_bug.cgi?id=166424
2015-08-29setup: Fix setup files version checkTomas Bzatek1-3/+3
Logical issue, found by a gcc-5.2.0 warning.
2015-08-29jpeg-utils: Filter out certain tags from external EXIF fileTomas Bzatek2-1/+82
Turned out that we shouldn't blindly copy all metadata from the supplied external EXIF file since they belong to a different image. This includes image size, JPEG compression parameters, rotation etc. This commit adds tag filtering so that not all tags are copied, retaining the important ones from the gallery image. The list of retained tags is by no means complete and is subject to future tweaks. For the moment this feature is recommended to be turned off (and is by default).
2015-02-01theming: Fix thumbnail sizes validationTomas Bzatek1-2/+5
2015-02-01generators: Expose ITEM_INDEX value for non-picture itemsTomas Bzatek1-1/+4
The returned number corresponds with the next picture item ID, for templates to present related information (i.e. section beginning) for the particular picture.
2015-02-01jpeg-utils: Use the nicer unicode "f" for the aperture value stringTomas Bzatek1-1/+1
2015-02-01Move the current design templates in the "classic" subdirTomas Bzatek11-14/+19
Let's call this design a "classic" one.
2015-02-01theming: Introduce image size fallback modeTomas Bzatek4-41/+97
This changes image size handling a little bit. An optional <fallback size="xxx" /> tag tells the generator to use different image size when an image for the current image size has not been supplied from the album XML file. This is effectively used for the legacy <nofullsize> tag fallback. More generally this is useful for templates showing additional image sizes. Also saves space as images not having the custom size supplied are not generated from the source image.
2015-02-01jpeg-utils: Add some assertsTomas Bzatek1-0/+8
Users are not really supposed to hit any of them, it would indicate a programmer mistake otherwise.
2015-01-30theming: Fix the have_image_size() nofullsize testTomas Bzatek1-4/+0
The "original" image size presence should not really be reported when the "preview" image size substitutes it due to its absence (not defined in the album XML file).
2015-01-30theming: Implement have_album_image_size() block functionTomas Bzatek1-0/+37
Similar to the have_image_size() block function this is its variation operating over the album. The block condition is true if there's at least one item in the album of the specified image size. Respects the legacy "nofullsize" tags. Takes one mandatory argument of image size name.
2015-01-26block-parser: Don't call the destroy func on NULL user_data pointerTomas Bzatek1-1/+1
2015-01-25theming: Implement have_image_size() block functionTomas Bzatek1-0/+45
This can be used to query image size availability for the current item. While images are normally generated for theme-defined image sizes and thus guaranteed to be available, this function queries if the image of defined size has really been supplied in album XML files. Takes in account the legacy "nofullsize" tags. Takes one mandatory argument of image size name.
2015-01-25block-parser: Enhance block_parser_register_function() with a destroy notify ↵Tomas Bzatek3-16/+25
callback
2015-01-25generators: Rename HAS_ conditionals to HAVE_Tomas Bzatek2-13/+13
... just a matter of personal taste. Note: this breaks the template API only in current unreleased versions.
2015-01-25theming: Make custom image size handling fully flexibleTomas Bzatek8-100/+129
This commit brings full flexibility of custom image size definition and usage. When a custom image size is defined, it automatically maps to the album <item> tag arguments. Alternatively, this automatic name matching can be overriden by <size tagname="..."> theme setup tags. This allows us to supply image of different sizes that can be also used in templates. Legacy behaviour of "fullsize" and "preview" image size fallback is retained (though not recommended in new theming setups).
2015-01-11generators: Remove unnecessary picture page global blockTomas Bzatek2-28/+14
Turned out there was no need for having most of the picture page closed in a block.
2015-01-11generators: Allow undefined album image and thumbnail sizesTomas Bzatek1-76/+77
There may be certain cases where images or thumbnails on album pages are not needed and textual representation is just fine. Metadata pulled from the source image files are still processed and exposed.
2015-01-11theming: Make lookup_image_size_for_name() NULL-awareTomas Bzatek1-0/+3
2015-01-11theming: Remove invalid <picture> theme validation checkTomas Bzatek1-5/+1
As per rules defined in the sample default.xml setup file the whole <picture> theme definiton block is not mandatory anymore. The rest of the code plays nicely already.
2015-01-04Introduce new "fixed" thumbnail crop modeTomas Bzatek6-23/+74
This mode retains given aspect ratio and crops the area from inside of the source image.
2015-01-04generators: Newline at the end of generated .htaccess fileTomas Bzatek1-1/+2
2015-01-04generators: Use single function for all templatesTomas Bzatek11-640/+600
This commit makes use of a common function for all template parsing and page writing. The behaviour is controlled by the "item" argument passed in. This allows us to have a single code that generates code for list of items as well as for a single item. In the future, this can be used for e.g. combining thumbnails and large images on the same page. Other than that this commit also brings several other changes: - further clarification of theming setup XML file - <protected_thumbnail> tag has been moved out of the <album> structure into the <index> structure where it functionally belongs. Only whole albums can be protected and the substitute thumbnail is displayed on index pages. - position marker format has been broken out to a constant - added few more FIXMEs to mark places that will change soon - some template variables have been renamed
2014-09-18generators: Separate common code outTomas Bzatek1-142/+136
2014-09-17theming: Make navigation bar strongly themedTomas Bzatek4-84/+226
Navigation bar can be complex and comprises of several different elements. Until now the navigation bar was almost hardcoded. We needed to separate different types of navigation bar elements: * NAV_BAR_FIRST - the first element, usually denoting gallery root. This element takes priority and is used when there are no other elements in the path. * NAV_BAR_ELEM - normal element used in the path between first and last elements. * NAV_BAR_LAST - ending element, guaranteed there's at least the NAV_BAR_FIRST element before. * NAV_BAR_CURRENT - non-clickable informational element displaying the current page title. Optional, in contrast to the former three defines. * NAV_BAR_CURRENT_ROOT - a special case of the latter one, displayed at the very root page. Also optional, in that case the navigation bar would become empty.
2014-09-15theming: Allow themes to use different thumbnail image sizesTomas Bzatek9-147/+184
This change makes thumbnail image sizes more flexible by explicitly stating the particular image size is a thumbnail. And each thumbnail image size can have different squared settings. On the theme side it's now mandatory to specify which thumbnail size to use (if applicable). This allows us to have different thumbnail styles for index and album pages. This commit also removes the <squared_thumbnails> tag from setup.xml file but retains fallback for ver. 1 setup.xml files.
2014-09-15theming: Verify that the "original" image size is definedTomas Bzatek1-0/+4
Let's make it mandatory for now.
2014-09-15theming: Define meaning of the <no_resize> tagTomas Bzatek2-1/+7
Although probably not very common scenario, let's be consistent across all defined image sizes and clearly state that an explicitly supplied image file for an optional image size should carry the tag in order not to get resized.
2014-09-14theming: Clarify image size rulesTomas Bzatek1-4/+13
Adding notes mostly about legacy features.
2014-09-13Introduce properties tableTomas Bzatek9-131/+581
This is a new internal properties storage for attributes that can be defined both in the item and album scope, with the item scope taking priority. The big advantage is a better distinguishment from an undefined, default value. It also makes easier to retrieve attributes with properly defined scope priorities.
2014-03-22Make error reporting nicer when referenced image is not availableTomas Bzatek2-10/+30
There were lots of errors reported for the same issue recently, let's silence some and only report image copy/resize errors.
2014-03-21Use setup2.xml if presentTomas Bzatek2-5/+11
To allow combined use of different cgg versions, user may provide ver. 2 setup.xml file that takes priority over standard setup.xml file. This applies only to current working directory, not the files placed in ~/.cgg or distributed as $PREFIX/share/cgg.
2014-03-21Make setup files versioned and add fallback for old versionsTomas Bzatek6-9/+142
This commit makes setup files (setup.xml and referenced design setup xml file) versioned and adds checks for correct versions. If a newer versioned file is detected, warning is printed out in assumption that a stray cgg version is used. If the version information is missing or is lower than expected version, files are read in legacy mode. Some values are left on defaults and missing mandatory values are either read from renamed keys or made up to suit current requirements. This essentially brings back compatibility with old setup.xml files that are usually part of galleries. However, some values are hardcoded and should be kept in mind to update and test the legacy mode along with future enhancements.